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 :

VBA récupérer des chaînes à partir d'un mot [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Responsable financier
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable financier
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut VBA récupérer des chaînes à partir d'un mot
    Bonsoir,

    Je cherche à découper une adresse en isolant
    dans une 1ère colonne le numéro
    dans une 2ème colonne le type de voie (rue, avenue, etc)
    et dans une 3ème colonne le nom de la voie (qui peut comporter plusieurs mots ex : du Général de Gaulle)

    J'ai réussi à obtenir le résultat attendu pour les deux premières colonnes, mais ne parviens pas à remplir la troisième. En réalité, je pense ne pas avoir bien compris la manipulation de Split.
    Le code suivant fonctionne donc très bien mais reste incomplet. Qui pourra me dire comment faire pour remplir la troisième colonne, aussi simplement que je l'ai fait avec les deux premières ?
    A celui-là ou celle-là, d'avance, je dis : merci !

    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
    Sub typeVoie()
        Dim compteur As Integer
        compteur = 3
     
        Range("E3").Select
     
        While Not IsEmpty(ActiveCell.Offset(0, -4))
        If ActiveCell.Offset(0, -4).Value Like "*rue*" Then
        ActiveCell.Formula = "rue"
        ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "rue")
        ElseIf ActiveCell.Offset(0, -4).Value Like "*avenue*" Then
        ActiveCell.Formula = "avenue"
        ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "avenue")
        ElseIf ActiveCell.Offset(0, -4).Value Like "*boulevard*" Then
        ActiveCell.Formula = "boulevard"
        ActiveCell.Offset(0, -1) = Split(ActiveCell.Offset(0, -4), "boulevard")
    End If
     
    Cells(compteur, 5).Select
    compteur = compteur + 1
    Wend
    End Sub

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  3. #3
    Membre habitué
    Femme Profil pro
    Responsable financier
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable financier
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    Bonsoir Kiki,

    J'ai lu et relu et rerelu ce tuto qui, s'il est très complet et m'a bien aidée à résoudre beaucoup de choses, ne m'a pas permis de résoudre le problème posé ici.
    C'est bien pour cela que j'ai posté.
    J'ai également parcouru divers forums et n'ai toujours pas compris les subtilités du split qui est, je pense, la réponse à ma question.
    Ou pour la formuler autrement : comment, à partir de Split, récupérer toutes les chaînes se trouvant à droite (ou après) la chaîne séparatrice ?

    D'avance merci pour ton aide.
    Je me suis embarquée dans vba il y a à peine deux semaines, je suis assez satisfaite de ce que j'ai pu en faire et époustouflée par toutes ces possibilités que j'avais jusqu'à présent ignorées, mais j'avoue que toutes ces recherches ont terriblement raccourci mes nuits et là, j'ai peine à réfléchir...

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu peux récupérer seulement l'élément que tu désire en indiquant sa place ordinale dans la chaîne (en base 0) :
    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
     
    Sub Test()
     
        Dim Chaine As String
        Dim I As Integer
     
        Chaine = "Mr Dupont André 22 Rue du Général de Gaulle 75000 Paris"
     
        'tous les mots
        For I = 0 To UBound(Split(Chaine, " "))
     
            Debug.Print Split(Chaine, " ")(I)
     
        Next I
     
        'le mot "Général"
        Debug.Print Split(Chaine, " ")(6)
     
        'le dernier mot
        Debug.Print Split(Chaine, " ")(UBound(Split(Chaine, " ")))
     
    End Sub

  5. #5
    Membre habitué
    Femme Profil pro
    Responsable financier
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable financier
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Par défaut
    Theze,

    Merci de m'avoir répondu.
    Cependant, je n'ai toujours pas saisis
    Je suis désolée !

    Pour mieux comprendre mon problème, je le reformule :
    j'ai une adresse complète du type 5 rue du Général de Gaulle
    Je veux pouvoir mettre en A1 => 5
    en B1 => rue
    en C1=>du Général de Gaulle

    Avec ton code, j'ai compris que chaque chaîne serait un élément d'un tableau
    Dans ce cas, comme le nombre de chaîne varie d'une adresse à l'autre, comment faire pour connaître le nombre de chaînes généré par l'adresse ?
    Par exemple, 5 rue du Général de Gaulle contient 6 chaînes, alors que 28 quai Gallieni n'en contient que 3.
    Car dans mon cas, il faut que la première chaîne aille en A1, la seconde en B1 et tout le reste en C1. (Et je te passe le cas des numéros bis et ter)

    Mon problème suivant est comment récupérer tout ça ?

    Bref, je suis très très débutante et j'ai très très besoin de trouver une solution.

    Au secours !
    Merci d'avance pour ton aide...

  6. #6
    Expert éminent
    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
    Par défaut
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Demo()
        For Each V In Split("5 rue du Général de Gaulle;28 quai Gallieni", ";")
            SP = Split(Replace(V, " ", "¤", , 2), "¤")
            MsgBox "Adresse :  " & V & vbLf & vbLf & "Chaîne1 :  " & SP(0) & vbLf & vbLf & _
                   "Chaîne2 :  " & SP(1) & vbLf & vbLf & "Chaîne3 :  " & SP(2)
        Next
    End Sub
    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2013, 22h57
  2. Réponses: 2
    Dernier message: 04/03/2008, 09h48
  3. Réponses: 3
    Dernier message: 27/04/2007, 16h31
  4. Récupérer des floats à partir d'une string
    Par hamster dans le forum SL & STL
    Réponses: 8
    Dernier message: 09/06/2005, 08h10
  5. [Treeview VBA] Liste des fils à partir d'un noeud donné
    Par NoCoZ dans le forum Général VBA
    Réponses: 3
    Dernier message: 26/04/2005, 09h15

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