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 :

Extraire Mots séparé par des virgules


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut Extraire Mots séparé par des virgules
    Bonjour à tous,

    Dans plusieurs cellule excel je dispose d'information séparer par des virgules:

    Exemple:
    information1, information2 etc...., information 8

    Est-ce possible d'extraire avec une macro Excel d'extraire l'information1, ou 2 etc.. ?

    Merci

    guigui69

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,

    plusieurs methodes
    - soit tu utilises l'interface Excel Donnees>Text to Column
    - soit tu utilises du VBA avec la fonction Split()

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    Aurais-tu des exemple pour Split() ?

    Merci

    guigui69

  4. #4
    Membre régulier Avatar de Syphochaos
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 70
    Points : 112
    Points
    112

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    Merci j'ai testé ceci que j'ai trouvé sur internet

    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
     
    Sub extractionMots()
        Dim Tableau() As String
        Dim i As Integer
     
        'découpe la chaine en fonction des espaces " "
        'le résultat de la fonction Split est stocké dans un tableau
        Tableau = Split(Range("C2").Value, ",")
     
        'boucle sur le tableau pour visualiser le résultat
        For i = 0 To UBound(Tableau)
            'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
            MsgBox (Tableau(i))
        Next i
    End Sub
    pour afficher le résultat.

    Maintenant je voudrait arriver a faire ceci:

    En c2split les donnée ==> Affiché en D2 les informations a partir de la 8eme donnée spliter.
    Puis passer a la ligne suivante C3 ==> D3 etc...

    Comment réaliser ceci ??

    Merci d avance pour votre aide

    guigui69

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    OK,

    on est pret a te donner les methodes, mais ne nous demande pas de faire a ta place non plus

    changer une valeur de boucle doit etre faisable

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub extractionMots()
        Dim Tableau() As String
        Dim l As Integer
     
       For l = 1 To 10000
        Tableau = Split(Cells(l, 4).Value, ",")
        Cells(l, 4) = Tableau(8) & Tableau(9) & Tableau(10)
    Next l
      End Sub
    J'ai une erreur 'erreur exécution 9 l'indice ne fait partie de la sélection'

    Quelle erreur est-je commis ?
    J'ai testé en fesant un Cells(x, 1) = "Ligne " & l et cela c'est bien affiché dans les cellules.

    guigui69

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    Attention, 2 choses
    - la boucle que tu as recuperer commence son incrementation a 0, ce qui veut dire que l'indice de ton premier element est a 0, et donc les elements 8, 9 et 10 auront respectivement les indices 7, 8 et 9.
    - tu vas chercher dans ta colonne D dans ton code (Cells(,4)) au lieu de la colonne C


    Pour optimiser ton code, au lieu de fixer arbitrairement la borne superieure de ta boucle a 10000, tu peux utiliser un bout de code VBA qui va retourner la derniere ligne utilisee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub extractionMots()
        Dim Tableau() As String
        Dim l As Integer
     
       For l = 1 To Range("D65536").End(Xlup).Row
        Tableau = Split(Range("C" & i).Value, ",")
        Range("D" & i).Value = Tableau(7) & Tableau(8) & Tableau(9)
    Next l
      End Sub

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    D'accord,

    Bizarre il m'affiche une erreur 400???

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    j'ai malencontreusement mis des i a la place des tes l de depart dans la boulce

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    J'avais vu cette erreur j'ai corrigée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub extractionMots()
        Dim Tableau() As String
        Dim l As Integer
     
       For l = 1 To Range("D65536").End(xlUp).Row
        Tableau = Split(Range("C" & l).Value, ",")
        Range("D" & l).Value = Tableau(7) & Tableau(8) & Tableau(9)
    Next l
      End Sub
    Mais cette fait il m'indique
    erreur exécution 9 l'indice n'appartient pas à la sélection.

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    OK, ca rejoint l'autre point evoque, le fait que parfois tu n'as pas d'element 8 a 10.

    En reprenant ton code exemple, tu vois la fonction UBound() qui va chercher l'indice le plus eleve de ton split()
    aussi au lieu de faire une boucle de 0 a UBound(), tu peux faire une boucle de 7 a Ubound()

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    Je ne comprend pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub extractionMots()
        Dim Tableau() As String
        Dim l As Integer
       For l = 1 To Range("D65536").End(xlUp).Row
        Tableau = Split(Range("B" & l).Value, ",")
        Range("D" & l).Value = Tableau(1)
    Next l
      End Sub
    Dans cette exemple je lui demande d’insérer la valeur tableau(1) (==> Split de la Cellule B2 par exemple)dans la cellule D2 et il me dit " l'indice n'appartient pas à la sélection. "

    Je comprend pas.

    guigui69

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    Ok, je viens de relire tout le code,
    en fait tu definis Tableau comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tableau() As String
    Passe plus simplement par un

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    Toujour l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub extractionMots()
        Dim Tableau As Variant
        Dim l As Integer
       For l = 1 To Range("D65536").End(xlUp).Row
        Tableau = Split(Range("B" & l).Value, ",")
        Range("D" & l).Value = Tableau(1)
    Next l
      End Sub
    Par contre pour tester j'ai changer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Tableau = Split(Range("B" & l).Value, ",")
        Range("D" & l).Value = Tableau(1)
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Tableau = Split(Range("B2").Value, ",")
        Range("D2").Value = Tableau(1)
    Et la pas d'erreur et dans ma cellule D2 j'ai bien l'information qui c'est inscrit.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    hum,

    tu travailles dans quelles colonnes au final ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 822
    Points : 49
    Points
    49
    Par défaut
    Ben avec le fichier actuel, la colonne que je split est la B et ou je veut que les informations arrive est la D.

  18. #18
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Tout d'abord excusez l'incruste...
    Peut être y a-t-il, dans la colonne B des cellules vides, ou d'autres ne comportant qu'un seul mot, sans virgules.
    A mon sens, si tel est le cas, un test préalable est nécessaire.
    exemple 1 :
    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
    Sub extractionMots()
    Dim Tableau As Variant
    Dim l As Integer
     
    For l = 1 To 15
        If InStr(1, Range("B" & l).Value, ",") > 0 Then
            Tableau = Split(Range("B" & l).Value, ",")
        ElseIf Range("B" & l).Value = "" Then
            Tableau(1) = "vide"
        Else
            Tableau(1) = Range("B" & l).Value
        End If
        Range("D" & l).Value = Tableau(1)
    Next l
    End Sub
    Exemple 2 (si l'erreur est bien celle mentionnée ci dessus (cellules vides)) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub extractionMots()
    Dim Tableau As Variant
    Dim l As Integer
    On Error Resume Next
    For l = 1 To 15
        Tableau = Split(Range("B" & l).Value, ",")
        Range("D" & l).Value = Tableau(1)
    Next l
    End Sub

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2015, 06h45
  2. Réponses: 0
    Dernier message: 14/08/2012, 08h03
  3. Jointure vers des ID séparés par des virgules (possible ?)
    Par le_binr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/05/2008, 01h46
  4. Lignes d'une colone séparés par des virgules.
    Par Wahid.Net dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/02/2008, 01h47
  5. [SQL] Id séparés par des virgules et requête de sélection
    Par Emotion dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/09/2007, 23h48

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