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
Notez nous !
[Moyenne : 4.9]