IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Extraction d'une partie d'une adresse postale [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Extraction d'une partie d'une adresse postale
    Bonjour à tous,

    J'ai une colonne dans un fichier remplie d'adresses postales, par exemple :

    02 CHEMIN LALANNE
    1 A ALLEE DE VERNEILH
    1 TER RUE DE SEGUES
    1008BIS CHEMIN MATACHOT
    18A ALLEE SOPHIA

    Je souhaite ne récupérer que l'adresse, sans le numéro, dans une nouvelle colonne :

    CHEMIN LALANNE
    ALLEE DE VERNEILH
    RUE DE SEGUES
    CHEMIN MATACHOT
    ALLEE SOPHIA

    J'ai écrit cette formule (je suis nul en formule excel et en vb) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNUM(CNUM(GAUCHE(G12;(CHERCHE(" ";G12)-1))));DROITE(G12;(CHERCHE(" ";G12)+1));G12)
    Mais ça ne fonctionne pas, ça ne récupère qu'un bout de la fin de l'adresse.

    Quelqu'un peut-il m'aider svp ?
    Merci par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible avec ce fichier à adapter. Celui-ci, contient une feuille paramètres où se trouvent les occurrences des voies. Le code ci-dessous cherche l'occurrence dans l'adresse brute, le cas échéant l'adresse tronquée est copiée dans la colonne suivant celle de l'adresse. Les minuscules, majuscules ne sont pas à distinguer, les caractères accentués doivent l'être.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit
     
    Sub TransformerLesAdressesBrutes()
     
    Dim TypesDeVoies As Range
    Dim CelluleVoies As Range
     
    Dim ListeAdressesBrutes As Range
    Dim CelluleAdresses As Range
     
    Dim DerniereLigneParametres As Long
    Dim DerniereLigneAdresses As Long
    Dim I As Long
     
        ' Chargement des types de voies
        With Sheets("Paramètres")
            DerniereLigneParametres = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set TypesDeVoies = .Range(.Cells(11, 1), .Cells(DerniereLigneParametres, 1))
        End With
     
        ' Définition de l'aire des adresses à traiter
        With Sheets("Adresses")
            DerniereLigneAdresses = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set ListeAdressesBrutes = .Range(.Cells(2, 1), .Cells(DerniereLigneAdresses, 1))
        End With
     
        For Each CelluleAdresses In ListeAdressesBrutes
            For Each CelluleVoies In TypesDeVoies
                If Len(CelluleAdresses) > Len(CelluleVoies) Then
                    For I = 1 To Len(CelluleAdresses)
                        Select Case LCase(Mid(CelluleAdresses, I, Len(CelluleVoies)))
                            Case LCase(CelluleVoies)
                                CelluleAdresses.Offset(0, 1) = Mid(CelluleAdresses, I)
                                Exit For
                        End Select
                    Next I
                End If
            Next CelluleVoies
        Next CelluleAdresses
     
       Set ListeAdressesBrutes = Nothing
       Set TypesDeVoies = Nothing
     
    End Sub
    Cordialement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Je viens de tester.
    J'ai copié votre macro dans mon fichier excel, nommé les feuilles et colonnes de la même manière mais cela ne fonctionne pas.
    J'ai donc fait l'inverse et copié mes colonnes dans votre fichier excel et là, à quelques exceptions près, cela fonctionne.
    Auriez-vous une idée du problème par rapport à mon fichier ? Je souhaiterai à terme pouvoir utiliser la macro dans d'autres fichiers.
    Merci de votre réponse.
    Cordialement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par alain.terieur12 Voir le message
    Auriez-vous une idée du problème par rapport à mon fichier ? Je souhaiterai à terme pouvoir utiliser la macro dans d'autres fichiers.
    Si le nom des feuilles est identique (majuscules, minuscules respectées), il ne peut s'agir que de la ligne de démarrage sur la feuille "Paramètres". J'ai pour habitude de mettre mes titres en ligne 10, la liste des types de voie ne commence donc qu'à la ligne 11. Pour la feuille Adresses, j'ai supposé que votre tableau démarrait en toute logique à la ligne 1, la liste des adresses ne commence donc qu'en ligne 2. Dans les deux feuilles, les colonnes de référence sont les colonnes A.

    Sinon, vos fichiers sont-ils bien avec une extension .xls ou .xlsm ?

    Cordialement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos précisions.
    Cela fonctionne effectivement en faisant démarrer à la ligne 11 les types de voies.
    Merci de votre aide.
    Cordialement,

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Je reviens vers vous pour une précision.
    Quand j'ai une adresse comme : 50 CHEMIN ST JOSEPH je récupère seulement ST JOSEPH
    Par contre avec 50 RUE ST PIERRE je récupère bien RUE ST PIERRE
    J'ai constaté, en général, que lorsque l'adresse contient un ST, la chaine n'est récupérée qu'à partir de ce ST.
    Mes connaissances en vb et macro étant plus que limitées, pourriez vous me dire ce qu'il faut modifier (si toutefois cela se limite à un paramètre de la fonction actuelle) ?
    Merci.

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
                Dim SP$()
                    SP = Split("50 CHEMIN ST JOSEPH")
             If Val(SP(0)) Then SP(0) = ""
        MsgBox Join(SP)
    End Sub
    _________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci mais...puis-je intégrer cela dans la fonction de M. Kergresse et où ? Ou faut-il traiter ces cas à part ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les voies du Seigneur seraient donc toujours impénétrables....

    Je ne peux pas deviner sans bout de fichier avec les adresses qui vous posent problème, les types de voie que vous avez définis et le code que vous avez transposé.

    Vérifiez a minima que les voies ne contiennent pas de caractères blancs avant (et / ou après) dans votre table des voies ; j'ai eu une fois une surprise avec le code ASCII du caractère blanc sur des données issues d'internet.

    Si vous mettez en ligne un fichier avec votre code, je regarderai.

    Cordialement.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Citation Envoyé par alain.terieur12 Voir le message
    Ou faut-il traiter ces cas à part ?
    Il ne peut y avoir de cas à part s'il n'y a pas d'espace entre le n° et BIS ou TER par exemple …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Effectivement, il y avait un espace devant St dans ma liste.
    Merci de vos aides.
    Cordialement.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par alain.terieur12 Voir le message
    Effectivement, il y avait un espace devant St dans ma liste.
    Je n'ai pas pigé.

    Cela veut-il dire que votre liste de voies contient ST ?

    Cordialement.

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Une p'tite démonstration avec les données telles quelles du post initial (en laissant l'espace par exemple entre le n° & TER)
    à partir du classeur joint par Eric :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Demo()
        Dim R&, SP$(), VA
     
        With Feuil1.Cells(1).CurrentRegion
            If .Rows.Count = 1 Then Exit Sub
            VA = .Cells(2, 1).Resize(.Rows.Count - 1).Value
     
            For R = 1 To .Rows.Count - 1
                SP = Split(VA(R, 1))
                If Val(SP(0)) Then SP(0) = ""
                If UBound(SP) > 0 Then If Len(SP(1)) < 4 And UCase(SP(1)) <> "RUE" Then SP(1) = ""
                VA(R, 1) = Trim(Join(SP))
            Next
     
            .Cells(2, 2).Resize(.Rows.Count - 1).Value = VA
        End With
    End Sub
    _______________ _____________________________________ _____________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oui double erreur de ma part, c'est STR et non ST qui aurait du être dans ma liste.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par alain.terieur12 Voir le message
    Oui double erreur de ma part, c'est STR et non ST qui aurait du être dans ma liste.
    Ouf ! ça me rassure....

    Cordialement.

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Pour tenir compte des remarques du post #9 d'Eric, modifier la ligne n°9 du code du post #13 ainsi :

    SP = Split(Application.Trim(Replace(VA(R, 1), Chr(160), " ")))

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marc-L Voir le message


    Pour tenir compte des remarques du post #10 d'Eric, modifier la ligne n°9 du code du post #14 ainsi :

    SP = Split(Application.Trim(Replace(VA(R, 1), Chr(160), " ")))

    Bonjour Marc,

    Tu as raison, les codes ASCII en question sont bien effectivement 32 : celui qu'on utilise habituellement, et 160 : celui qui m'avait posé problème.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 17h02
  2. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo