Visual Basic For Applications
Comment supprimer les caractères spéciaux de vos fichiers Excel ?
Utilisez librement nos macros VBA pour supprimer les caractères spéciaux de vos classeurs Excel.
Supprimer les caractères spéciaux d’un fichier Excel grâce à une macro VBA
Lorsque l’on utilise un fichier Excel issu d’une extraction, ou que des données ne sont pas très propres, il est possible de se retrouver avec des informations « polluées » par des caractères spéciaux (comme des points d’exclamations (!) ou des « et » commerciaux (&). Ces caractères sont inutiles et peuvent être supprimés afin d’avoir un meilleur rendu.
Les principes et l’utilisation du code VBA
La macro VBA proposée ci-dessous permet de supprimer tous les caractères spéciaux d’une colonne (ou partie d’une colonne). Elle peut particulièrement être utilise pour nettoyer des données textuels (comme des raisons sociales) extraites à partir d’un logiciel de base de données ou ERP.
La macro utilise le code ASCII pour identifier les caractères spéciaux et les retirer des cellules sélectionnées.
Les lettres, accents et chiffres ne sont pas considérés comme des caractères spéciaux dans cette macro. Les caractères considérés comme spéciaux dans ce programme correspondent aux numéros ASCII suivants : 033 – 047, 058 – 064, 091 – 096, 123 – 126.
Les macros VBA pour supprimer les caractères spéciaux
N’hésitez pas à lire notre article sur les premiers pas en VBA si vous n’avez pas l’habitude d’utiliser des macros.
Pour une colonne spécifique
Pour utiliser la macro, il suffit de copier/coller le code dans l’éditeur VBA, de sélectionner les cellules (en colonne et 1 seule colonne à la fois) à traiter, et de lancer la macro.
Sub nettoyagechamps() 'Auteur : www.Indexmatch.fr 'Date : 08/2020 Dim counter As Long Dim lastRow As Long Dim column As Integer Dim counter2 As Integer Dim counter3 As Integer Dim length As Integer Dim character As Variant counter = ActiveCell.Row column = ActiveCell.column lastRow = counter + Selection.Rows.Count - 1 Do While counter <= lastRow counter2 = 0 length = Len(Cells(counter, column).Value) Do While counter2 < length character = Left(Right(Cells(counter, column), length - counter2), counter2 - (counter2 - 1)) If Asc(character) >= 33 And Asc(character) <= 47 Then Cells(counter, column).Value = Replace(Cells(counter, column), character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 58 And Asc(character) <= 64 Then Cells(counter, column).Value = Replace(Cells(counter, column), character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 91 And Asc(character) <= 96 Then Cells(counter, column).Value = Replace(Cells(counter, column), character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 123 And Asc(character) <= 126 Then Cells(counter, column).Value = Replace(Cells(counter, column), character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If counter3 = 1 Then counter2 = 0 counter3 = 0 Else counter2 = counter2 + 1 counter3 = 0 End If Loop counter = counter + 1 Loop End Sub |
Supprimer les caractères spéciaux de toute une feuille Excel
Pour utiliser cette version qui va agir sur l’ensemble de la feuille sélectionnée, il suffit, comme la précédente de copier/coller le code dans l’éditeur et de lancer le programme. À la différence de la macro précédente, celle-ci va nettoyer l’ensemble de la feuille active, c’est-à-dire celle sur laquelle vous travaillez au moment du lancement de la macro VBA.
Sub nettoyagechamps_total() 'Auteur : www.Indexmatch.fr 'Date : 12/2020 Dim counter2 As Integer Dim counter3 As Integer Dim length As Integer Dim character As Variant Dim wb As Workbook Dim Cell As Range Dim Adresse As String Dim AdresseColumn As Integer Dim AdresseRow As Integer Adresse = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address 'recherche la dernière cellule active de votre feuille. AdresseColumn = Range(Adresse).column AdresseRow = Range(Adresse).Row For Each Cell In Range(Cells(1, 1), Cells(AdresseRow, AdresseColumn)) counter2 = 0 length = Len(Cell.Value) Do While counter2 < length character = Left(Right(Cell, length - counter2), counter2 - (counter2 - 1)) If Asc(character) >= 33 And Asc(character) <= 47 Then Cell.Value = Replace(Cell, character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 58 And Asc(character) <= 64 Then Cells(counter, column).Value = Replace(Cells(counter, column), character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 91 And Asc(character) <= 96 Then Cell.Value = Replace(Cell, character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If Asc(character) >= 123 And Asc(character) <= 126 Then Cells.Value = Replace(Cell, character, "") If counter2 = 0 Then counter3 = 1 Else counter2 = 0 End If End If If counter3 = 1 Then counter2 = 0 counter3 = 0 Else counter2 = counter2 + 1 counter3 = 0 End If Loop counter = counter + 1 Next Cell End Sub |