VBA Ajout d'élément ListBox

Résolu
Julistage Messages postés 31 Statut Membre -  
Julistage Messages postés 31 Statut Membre -
Bonjour,

Je suis en train de travailler sur un userform. J'ai sur un onglet: 2 listboxs qui se font face, lorsque je selectionne un élément de chaque, et que je clique sur "Valider", les deux éléments sont envoyés sur Excel dans un tableau à 3 colonnes. Je lie la deuxieme colonne à la troisième à l'aide d'une formule Excel (pour obtenir un code):

=INDIRECT(ADRESSE (EQUIV("")))

Puis ce que j'ai récupérer comme information est envoyé dans une 3 ème ListBox multicolonne (3 pour être exacte). Ma fonction marche très bien:

        Range("AB2") = ListBox15.Value  
        Range("AC2") = ListBox16.Value  

Me.ListBox24.RowSource = "Sheet1!AB2:AD2"


Seulement le problème que je rencontre est le suivant:
Ma maccro ne marche que pour un seul élément. Lorsque je clique pour rajouter un autre élément dans ma ListBox Multicolonne et bien il écrase l'élément précédent.

C'est à partir de là que je ne sais pas faire. Comment faire pour allimenter mon tableau Excel à chaque fois que je clique sur Valider, sans supprimer l'élément précédent? (de manière à alimenter ma LB Multicolonne comme je le souhaite)
Je ne sais pas comment m'y prendre pour la boucle. Auriez vous des conseils svp?
Merci d'avance :).

Julie

5 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Ta listbox est statique si tu emploies RowSource.

    Pour la rendre dynamique il faut que tu boucles sur tes colonnes et que tu utilises AddItem :

    Par exemple :

    Dim col As Long
    
    While Cells(1,col).Value <> ""
        Me.ListBox24.AddItem Cells(1,col)
        col = col + 1
    Wend


    ;o)
    3
  2. Julistage Messages postés 31 Statut Membre 3
     
    Bonjour,

    Merci d'avoir répondu aussi rapidement :). Je ne suis pas trop calée en VBA,
    Je ne connais pas la boucle while....wend :x Je suis penchée sur mon bouquin VBA excel 2003 lol et je ne trouve que
    Do While.....Loop :x. Je présume que ça marche de la même manière.
    Je dois avouer que je ne sais pas trop comment intégrer ton bout de code.
    Je comprend a peu près ce qu'il signifie ( a priori ^^).

    J'appel ListBox cible ma listbox24.

    "Tant que la cellule ...... contient une valeur, Rajoute l'élément de la cellule dans le userform dans la ListBox cible , puis passe à la colonne suivante."

    Je me permet de préciser au cas où :x que mon problème réside dans le fait de rajouter, dans mon tableau excel a chaque fois que je clique sur valider, un élément à la ligne suivante. Pour le moment quand je clique sur valider cela écrase la sélection précédente.

    Quand tu dis que ma LB cible est statique en utilisant RowSource, ça veut dire que je ne peut pas modifier ma ListBox cible? qu'elle dépend exclusiment de mon tableau Excel?

    Merci :)

    ps: J'ai modifier mon code de départ. ce n'est pas très important mais j'ai changer mes noms de cellule.
    0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Oula oui j'avais vraiment pas tout bien compris ^^

    Do While ... Loop ou While ... Wend sont presque équivalant, le Do oblige a passer au moins une fois dans la boucle ...

    Pour ajouter à la ligne suivante, il faut retrouver la dernière ligne vide de ton tableau. On peut utiliser cette fonction

        Dim DerniereLigne As Integer    
        DerniereLigne = Range("A65536").End(xlUp).Row


    Ici tu as la dernière ligne vide de la colonne A. Pour ajouter ta sélection en reprenant ton exemple ça donnerai ça:

        Dim DerniereLigne As Integer    
        DerniereLigne = Range("AB65536").End(xlUp).Row
        Range("AB" & DerniereLigne) = ListBox15.Value    
        DerniereLigne = Range("AC65536").End(xlUp).Row  
        Range("AC" & DerniereLigne) = ListBox16.Value 


    N'hésite pas à revenir si ce n'est pas ce que tu cherches.

    ;o)
    0
  4. Julistage Messages postés 31 Statut Membre 3
     
    J'ai intégrer ce code dans mon userform. Et ça marche pas trop :x.
    En fait il ne se passe rien :x
    Quand je clique sur mon valider ça continue d'écraser la ligne précédente.

    Workbooks("Test Correspondance7 v7.6.xls").Activate
    Dim DerniereLigneA As Integer
    Dim DerniereLigneB As Integer
    
    DerniereLigneA = Range("A65536").End(xlUp).Row
    Range("A2" & DerniereLigne) = ListBox1.Value
    DerniereLigneB = Range("B65536").End(xlUp).Row
    Range("B2" & DerniereLigne) = ListBox2.Value
    
    Calculate
    
    Me.ListBox17.RowSource = "Sheet1!A2:C2"
    


    J'ai l'impression que ça fait comme ce que j'avais avant:

    Workbooks("Test Correspondance7 v7.6.xls").Activate
             
           
    
    Range("A2") = ListBox1.Value
    Range("B2") = ListBox2.Value
    
    Calculate
    
    Me.ListBox17.RowSource = "Sheet1!A2:C2"
    


    Tout à l'heure avant que je l'adapte de cette manière c'est à dire en copiant/collant ce que vous m'avez montré, ça me collait l'élément de la colonne A bizarrement. Au premier clique a la premiere ligne, au second une vingtaine de lignes plus loin, au troisième, une centaine de ligne plus loin et au quatrième à la ligne 22 222 :x
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Là je n'ai qu'un bout de code ... difficile de dire quoique ce soit.

      "Test Correspondance7 v7.6.xls" ??? c'est quoi exactement ? le classeur actif, un classeur ouvert ? le classeur qui contient l'UF ?

      Pour pouvoir te répondre il faut avoir une vue d'ensemble de ce que tu veux faire.

      Tu peux également faire passer ton classeur ou un zip de l'environnement par http://www.cjoint.com, tu colles ensuite ici le lien donné par le site. Enlèves les données sensibles ou confidentiels et replaces les par de trucs bidons genre "toto" "tata" "Pim" "Pam" Pom" ... ^^

      ;o)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Julistage Messages postés 31 Statut Membre 3
     
    Merci Polux :)

    Voilà la réponse à la question, merci à lui!

    Dim ws As Worksheet
    Workbooks("***.xls").Activate
    Set ws = ThisWorkbook.Worksheets(1)
    
    
    Dim DerniereLigneA As Integer
    Dim DerniereLigneB As Integer
    
    DerniereLigneA = ws.Range("A65536").End(xlUp).Row + 1
    Range("A" & DerniereLigneA) = ListBox1.Value
    DerniereLigneB = Range("B65536").End(xlUp).Row + 1
    Range("B" & DerniereLigneB) = ListBox2.Value
    
    Calculate
    
    'Initialisation et remplissage de la listbox17
    Dim Derligne As Long
    
    'ListBox17.Clear
    
    Derligne = ws.Range("A65536").End(xlUp).Row + 1
    Me.ListBox17.RowSource = "Sheet1!A2:C" & Derligne & ""
    
    
    0