Mise en forme adresses clients

Si je met le code dans le module1 de facture-donnees-essai.xls (qui est vide) je trouve que ça fonctionne...

eric

Bonjour "eriiic" est ce le fichier excel marche chez toi .J'étais déjà confronté a un problème du genre je peux vous donner une piste. moi aussi j'ai programmé une macro, chez moi ça marche très bien mais sur le pc de mon ami il y erreur des variables non définis alors qu'ils sont tous définies. et j'ai finalement trouver la solution. si c'est le cas je peux vous dire ce que j'ai fait

eriiic a écrit :

Si je met le code dans le module1 de facture-donnees-essai.xls (qui est vide) je trouve que ça fonctionne...

eric

Eric : ... "CA MARCHE !"

Merci à toi, pour la solution et aussi pour ta patience. Je n'y connais rien en macros, vba, etc, alors je bricole un peu et dans ce cas là chacun parle sa langue ! D'où mes difficultés à te donner les bonnes infos dont tu avais besoin. Encore merci à toi.

François

@Amine : merci mais comme tu le vois, c'est réglé

Très bien

en résumé : il faut que la feuille Listes soit dans le même classeur que la macro (qu'elle puisse la trouver).

Et ça marche très bien ! Je m'en sers depuis ce matin

Dernière précision : je me suis rendu compte qu'il fallait que la colonne U soit également traitée. Quelle modif dois je apporter au code pour que la macro traite les colonnes T et U ?

Bonjour,

For Each cel In Range("T2", Cells(Rows.Count, "T").End(xlUp)).resize(,2)

eric

eriiic a écrit :

Bonjour,

For Each cel In Range("T2", Cells(Rows.Count, "T").End(xlUp)).resize(,2)

eric

Et à nouveau, ça marche Merci Eric

Question technique, dans la liste des exceptions, j'ai mis : l'

Mais la macro n'en tient pas compte, comment faire pour qu'elle en tienne compte comme un mot à part entière ? Faut t'il mettre l'expression entre deux symboles, du type crochets, parenthèses, double apostrophe ?

Bonjour,

L'adresse est découpée en mot séparés par des espaces.

"l'école" est un seul mot.

Il faudrait une 2nde boucle sur chaque mot pour splitter sur l'apostrophe ce qui ferait un peu lourd.

Je préfère traiter en dur dans le code :

Sub MefAdr()
    Dim data As Variant, adr As Variant
    Dim Dict, c As Variant, cel As Range, pl() As Variant
    Dim clé As String, i As Long, tmp As String
    ' dictionnaire des exceptions
    Set Dict = CreateObject("Scripting.Dictionary")
    With ThisWorkbook.Worksheets("Listes")
        pl = .Range("a2", .Cells(Rows.Count, "A").End(xlUp)).Value
        For Each c In pl
            Dict("µ" & LCase(c) & "µ") = c
        Next c
    End With
    '
    For Each cel In Range("T2", Cells(Rows.Count, "T").End(xlUp))
        ' nom propre
        adr = Replace(Application.Proper(cel), " L'", " l ")
        ' exceptions
        adr = Split(Trim(adr), " ")
        For i = 0 To UBound(adr)
            clé = "µ" & LCase(adr(i)) & "µ"
            If clé <> "" And Dict.exists(clé) Then adr(i) = Dict(clé)
        Next i
        'reconstitution
        tmp = ""
        For i = 0 To UBound(adr)
            tmp = tmp & " " & adr(i)
        Next i
        cel = Replace(Mid(tmp, 2), " l ", " l'")
    Next cel
End Sub

Pas besoin de mettre l dans la liste

eric

Ok, à plus tard

J'ai édité...

eriiic a écrit :

Bonjour,

L'adresse est découpée en mot séparés par des espaces.

"l'école" est un seul mot.

Il faudrait une 2nde boucle sur chaque mot pour splitter sur l'apostrophe ce qui ferait un peu lourd.

Je préfère traiter en dur dans le code :

Sub MefAdr()
    Dim data As Variant, adr As Variant
    Dim Dict, c As Variant, cel As Range, pl() As Variant
    Dim clé As String, i As Long, tmp As String
    ' dictionnaire des exceptions
    Set Dict = CreateObject("Scripting.Dictionary")
    With ThisWorkbook.Worksheets("Listes")
        pl = .Range("a2", .Cells(Rows.Count, "A").End(xlUp)).Value
        For Each c In pl
            Dict("µ" & LCase(c) & "µ") = c
        Next c
    End With
    '
    For Each cel In Range("T2", Cells(Rows.Count, "T").End(xlUp))
        ' nom propre
        adr = Replace(Application.Proper(cel), " L'", " l ")
        ' exceptions
        adr = Split(Trim(adr), " ")
        For i = 0 To UBound(adr)
            clé = "µ" & LCase(adr(i)) & "µ"
            If clé <> "" And Dict.exists(clé) Then adr(i) = Dict(clé)
        Next i
        'reconstitution
        tmp = ""
        For i = 0 To UBound(adr)
            tmp = tmp & " " & adr(i)
        Next i
        cel = Replace(Mid(tmp, 2), " l ", " l'")
    Next cel
End Sub

Pas besoin de mettre l dans la liste

eric

Impeccable, merci Eric

J'ai voulu modifier pour exclure aussi les " d' " alors j'ai customisé ces deux lignes comme ça :

adr = Replace(Application.Proper(cel), " L'", " l ", " D'", " d ")

cel = Replace(Mid(tmp, 2), " l ", " l'", " d ", " d'")

Mais ça ne marche pas (j'aurais essayé !). As tu la solution ?

Comme tu n'es pas à l'aise écrit sur 2 lignes, c'est plus simple que d'imbriquer :

adr = Replace(Application.Proper(cel), " L'", " l ")

adr = Replace(adr, " D'", " d ")

et

tmp= Replace(Mid(tmp, 2), " l ", " l'")

cel = Replace(tmp, " d ", " d'")

eric

Edit : Ca marche !

Un grand merci Eric

Rechercher des sujets similaires à "mise forme adresses clients"