Changement de caractères

maval

XLDnaute Barbatruc
Bonjour,

Dans la colonne "B5" j'ai des noms de départements..... écris normalement "Puy-De-Dôme" .
Je cherche un code ou une formule pour me recopier dans la colonne "C" "puy_de_dome"

C'est à dire sans majuscule, sans accent et un tiret bas entre les mots

Je joint un fichier exemple

Je vous remercie d'avance

Max
 

Fichiers joints

chris

XLDnaute Barbatruc
Bonjour

Code:
=MINUSCULE(SUBSTITUE(B5;"-";"_"))
Edit : Bise à pierrejean plus rapide ;)
 

maval

XLDnaute Barbatruc
Bonjour PierreJean

Je vous remercie juste un petit détail il y à des noms avec des apostrophes tel que
"Bourbon-L'Archambault" pourrait-on faire en sorte que l'apostrophe se transforme en tiret bas
de cette façon "bourbon_L_archambault"
Merci et bonne journée

Max
 

chris

XLDnaute Barbatruc
Bonjour

Quand on fait du multipost, ce dont tu es coutumier Maval, il est bien de le signaler mais surtout, il est impératif d'avoir au moins la politesse de revenir clôturer ces divers posts...
 

maval

XLDnaute Barbatruc
Bonjour

Suite au code de PierreJean que je salut et remercie j'ai un petit souci lors que j'ai la colonne qui a environ 400 noms je n'est plus de tiret au nom composé

Je joint un fichier exemple

Merci d'avance
Max
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour maval, Pierre, chris,
Code:
Sub Epurer()
Dim x$, y$, i%
x = " -'ABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåòóôõöøèéêëìíîïùúûüÿñç"
y = "___abcdefghijklmnopqrstuvwxyzaaaaaaooooooeeeeiiiiuuuuync"
Application.ScreenUpdating = False
[D3].CurrentRegion.ClearContents 'RAZ
[B3].CurrentRegion.Copy [D3]
With [D3].CurrentRegion
    .Replace """*", """", xlPart 'si l'on veut conserver le guillemet final
    '.Replace """*", "", xlPart 'si l'on veut retirer le guillemet final
    For i = 1 To Len(x)
        .Replace Mid(x, i, 1), Mid(y, i, 1)
    Next
    .Cells(1) = "Arrivé"
End With
End Sub
On peut choisir de conserver le guillemet final (qui est suivi d'espaces) ou de le supprimer.

A+
 

job75

XLDnaute Barbatruc
Bonsoir maval,

Visiblement vous n'avez pas cherché à comprendre ce que j'ai dit au post #9 sur les guillemets.

Avec la solution de pierrejean si vous ne voulez pas de tirets après les guillemets :

=> sélectionnez la colonne B => touches Ctrl+H => Rechercher : "* Remplacer par : "

A+
 

maval

XLDnaute Barbatruc
Bonjour PierreJean

Oui cela vas beaucoup mieux.
J'ai essayé de modifier pour enlever les guillemets qui se trouve en fin de mots en faisant comme ceci
Code:
Function minus(cellule)
x = Split(cellule, "-")
For n = LBound(x) To UBound(x)
  x(n) = LCase(x(n))
  x(n) = SansAccent(x(n))
  x(n) = Replace(x(n), "'", "_")
  x(n) = Replace(x(n), """, " ")
Next
minus = Trim(Join(x))
minus = Replace(minus, " ", "_")
minus = Replace(minus, """, " ")
End Function
Function SansAccent(chaine)
codeA = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
codeB = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
temp = chaine
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
SansAccent = temp
End Function
on dirai que sa ne fonctionne ?

Merci .
Max
 
Dernière édition:

maval

XLDnaute Barbatruc
Bonjour,

Suite au code qui à était fais par PierreJean que je salut et remercie j'essaye de modifier sans succès. Je m'explique dans ma colonne je me retrouve par moment avec des noms composé et au lieu d'avoir des apostrophes comme Couat d'Aude j'ai Couat d_x27_Aude et j'aimerai remplacé le "_x27_" par une apostrophe normale, donc j'ai rajouter au code ceci:
Code (Text):
Function minus(cellule)
x = Split(cellule, "-")

For n = LBound(x) To UBound(x)
x(n) = LCase(x(n))
x(n) = SansAccent(x(n))
x(n) = Replace(x(n), "'", "_")
x(n) = Replace(x(n), """", " ")
x(n) = Replace(x(n), "_x27_", "'")
Next
minus = Trim(Join(x))
minus = Replace(minus, " ", "_")
minus = Replace(minus, """", " ")
minus = Replace(minus, "_x27_", "'")
End Function
Function SansAccent(chaine)
codeA = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
codeB = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
temp = chaine
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
SansAccent = temp
End Function

Mais sa ne fonctionne pas?

Je vous remercie d'avance

max
 

job75

XLDnaute Barbatruc
Bonjour maval, le forum,

Je ne comprends pas que pierrejean utilise la fonction Split, elle ne sert à rien ici :
Code:
Function minus(cellule) As String
minus = LCase(cellule)
minus = Trim(Replace(minus, """", ""))
minus = Replace(minus, "'", "_")
minus = Replace(minus, "_x27_", "'")
minus = Replace(minus, " ", "_")
minus = SansAccent(minus)
End Function

Function SansAccent(chaine As String)
Dim codeA$, codeB$, i%, p%
codeA = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
codeB = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
For i = 1 To Len(chaine)
    p = InStr(codeA, Mid(chaine, i, 1))
    If p Then Mid(chaine, i, 1) = Mid(codeB, p, 1)
Next
SansAccent = chaine
End Function
A+
 

Discussions similaires


Haut Bas