VBA : supprimer les espaces et double espace

frusciantefan

XLDnaute Junior
Bonjour à tous,

J'ai fouiné un peu sur le net sans grand succes. En fait, j'ai trouvé des codes, mais je n'arrive pas a les appliquer a mon propre cas :

J'ai des données texte : nom,prenom...

Je souhaite n'avoir comme format que "NOM PRENOM" (peut importe le contenu de la cellule)

Je veux donc que ces possibilités là :

" NOM PRENOM"
"NOM PRENOM "
" NOM PRENOM "
"NOM PRENOM"
" NOM PRENOM"
"NOM PRENOM "
" NOM PRENOM "

soient automatiquement transformé en "NOM PRENOM".

J'ai déja un code pour supprimer les ponctuations/accents :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:G500")) Is Nothing Then
codeA = "ÉÈÊËÔéèêëàçùôûïî-&'_ç=+°@^\`|[{#~*-+ÏÎÄÂÜÛÖÿ"
codeB = "EEEEOeeeeacuouii C IIAAUUOy"
temp = Target
For i = 1 To Len(temp)
p = InStr(codeA, Mid(temp, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next
Application.EnableEvents = False
Target = UCase(temp)
Application.EnableEvents = True
End If
End Sub


Je voudrais pouvoir integrer le code de la suppression d'espace a ce code si dessus !


Merci pour votre aide!

FF
 

JNP

XLDnaute Barbatruc
Re : VBA : supprimer les espaces et double espace

Re :),
Je reviens à l'attaque pour vous pousser dans vos retranchements.
C'est pas vraiment la meilleure façon de présenter les choses :mad:...
Dans le cas ou une adresse mail est entrée dans une cellule (toujours la même), comment faire pour garder la forme si la macro supprime le "@"et le "." ??
Qu'entends-tu par garder la forme :confused: ???
Si c'est ne pas y toucher, il suffit de supprimer le remplacement de "/", "@" et ".", mais "M." restera "M." :p !!! Si c'est uniquement les dates et les mails que tu veux laisser intacts, il faut faire un test (avec InString par exemple) pour savoir s'il y a 2 "/" ou un "@" dans la chaîne :rolleyes:.
A toi de voir :cool:
 

frusciantefan

XLDnaute Junior
Re : VBA : supprimer les espaces et double espace

Re :),C'est pas vraiment la meilleure façon de présenter les choses :mad:...

Oups, désolé si je t'ai froissé JNP, ce n'etait vraiment pas le but. Au contraire, dans mon esprit c'etait plutot positif :) Enfin, je ferais attention a la façon dont j'ecris les choses!

J'ai pensé à cette technique, mais du coup, "M." restera "M." et je ne veux pas.
Etant donner que les formats dates et l'email se trouvent respectivement dans les Cellules D15; D20 et D30, n'ai je pas la possibilité de changer ce :

If Not Application.Intersect(Target, Range("A1:I500")) Is Nothing Then

En excluant les cellules voulues?

Encore désolé, j'arrive tout juste a adapter certains code VBA a ma situation mais je ne sais pas encore le parler!

Merci JNP pour ton aide et désolé encore pour la citation ;)

FF
 

david84

XLDnaute Barbatruc
Re : VBA : supprimer les espaces et double espace

Bonjour,
je pense que ta demande manque de précision. Une fois de plus, placer tes exemples avec le résultat attendu marqué manuellement nous permet de mieux cerner tes attentes.
Ci-joint le code proposé par Roger dans lequel j'ai inclus un test concernant les adresses mails en reprenant l'idée de JNP (à tester tout de même), mais ce code ne retouche pas la cellule à partir du moment où un "@" est détecté. Par contre, si je rentre :
da . oo @ free . fr
, il ne te le retouchera pas. Est-ce ce que tu entends par "garder la forme ?"

Private Sub Worksheet_Change(ByVal Target As Range) 'Roger2327
Dim i&, p&, codeA$, codeB$, temp$, oCel As Range, oPlg As Range
Set oPlg = Intersect(Target, Range("A1:G500"))
If Not oPlg Is Nothing Then
codeA = "ÀÄÂÇÉÈÊËÌÎÏÒÔÖÙÛÜŸ-&'_=+°@^\`|[{#~*-+.;,:!"
codeB = "AAACEEEEIIIOOOUUUY "
For Each oCel In oPlg
TestMail = InStr(oCel, "@")
If TestMail = 0 Then

temp = UCase(oCel.Value)
For i = 1 To Len(temp)
p = InStr(codeA, Mid(temp, i, 1))
If p Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next

Application.EnableEvents = False
oCel.Value = WorksheetFunction.Trim(temp)
Application.EnableEvents = True
End If
Next
End If
End Sub

Si tu veux obtenir le même résultat pour les dates, tu peux adapter le code en conséquence en adaptant l'idée.
A+
 

frusciantefan

XLDnaute Junior
Re : VBA : supprimer les espaces et double espace

Bonjour,
je pense que ta demande manque de précision. Une fois de plus, placer tes exemples avec le résultat attendu marqué manuellement nous permet de mieux cerner tes attentes.
Ci-joint le code proposé par Roger dans lequel j'ai inclus un test concernant les adresses mails en reprenant l'idée de JNP (à tester tout de même), mais ce code ne retouche pas la cellule à partir du moment où un "@" est détecté. Par contre, si je rentre :, il ne te le retouchera pas. Est-ce ce que tu entends par "garder la forme ?"



Si tu veux obtenir le même résultat pour les dates, tu peux adapter le code en conséquence en adaptant l'idée.
A+

Voici un test :

En fait, les "@","/","." doivent disparaitrent car les outils de gestion de l'entreprise sont formatés de tel sortent à ce que si un de ces caractères apparaissent, il renvoit a une erreur ==> regul a faire manuellement.
Quand on a des fichiers de 4000 lignes... dur de refaire ça a la mano, tous les mois!

Du coup comme les formats date et mail prennent en compte forcement ce type de caractères, je ne veux pas les supprimer des fichiers. Il s'agit dans l'exemples des cellules : B7 et B8.

Je voudrais donc que la macro s'aplique a tout mon classeur SAUF a ces deux cellules.
J'ai testé ton code denis ci dessus, mais il me renvoie a une erreur sur cette ligne de code : "TestMail = InStr(oCel, "@")"

Ce qui m'inquiete avec ce test mail c'est : (si je comprend bien) :

Des qu'il trouve "@" alors mail donc on ne supprime pas.

Or si quelqu'un rentre par erreur "@" dans une autre cellule, il ne sera plus corrigé?

En tant que newbie, il me parait peut etre plus simple d'exclure deux ou trois cellules d'une plage entiere plutot que de traiter 3 occurances ("@" et "." + "com" ou "fr")

Ci joint le test!

Merci, j'espere que je suis plus clair. Quand on à la tête dans le guidon, tout paraît toujours très compréhensible :)
 

Pièces jointes

  • test2.xls
    25.5 KB · Affichages: 67
  • test2.xls
    25.5 KB · Affichages: 62
  • test2.xls
    25.5 KB · Affichages: 64

david84

XLDnaute Barbatruc
Re : VBA : supprimer les espaces et double espace

Re
pas sûr d'avoir tout compris:rolleyes:. A tester :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, p&, codeA$, codeB$, temp$, oCel As Range, oPlg As Range, Zone As Range
    Set Zone = Union([A1:A500], [B1:B6], [B9:G500])
  Set oPlg = Intersect(Target, Zone)
  If Not oPlg Is Nothing Then
    codeA = "ÀÄÂÇÉÈÊËÌÎÏÒÔÖÙÛÜŸ-&'_=+°@^\/`|[{#~*-+.;,:!"
    codeB = "AAACEEEEIIIOOOUUUY                         "
    For Each oCel In oPlg
      temp = UCase(oCel.Value)
      For i = 1 To Len(temp)
        p = InStr(codeA, Mid(temp, i, 1))
        If p Then Mid(temp, i, 1) = Mid(codeB, p, 1)
      Next
      Application.EnableEvents = False
      oCel.Value = WorksheetFunction.Trim(temp)
      Application.EnableEvents = True
    Next
  End If
End Sub
A+
 
Dernière édition:

frusciantefan

XLDnaute Junior
Re : VBA : supprimer les espaces et double espace

Presque ! :)

J'ai du t'induire en erreur sur le "/", que tu as retiré du "code A".
Je veux toujours que "/" disparaissent, SAUF pour un renseignement date :

Dans mon exemple : si en cellule B6 tu tape "ST SULPICE / MARNE" le resultat attendu est "ST SULPICE MARNE"
si en cellule B7 tu tapes 07/09/1978, le resultat attendu est 07/09/1978 puisqu'il s'agit d'une date.

Pour le mail, c'est pil poil ce que je cherchais !! :)

FF
 

david84

XLDnaute Barbatruc
Re : VBA : supprimer les espaces et double espace

Re
regarde à nouveau le code de mon message précédent, j'avais ajouté le "/" qui ne faisait pas parti du code entre temps.
A+

Edit : bon et bien si tu l'as fait, tant mieux !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 820
Membres
104 676
dernier inscrit
akram1619