Mise en forme adresses clients

Bonjour,

Je voudrais créer une macro qui execute la fonction suivante :

Dans la colonne T de ma feuille excel, chaque cellule contient l'adresse d'un client. C'est le bordel au niveau de la mise en forme car chaque client le fait à sa façon, notamment au niveau des majuscules/minuscules. J'aimerai que la macro mette en forme chaque cellule sous la forme suivante (exemple) :

31 rue du Général de Gaulle

En d'autre mots :

Que l'adresse soit en minuscules (donc si le client l'a écrit en majuscules, que ce soit transformé en minuscules)

Que chaque mot ait sa première lettre en majuscule (sauf les mots suivants : de, des, du, le, les, la, avenue, rue, boulevard, chemin, bld,av,)

Quelqu'un a t'il une solution ?

Merci beaucoup.

François

P'tit up !

Bonjour frisco75,

Peux-tu joindre un fichier avec quelques exemples d'adresses mal écrites ?

vba-new a écrit :

Bonjour frisco75,

Peux-tu joindre un fichier avec quelques exemples d'adresses mal écrites ?

Oui, par exemple :

31 rue du général de gaulle

31 rue du général de GAULLE

31 rue du GENERAL DE GAULLE

Alors que je voudrais que l'adresse soit en minuscules (donc si le client l'a écrit en majuscules, que ce soit transformé en minuscules) et que chaque mot ait sa première lettre en majuscule (sauf les mots suivants : de, du, le, la, avenue, rue, boulevard, chemin, bld,av,chemin, place, pl) donc : 31 rue du Général de Gaulle

Bonsoir à tous,

en attendant la proposition de vba-new en voici déjà une.

Sélectionner la plage et lancer la macro MefAdr()

Il faut compléter la feuille Listes.

Je découpe l'adresse sur les espaces, donc Général-De-Gaulle ne sera pas modifié.

Pour les tests je met le résultat dans la colonne de droite.

Une fois ok remplacer :

c.Offset(, 1) = Mid(tmp, 2)

par :

c = Mid(tmp, 2)

eric

22classeur1.zip (9.67 Ko)

Merci Eric mais ça ne marche pas, quand j'exécute la macro, j'ai le msg suivant : "Erreur de compilation, variable non définie"

Bonjour,

Très étrange vu qu'elle sont toutes définies.

Si tu pouvais préciser quelle variable ?

Sur le fichier que j'ai déposé et tu sélectionnes bien ta plage à traiter (A2:A4) avant ?

Sinon dépose un extrait du fichier où ça se produit en modifiant les noms et un peu les adresses (les n°) par exemple.

eric

eriiic a écrit :

Bonjour,

Très étrange vu qu'elle sont toutes définies.

Si tu pouvais préciser quelle variable ?

Sur le fichier que j'ai déposé et tu sélectionnes bien ta plage à traiter (A2:A4) avant ?

Sinon dépose un extrait du fichier où ça se produit en modifiant les noms et un peu les adresses (les n°) par exemple.

eric

Oui je selectionne bien la plage pourtant.

J'ai mis un pj un fichier exemple d'adresses.

Effectivement ilm y en avait bien une de non déclarée. Bizarre avec Option Explicit.

Et il manquait aussi un petit truc si tu lançais sur un autre classeur.

Version corrigée :

Sub MefAdr()
    Dim data As Variant, adr As Variant
    Dim Dict, c As Variant, pl() As Variant
    Dim clé As String, i As Long, tmp As String
    data = Selection
    ' 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 c In Selection
        ' nom propre
        adr = Application.Proper(c)
        ' 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
        c.Offset(, 1) = Mid(tmp, 2)
    Next c
End Sub

J'ai corrigé le classeur du post concerné.

eric

edit: nouvelle version. Dans la liste tu écris les mots dans la casse où tu veux qu'ils apparaissent.

Si tu y met "BP" tu l'auras en majuscule dans l'adresse.

Ca ne marche tjs pas ! Maintenant cela indique Erreur d'execution 9 - L'indice n'appartient pas à la selection

Ca ne marche pas ne veut rien dire.

Préciser l'erreur, la ligne en cause et fournir un fichier où se produit l'erreur.

Sur celui que tu as fourni pas d'erreur chez moi.

eric

eriiic a écrit :

Ca ne marche pas ne veut rien dire.

Préciser l'erreur, la ligne en cause et fournir un fichier où se produit l'erreur.

Sur celui que tu as fourni pas d'erreur chez moi.

eric

??? Je l'ai indiqué le message d'erreur dans mon post précedent, cela indique : "Erreur d'execution 9 - L'indice n'appartient pas à la selection"

Quand j'exécute ta macro il ne se passe rien et ce message s'affiche. Je voudrais bien te donner plus d'infos mais c'est tout ce qui s'affiche.

Préciser l'erreur, la ligne en cause et fournir un fichier où se produit l'erreur.

eric

eriiic a écrit :

Préciser l'erreur, la ligne en cause et fournir un fichier où se produit l'erreur.

eric

Il n'y a pas de ligne en cause, l'erreur se produit dès l'exécution de la macro et le seul msg d'erreur est celui indiqué. J'ai exécuté la macro sur le fichier que je t'ai fourni en pj précedemment : exemple-adresses.xls

Il faut que tu restes sur le 1er classeur que je t'avais fourni où il y a la feuille 'Listes'.

Ou bien en créer une sur ton classeur.

Sans cette feuille et ses données la macro ne peut pas fonctionner.

eric

eriiic a écrit :

Il faut que tu restes sur le 1er classeur que je t'avais fourni où il y a la feuille 'Listes'.

Ou bien en créer une sur ton classeur.

Sans cette feuille et ses données la macro ne peut pas fonctionner.

eric

Effectivement, ça marcheparfaitement quand je reste sur le 1er classeur ! Merci Eric.

Mais comment faire pour que la macro s'éxecute sur ma feuille excel de facturation et directement dans la colonne concernée, sans que les résultats soient copiés dans la colonne d'à coté ? Ce que je veux dire c'est que la colonne concernée par l'action de la macro est la colonne T. Je voudrais juste que quand j''exécute la macro elle fasse les modifs directement dans la colonne T.

Bonjour,

Ouffff

Je voudrais juste que quand j''exécute la macro elle fasse les modifs directement dans la colonne T

Voir post du 28 Mai 2013, 22:28

eric

eriiic a écrit :

Bonjour,

Ouffff

Je voudrais juste que quand j''exécute la macro elle fasse les modifs directement dans la colonne T

Voir post du 28 Mai 2013, 22:28

eric

Tu veux dire cette modif ? :

Remplacer

Offset(, 1) = Mid(tmp, 2)

par :

c = Mid(tmp, 2)

Mais c'est cela que je ne comprends pas, où est t'il indiqué que les chngts doivent se faire dans la colonne T ?

Il te suffisait de sélectionner la plage à traiter...

Te traite la colonne T de la feuille active à partir de T2 :

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 = Application.Proper(cel)
        ' 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 = Mid(tmp, 2)
    Next cel
End Sub

eriic

J'ai donc crée une macro reprenant ce code, j'ai aussi crée une feuille "Liste" sur le fichier excel à traiter et quand j'exécute la macro ça affiche juste "Erreur d'exécution 9 : l'indice n’appartient pas à la sélection".

Donc ça "ne marche pas" !

J'ai bien retenu la leçon et j'ai mis en pièce jointe le fichier excel contenant les macros (personal.xlsb) ainsi que le fichier de travail (factures-données-essai.xls). C'est grave docteur ?

P.S : dans mon fichier la macro a été renommée Miseenformetexte

13fichierseriiic.zip (117.19 Ko)
Rechercher des sujets similaires à "mise forme adresses clients"