Sub Nettoyage()
' Déclaration des variables, la chaîne à analyser, le résultat, 2 compteurs
' 1 flag, le caractère extrait et un tableau pour pouvoir spliter la chaîne
Dim AAnalyser As String, Résultat As String, I As Integer, J As Integer
Dim Drapeau As Boolean, Caractère As String, Tableau, Drapeau2 As Boolean
' Je met le flag en faux
Drapeau = False
' Boucle sur toutes les cellules de la première colonne
For I = 1 To Range("A65536").End(xlUp).Row
' Stockage du texte à analyser
AAnalyser = Cells(I, 1)
' Suppression des blancs avant les $
AAnalyser = Replace(AAnalyser, "$ ", "$")
' Passage du drapeau2 à faux
Drapeau2 = False
' Boucle sur tous les caractères de la chaîne en partant de la fin
' Resultat va être complétée de droite à gauche
For J = Len(AAnalyser) To 1 Step -1
' Extrait le caractère
Caractère = Mid(AAnalyser, J, 1)
' Pour éviter le 31 décembre, je modifie le drapeau2 si j'ai des caractères
Select Case Caractère
Case " ", "(", ")", ",", ".", "$", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
Case Else
Drapeau2 = True
End Select
' Teste en fonction du cas de figure
Select Case Caractère
' $ : j'ajoute une livre devant le $ et je passe le flag à faux
' car il a du passer à vrai sur les chiffres avant
Case "$"
Résultat = "£$" & Résultat
Drapeau = False
' ( : si c'est bien des chiffres qu'il y avait avant la (, j'ajoute £
' et je repasse le flag à faux, sinon, je me contente de garder (
Case "("
If Drapeau = True And Drapeau2 = False Then
Résultat = "£(" & Résultat
Drapeau = False
Else
Résultat = "(" & Résultat
End If
' Si c'est un chiffre, je pass le flag à vrai et j'ajoute le caractère
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
Drapeau = True
Résultat = Caractère & Résultat
' Si c'est un espace et que le flag est vrai, je rajoute une £
Case " "
If Drapeau = True And Drapeau2 = False Then
Résultat = "£" & Résultat
Drapeau = False
Else
Résultat = " " & Résultat
End If
Case Else
Résultat = Caractère & Résultat
End Select
' Fin de la boucle sur la chaîne
Next J
' Renvoi du résultat dans la cellule
Cells(I, 1) = Résultat
' Réinitialisation du résultat
Résultat = ""
' Fin de la boucle sur les cellules
Next I
' Deuxième boucle sur les cellules pour diviser le résultat en largeur
For I = 1 To Range("A65536").End(xlUp).Row
' Je recharge la chaîne
AAnalyser = Cells(I, 1)
' Si j'ai £ dans ma chaîne
If AAnalyser Like "*£*" Then
' Je splite la chaîne au niveau des £
Tableau = Split(AAnalyser, "£")
' Boucle pour récupérer les valeurs du tableau
For J = 1 To UBound(Tableau) + 1
' Dépot de chaque valeur du tableau dans les cellules
' Mise au format $ si $ dans le tableau
If Tableau(J - 1) Like "*$*" Then
Cells(I, J).NumberFormat = _
"_-[$$-409]* #,##0_ ;_-[$$-409]* -#,##0 ;_-[$$-409]* ""-""??_ ;_-@_ "
End If
' Suppression des parenthèses pour éviter les -
Cells(I, J) = Replace(Replace(Tableau(J - 1), "(", ""), ")", "")
' Fin des boucles et de la sub
Next J
End If
Next I
End Sub