VBA Ajout d'élément ListBox
Résolu
Julistage
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
Julistage Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Julistage Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
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:
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
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
A voir également:
- Listbox vba excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
5 réponses
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 :
;o)
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)
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.
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.
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
Ici tu as la dernière ligne vide de la colonne A. Pour ajouter ta sélection en reprenant ton exemple ça donnerai ça:
N'hésite pas à revenir si ce n'est pas ce que tu cherches.
;o)
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)
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.
J'ai l'impression que ça fait comme ce que j'avais avant:
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
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
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)
"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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci Polux :)
Voilà la réponse à la question, merci à lui!
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 & ""