Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

uniformisation des caracteres (optimisation)

4 réponses
Avatar
tinou
20/4/6
Bonjour vous...

J'ai une macro qui fonctionne correctement... mais peut etre pourrait-elle
aller plus vite ???
Elle me sert a mettre tous les caracteres en majuscule, effacer certain
caracteres ou remplacer par d'autres...
pour tout mettre en majuscule y avai l'idee du UCase... mais je veux qu'un
"é" devienne un "E" sans accent...,
qu'un "ç" devienne un "C"... etc
Il y a donc les caracteres a effacer comme "°". Mais si dans une cellule
c'est ecrit : n°5
il faudrait que ca se transforme en : N 5 (donc le "°" est a remplacer par
un espace)
Il y a aussi les saut de ligne Chr(10), les tabs (9), ...(13)...
qu'il faudrait remplacer par un espace. car si dans ma cellule il y a :
"toto
tutu"
faudrait : "toto tutu"
J'aimerai aussi supprimer les espaces avant et apres... (Trim / supprespace)
ainsi que les double espace ou triple... "lala lulu" (3 espaces) devient
"lala lulu"
Les "-" ou "." qui sont TOUT SEUL dans une cellule sont a supprimer...

...
Bref y a t-il une meilleure facon que ma macro?? (j'en suis presque sure)

Voir extrait ci dessous... :

Cells.Replace What:="monsieur", Replacement:="M.", LookAt:=xlPart,
SearchOrder :=xlByColumns, MatchCase:=False
Cells.Replace What:="a", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="à", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="À", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="°", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="~?", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:="", LookAt:=xlWhole, SearchOrder
:=xlByColumns, MatchCase:=True

Merci infiniment par avance.

Tinou

4 réponses

Avatar
Philippe
Bonjour Tinou,

Je te donne direct le code utilisé pour un besoin similaire. Tu peux
associer cette fonction à Ucase :

Public Function Simplemot(strMot As String) As String

strMot = Replace(strMot, "é", "e")
strMot = Replace(strMot, "è", "e")
strMot = Replace(strMot, "ê", "e")
strMot = Replace(strMot, "à", "a")
strMot = Replace(strMot, "â", "a")
strMot = Replace(strMot, "ù", "u")
strMot = Replace(strMot, "ç", "c")
strMot = Replace(strMot, "ô", "o")
strMot = Replace(strMot, "î", "i")
strMot = Replace(strMot, "ï", "i")
strMot = Replace(strMot, "É", "E")
strMot = Replace(strMot, "È", "E")
strMot = Replace(strMot, "Ê", "E")
strMot = Replace(strMot, "Ë", "E")
strMot = Replace(strMot, "Î", "I")
strMot = Replace(strMot, "Ï", "I")
strMot = Replace(strMot, "À", "A")
strMot = Replace(strMot, "Â", "A")
strMot = Replace(strMot, "Ô", "O")
strMot = Replace(strMot, "Ö", "O")
Simplemot = strMot
End Function

Bon courage.

Philippe


20/4/6
Bonjour vous...

J'ai une macro qui fonctionne correctement... mais peut etre pourrait-elle
aller plus vite ???
Elle me sert a mettre tous les caracteres en majuscule, effacer certain
caracteres ou remplacer par d'autres...
pour tout mettre en majuscule y avai l'idee du UCase... mais je veux qu'un
"é" devienne un "E" sans accent...,
qu'un "ç" devienne un "C"... etc
Il y a donc les caracteres a effacer comme "°". Mais si dans une cellule
c'est ecrit : n°5
il faudrait que ca se transforme en : N 5 (donc le "°" est a remplacer par
un espace)
Il y a aussi les saut de ligne Chr(10), les tabs (9), ...(13)...
qu'il faudrait remplacer par un espace. car si dans ma cellule il y a :
"toto
tutu"
faudrait : "toto tutu"
J'aimerai aussi supprimer les espaces avant et apres... (Trim / supprespace)
ainsi que les double espace ou triple... "lala lulu" (3 espaces) devient
"lala lulu"
Les "-" ou "." qui sont TOUT SEUL dans une cellule sont a supprimer...

...
Bref y a t-il une meilleure facon que ma macro?? (j'en suis presque sure)

Voir extrait ci dessous... :

Cells.Replace What:="monsieur", Replacement:="M.", LookAt:=xlPart,
SearchOrder :=xlByColumns, MatchCase:úlse
Cells.Replace What:="a", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="à", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="À", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="°", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="~?", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:="", LookAt:=xlWhole, SearchOrder
:=xlByColumns, MatchCase:=True

Merci infiniment par avance.

Tinou


Avatar
tinou
euh merci...mais j'dois le coller ou ? comment ?

merci encore

thierry


Bonjour Tinou,

Je te donne direct le code utilisé pour un besoin similaire. Tu peux
associer cette fonction à Ucase :

Public Function Simplemot(strMot As String) As String

strMot = Replace(strMot, "é", "e")
strMot = Replace(strMot, "è", "e")
strMot = Replace(strMot, "ê", "e")
strMot = Replace(strMot, "à", "a")
strMot = Replace(strMot, "â", "a")
strMot = Replace(strMot, "ù", "u")
strMot = Replace(strMot, "ç", "c")
strMot = Replace(strMot, "ô", "o")
strMot = Replace(strMot, "î", "i")
strMot = Replace(strMot, "ï", "i")
strMot = Replace(strMot, "É", "E")
strMot = Replace(strMot, "È", "E")
strMot = Replace(strMot, "Ê", "E")
strMot = Replace(strMot, "Ë", "E")
strMot = Replace(strMot, "Î", "I")
strMot = Replace(strMot, "Ï", "I")
strMot = Replace(strMot, "À", "A")
strMot = Replace(strMot, "Â", "A")
strMot = Replace(strMot, "Ô", "O")
strMot = Replace(strMot, "Ö", "O")
Simplemot = strMot
End Function

Bon courage.

Philippe


20/4/6
Bonjour vous...

J'ai une macro qui fonctionne correctement... mais peut etre pourrait-elle
aller plus vite ???
Elle me sert a mettre tous les caracteres en majuscule, effacer certain
caracteres ou remplacer par d'autres...
pour tout mettre en majuscule y avai l'idee du UCase... mais je veux qu'un
"é" devienne un "E" sans accent...,
qu'un "ç" devienne un "C"... etc
Il y a donc les caracteres a effacer comme "°". Mais si dans une cellule
c'est ecrit : n°5
il faudrait que ca se transforme en : N 5 (donc le "°" est a remplacer par
un espace)
Il y a aussi les saut de ligne Chr(10), les tabs (9), ...(13)...
qu'il faudrait remplacer par un espace. car si dans ma cellule il y a :
"toto
tutu"
faudrait : "toto tutu"
J'aimerai aussi supprimer les espaces avant et apres... (Trim / supprespace)
ainsi que les double espace ou triple... "lala lulu" (3 espaces) devient
"lala lulu"
Les "-" ou "." qui sont TOUT SEUL dans une cellule sont a supprimer...

...
Bref y a t-il une meilleure facon que ma macro?? (j'en suis presque sure)

Voir extrait ci dessous... :

Cells.Replace What:="monsieur", Replacement:="M.", LookAt:=xlPart,
SearchOrder :=xlByColumns, MatchCase:úlse
Cells.Replace What:="a", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="à", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="À", Replacement:="A", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="°", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:="~?", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, SearchOrder
:=xlByColumns, MatchCase:=True
Cells.Replace What:=" ", Replacement:="", LookAt:=xlWhole, SearchOrder
:=xlByColumns, MatchCase:=True

Merci infiniment par avance.

Tinou




Avatar
tinou
ok ! donc il y a que la fonction Replace...

j'vais garder ma macro d'avant alors...
par contre comment je peux integrer le Trim / supprespace
a mon code d'origine pour toute la feuille ??

il n'existe pas une fonction qui supprime les doubles espaces ??
car si on fait un remplacement de " " 2 espaces par un espace,
et qu'il y a ecrit "aaa zzz" (4 espaces), je lance la macro qui va
remplacer les 2 premiers espaces par 1, puis les 2 derniers par 1 autre.
donc il m'en reste encore 2, il faut donc que je relance la macro...

a moins qu'il y est un systeme de bouclage ???!!
la macro boucle tant qu'il y a des caractere a remplacer...

Merci pour votre aide !

Tinou
Avatar
Philippe
Ben justement avec la fonction Replace

Soit tu pars en vb, soit tu pars en automation d'excel (edition remplacer
automatique)

Faut voir apres, niveau rapidite, si le fait de tout faire en vb est rapide.

En gros, l'algo est le suivant :

Pour chaque cellule cible :
Intégrer la value de la cellule à une variable (variant)
traiter la variable (replace, trim , fonction personnalisée,....)
réintégrer la valeur de la variable dans la cellule

Philippe












ok ! donc il y a que la fonction Replace...

j'vais garder ma macro d'avant alors...
par contre comment je peux integrer le Trim / supprespace
a mon code d'origine pour toute la feuille ??

il n'existe pas une fonction qui supprime les doubles espaces ??
car si on fait un remplacement de " " 2 espaces par un espace,
et qu'il y a ecrit "aaa zzz" (4 espaces), je lance la macro qui va
remplacer les 2 premiers espaces par 1, puis les 2 derniers par 1 autre.
donc il m'en reste encore 2, il faut donc que je relance la macro...

a moins qu'il y est un systeme de bouclage ???!!
la macro boucle tant qu'il y a des caractere a remplacer...

Merci pour votre aide !

Tinou