VBA Ajout d'élément ListBox [Résolu/Fermé]

Signaler
Messages postés
29
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2014
-
Messages postés
29
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2014
-
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

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
29
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2014
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.
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
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)
Messages postés
29
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2014
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
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 147
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)
Messages postés
29
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2014
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 & ""