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 :

Aligner données venant de 3 colonnes dans une listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Par défaut Aligner données venant de 3 colonnes dans une listbox
    Bonjour,

    Après avoir tapé une recherche dans ma textbox, j'ai codé pour récupérer dans ma listbox les lignes correspondantes comprenant 3 colonnes de mon tableau (B,C,D).

    Dans "propriété" j'ai spécifié 3 colonnes avec les dimensions respectives.

    Mais le résultat ne change pas, j'obtiens dans ma listbox pour chaque ligne de mon tableau sélectionné, les données des colonnes (B,C,D) les unes à la suite des autres. C'est à dire :
    B1
    C1
    D1
    B2
    C2
    D2
    ...

    Alors que je souhaite obtenir dans ma listbox les résultat de la facon suivante:
    B1 C1 D1
    B2 C2 D2

    J'ai épluché tous les articles concernant le sujet mais je n'ai pas réussi à adapter quelque chose qui marche...

    Voici mon code, merci pour votre aide.

    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
    Private Sub TextBox_Change()
     
        Application.ScreenUpdating = False
     
     
        der_ligne = Cells(Rows.Count, 2).End(xlUp).Row
     
        ListBox.Clear
     
        If TextBox <> "" Then
            For i = 2 To der_ligne
                If Cells(i, 2) Like "*" & TextBox & "*" Then
     
                    Me.ListBox1.AddItem Cells(i, 2)
                    Me.ListBox1.AddItem Cells(i, 3)
                    Me.ListBox1.AddItem Cells(i, 4)
                End If
            Next
        End If
      TextBox.Text = UCase(TextBox.Text)
    End Sub

  2. #2
    Membre averti
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut
    Bonjour,

    Peut-on avoir l'intégralité du code, histoire d'être à même de vous venir en aide ?

    Merci :-)

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Par défaut
    Bonjour,

    Merci de votre réponse rapide !!!

    Concernant l'alimentation de ma listbox, je n'ai que ce code. Je n'ai pas de code direct pour ma listbox. Elle s'alimente automatiquement via le code ci dessus.

    Du coup, je ne comprends pas ce que vous voulez en plus. La suite de mon code ?

    La suite est la suivante, je coche la ligne qui m' intéresse pour faire apparaître les données dans des textboxts de mon uf, je saisie ces données pour les modifier dans mon tableau et j'enregistre

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Ton erreur est dans la manière de remplir items et sub items de ta listbox !
    Regarde ce que fait cet exemple, qui te montre comment on alimente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ListBox1
       .Clear
       .ColumnCount = 3
       For i = 1 To 4
          .AddItem "toto" & i
          .List(.ListCount - 1, 1) = "a" & i
          .List(.ListCount - 1, 2) = "b" & i
       Next
     End With
    et alimente de cette manière (adapte à tes cellules et ton expression conditionnelle)

    EDIT :j'ai modifié le texte des données insérées afin que ce soit plus clair (la boucle for i n'est là que pour avoir des données différentes à insérer)

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Par défaut
    unparia, ca marche ! Merci ! Mais alors je n'explique pas une chose,

    C'est que sans le coder, les numéros de mes lignes sélectionnées apparaissent en première colonne de ma listbox. Je suis alors obligé de coder ".columncount=4" pour faire afficher mes 3 colonnes B, C, D. Sans ça, ma colonne D n’apparaît pas.

    Savez vous pourquoi ?

    Nouveau code :

    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
    Private Sub TextBox_Change()
     
        Application.ScreenUpdating = False
     
        der_ligne = Cells(Rows.Count, 2).End(xlUp).Row
     
        ListBox.Clear
     
        If TextBox <> "" Then
        With ListBox
       .Clear
       .ColumnCount = 4
            For i = 2 To der_ligne
                If Cells(i, 2) Like "*" & TextBox & "*" Then
                    .AddItem i
                    .List(.ListCount - 1, 1) = Cells(i, 2)
                    .List(.ListCount - 1, 2) = Cells(i, 3)
                    .List(.ListCount - 1, 3) = Cells(i, 4)
     
                End If
            Next
            End With
        End If
      TextBox.Text = UCase(TextBox.Text)
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Hola !
    Tu n'as donc pas vraiment compris.
    Correction de ton code :
    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
    Application.ScreenUpdating = False
     
        der_ligne = Cells(Rows.Count, 2).End(xlUp).Row
     
        ListBox.Clear
     
        If TextBox <> "" Then
        With ListBox
       .Clear
       .ColumnCount = 3
            For i = 2 To der_ligne
                If Cells(i, 2) Like "*" & TextBox & "*" Then
     
                    .AddItem = Cells(i, 2)
                    .List(.ListCount - 1, 1) = Cells(i, 3)
                    .List(.ListCount - 1, 2) = Cells(i, 4)
     
                End If
            Next
            End With
        End If
      TextBox.Text = UCase(TextBox.Text)
    Au passage : pas très astucieux, d'utiliser l'évènement Change de ta textbox (il se déclenche à chaque touche pressée ...). Mais c'est là une autre affaire que je ne traiterai donc pas là.

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

Discussions similaires

  1. Largeur de colonne dans une Listbox
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/02/2009, 12h29
  2. Afficher plusieurs colonnes dans une ListBox
    Par codial dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 13h48
  3. Réponses: 4
    Dernier message: 21/07/2006, 15h53
  4. Fixer colonnes dans une listbox
    Par emeraudes dans le forum IHM
    Réponses: 35
    Dernier message: 12/06/2006, 15h49
  5. Afficher deux colonnes dans une ListBox
    Par deubal dans le forum Composants VCL
    Réponses: 4
    Dernier message: 25/10/2005, 20h53

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