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 :

Conditions pour rapprocher les données de deux colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2013
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 76
    Par défaut Conditions pour rapprocher les données de deux colonnes
    Bonjour,

    Je recherche une fonction pour rapprocher deux colonne automatiquement par rapport à certaines conditions;

    Dans mon fichier, il y a deux colonnes adresse (adresse et complément d'adresse), cependant dans ma colonne adresse je peux parfois rencontrer "xx rue" et retrouver la suite dans complèment d'adresse.

    Ainsi existe il une fonction pour rapprocher automatiquement les deux colonnes si dans ma colonne adresse les données se termine par "rue" "allée" "chemin" etc... ?

    (je n'arrive pas à insérer de pièce jointe pour donner un exemple plus clair...)

    merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Si j'ai bien compris, avec tes adresses en colonne A et B, résultats en colonne C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim C As Range, Rues As Variant
    Rues = Array("rue", "avenue", "clos", "mail", "chemin") 'etc
    For Each C In Range([A1], Cells(Rows.Count, 1).End(xlUp))
        If IsNumeric(Application.Match(Split(C, " ")(UBound(Split(C, " "))), Rues, 0)) Then
            C.Offset(, 2) = C.Value & " " & C.Offset(, 1).Value
        End If
    Next C
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2013
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 76
    Par défaut
    Ca fonctionne parfaitement! merci!

    Par contre j'ai du mal à tout comprendre afin de l'ajuster parfaitement.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    "Split(C, " ")" découpe la chaîne en autant de sous-chaînes séparées par des espaces; par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tablo= UBound(Split("20 rue de la Ferté Senneterre", " "))
    donne le tableau suivant :



    "UBound(Split(C, " ")" donne le numéro d'indice le plus haut de Tablo.

    "Split(C, " ")(UBound(Split(C, " "))" donne donc le dernier mot.

    "Application.Match" est l'équivalent de la fonction Excel EQUIV. On cherche donc si ce mot figure dans la liste de mots définis dans "Rues". Si l'on obtient une valeur numérique, c'est que le mot y figure, sinon on a une erreur.
    Images attachées Images attachées  

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2013
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 76
    Par défaut
    Bonjour,

    je me permet de ré-ouvrir ce sujet, car je n'arrive vraiment pas à remanier ce code pour l'ajuster à ce dont j'ai besoin;

    J'aimerais simplement que la macro considères les colonnes "E" et "F" au lieu des colonnes "A" et "B".
    Dans un désir complet, j'aimerais que les données regroupées ne soient pas copier mais coupé, ainsi couper directement les valeurs de "F" dans la colonne "E" au lieu d'ajouter l'ensemble dans une nouvelle colonne.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim C As Range, Rues As Variant
    Rues = Array("rue", "avenue", "clos", "mail", "chemin") 'etc
    For Each C In Range([E1], Cells(Rows.Count, 5).End(xlUp))
        If IsNumeric(Application.Match(Split(C, " ")(UBound(Split(C, " "))), Rues, 0)) Then
            C.Value = C.Value & " " & C.Offset(, 1).Value
            C.Offset(, 1).Value = ""
        End If
    Next C
    End Sub

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

Discussions similaires

  1. Pb de macro pour comparer les données de deux feuilles
    Par loenia dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2015, 15h32
  2. [XL-2007] utiliser un un seul textbox pour entrer les données dans differentes colonne
    Par jeph.net dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2011, 19h24
  3. recherche dans une colonne pour changer les données
    Par cimbra55 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/03/2009, 16h49
  4. Réponses: 13
    Dernier message: 20/04/2007, 17h30
  5. Réponses: 8
    Dernier message: 19/04/2007, 19h41

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