Visual Basic For Applications
Les caractères spéciaux !

Utilisez librement nos macros pour supprimer les caractères spéciaux de vos fichiers Excel.

Supprimer les caractères spéciaux grâce à une macro

Lorsque l’on utilise un fichier Excel issu d’une extraction, ou que des données ne sont pas très propres, on peut se retrouver avec des informations « polluées » par des caractères spéciaux. Ces caractères sont inutiles et peuvent être supprimés afin d’avoir un meilleur rendu.

Principes et utilisation

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

N’hésitez pas à lire notre article sur les premiers pas dans 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/2017
 
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

Pour toute la feuille

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.

Sub nettoyagechamps_total()
 
'Auteur : www.Indexmatch.fr
'Date : 12/2017
 
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.8]
2018-03-08T14:29:51+00:00