Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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® 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

Réponses
2
Affichages
117
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…