[Resolu] Supprimer caracteres speciaux

arthur203

XLDnaute Junior
Hello Forum,

J'aimerai supprimer via VBA tous les caracteres speciaux contenus dans une feuille excel et les remplacer par un espace (e.g. [***urgent !*** A envoyer] @ PAR urgent a envoyer). Apres moulte recherche, je n'ai pas trouve une macro qui fonctionne ...

Merci poru votre aide
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Supprimer caracteres speciaux

Bonjour arthur203,

Commencez d'abord par nous faire une liste des "caractères spéciaux" qui peuvent exister dans vos textes.

Ensuite c'est simple : une boucle sur les caractères de cette liste qui supprime chaque caractère des textes à traiter.

A+
 

Temjeh

XLDnaute Accro
Supporter XLD
Re : Supprimer caracteres speciaux

Bonjour
En attendant, j'avais ceci (caractère spéciaux en colonne B et enlève en colonne A
Code:
For i = 1 To Range("A65536").End(xlUp).Row
  For Z = 1 To Range("B65536").End(xlUp).Row
    Range("A" & i) = Replace(Range("A" & i), Range("B" & Z), "")
  Next Z
Next i

Temjeh
 

Modeste geedee

XLDnaute Barbatruc
Re : Supprimer caracteres speciaux

Bonsour®
Hello Forum,

J'aimerai supprimer via VBA tous les caracteres speciaux contenus dans une feuille excel et les remplacer par un espace (e.g. [***urgent !*** A envoyer] @ PAR urgent a envoyer). Apres moulte recherche, je n'ai pas trouve une macro qui fonctionne ...

Merci poru votre aide
que fait-on des chiffres ?

VB:
Function AlphaPur(target As String) As String
Dim x As String, z As String, i As Integer
z = ""
For i = 1 To Len(target)
x = Mid(target, i, 1)
If x < "A" Or x > "z" Or (x > "Z" And x < "a") Then
z = z & " "
Else
z = z & x
End If
Next
AlphaPur = Application.Trim(z)
End Function
 

Temjeh

XLDnaute Accro
Supporter XLD
Re : Supprimer caracteres speciaux

?

Même chose, non?
On met aussi lettre, chiffre, espace dans ma col B est c'est OK

Pour remplacer par espace
Code:
For i = 1 To Range("A65536").End(xlUp).Row
  For Z = 1 To Range("B65536").End(xlUp).Row
    Range("A" & i) = Replace(Range("A" & i), Range("B" & Z), " ")
  Next Z
Next i

Temjeh
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Supprimer caracteres speciaux

Bonjour à tous,

Avec des tableaux VBA c'est plus rapide sur de grands tableaux.

Et utiliser Application.Trim (SUPPRESPACE) pour supprimer tous les espaces inutiles :

Code:
Sub Epure()
Dim tablo, E, t, i&
tablo = [Liste] 'caractères spéciaux
E = Range("A1:A2", Range("A" & Rows.Count).End(xlUp))
For Each t In tablo
  For i = 1 To UBound(E)
    E(i, 1) = Application.Trim(Replace(E(i, 1), t, " "))
  Next
Next
E(1, 1) = "Epuré" 'si ligne de titres
[B1].Resize(UBound(E)) = E
End Sub
Bien entendu on peut aussi utiliser une fonction VBA.

Fichiers joints.

A+
 

Pièces jointes

  • Epure Sub(1).xls
    42.5 KB · Affichages: 77
  • Epure Function(1).xls
    38 KB · Affichages: 67

fil28

XLDnaute Nouveau
Bonjour tout le monde,

Je reprends le fil de cette discussion.
La fonction dans le fichier "Epure Function" marche très bien mais au lieu de :
txt = Application.Trim(Replace(txt, t, t.Offset(, " ")) j'ai mis :
txt = Application.Trim(Replace(txt, t, t.Offset(, 1))) pour obtenir la valeur à droite de t ce qui donne :

Mais ca ne fonctionne pas.
Quelqu'un sait pourquoi?


Option Explicit

Function EPURE$(txt$)
Dim tablo, t
tablo = [Liste] 'caractères spéciaux
For Each t In tablo
txt = Application.Trim(Replace(txt, t, t.Offset(, 1)))
Next
EPURE = txt
End Function




Merci
Philippe
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @fil28 :), @job75 ;) ,

Vous appelez La fonction de feuille calcul Excel TRIM() autant de fois qu'il y a deux caractères spéciaux. Il vaut mieux n'appeler qu'une seule fois cette fonction à la sortie de la boucle.

Quitte à faire une fonction personnalisée, autant mettre la liste en paramètre.
VB:
Function EPURE$(ByVal txt$, Csp As Range)
Dim t
   For Each t In Csp: txt = Replace(txt, t, " "): Next
   EPURE = Application.Trim(txt)
End Function

Si vous désirez passer par un tableau des caractères spéciaux et s'il ne peut y avoir qu'un seul caractère spécial, alors il faut traiter ce cas (car tablo ne sera pas un tableau).
VB:
Function EPURE$(ByVal txt$, Csp As Range)
Dim tablo, t
   tablo = Csp.Value
   If Not IsArray(tablo) Then ReDim tablo(1): tablo(1) = Csp.Value
   For Each t In tablo: txt = Replace(txt, t, " "): Next
   EPURE = Application.Trim(txt)
End Function
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour à tous
VB:
Option Explicit
Sub test()
    Dim chain As String

    chain = "blablabla@_toto_')titi4586_=#@ hfdh...cbzjdcn:fer;fgt'g/fefefe"

    MsgBox ReplaceSpecChar(chain) 'replace tout les caractères speciaux

    MsgBox ReplaceSpecChar(chain, RegularSpace:=True) 'replace tout les caractères speciaux et régule les espaces consécutifs

    MsgBox ReplaceSpecChar(chain, "_") 'replace tout les caractères speciaux par un caractère

    MsgBox ReplaceSpecChar(chain, ExceptedChar:=".@_") 'replace tout les caractères speciaux en  exeptant certains

End Sub
Function ReplaceSpecChar(chain As String, _
                         Optional CharReplace As String = " ", _
                         Optional ExceptedChar As String = "", _
                         Optional RegularSpace As Boolean = False)
    Dim T As String, I&
    For I = 1 To Len(chain)
        Select Case Asc(Mid(chain, I, 1))
        Case 48 To 57, 65 To 90, 97 To 122, Asc(Chr(160))
            T = T & Mid(chain, I, 1)
        Case Else
            If ExceptedChar Like "*" & Mid(chain, I, 1) & "*" Then
                T = T & Mid(chain, I, 1)
            Else
                T = T & CharReplace
            End If
        End Select
    Next
    If RegularSpace Then T = Application.Trim(T)
    ReplaceSpecChar = T
End Function
 

fil28

XLDnaute Nouveau
Bonjour Job75


Autant pour moi il y avait
txt = Application.Trim(Replace(txt, t, " ")) j'ai mis :
txt = Application.Trim(Replace(txt, t, t.Offset(, 1)))
Car je souhaite obtenir la valeur à droite de t (caractère spécial) qui est pour le moment vide


Dis autrement je voudrais que à chaque fois qu'il trouve un caractère spécial la fonction ne remplace pas par vide comme c'était le cas mais par la valeur que j'aurais mise à droite du caractère spécial.

Je ne suis pas sûr d'être clair auquel cas je peux faire un exemple :)
Merci encore
 

fil28

XLDnaute Nouveau
re tout le monde

Je pense effectivement qu'il s'agit d'un tableau à 2 dimensions.
J'ai modifié via le gestionnaire de nom la plage
J'ai essayé de triturer le code mais sans grand succès.

Dans l'exemple de Job 75
ex: A chaque fois qu'il trouve un caractère présent dans la liste il ramenait vide
J'aimerais bien que à chaque fois qu'il trouve un caractère présent dans la liste il ramène la 2ème colonne du tableau

Philippe
 

Pièces jointes

  • Epure Function 2 dim Test.xls
    32 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86