RESOLU! problème de code ListBox

pnlop

XLDnaute Occasionnel
Bonjour le forum,
J'ouvre une nouvelle discussion pour mon projet car l'autre est devenue trop longue et n'a plus rien à voir avec le début.
Voici mon problème:
j'ai un UserForm avec un ListBox1 (1 colonne) qui s'alimente comme je le veut et un ListBox2 multichoix (5 colonnes dont 4 masquées) qui ne s'alimente pas comme je veux...
En résumé:
La ListBox2 se rempli selon le choix fait dans la ListBox1. Les données sont prises dans la feuille portant le nom de la séléction de l'Item dans la ListBox1 -> Worksheets("ListBox1.ListIndex"), les données viennet des colonnes A à E (seul. B sera visible dans la ListBox2).

Voici mon code... qui ne fonctionne pas, sinon je ne serais pas venue vers vous!!!
Private Sub ListBox1_Click()
If ListBox1.ListIndex = -1 Then Exit Sub
With ListBox1.ListIndex
Dim i As Integer, j As Byte
For j = 0 To 4
ListBox2.List() = Worksheets("ListBox1.ListIndex").Range("i" & j).Value
Next
End With

End Sub

Private Sub UserForm_Initialize()

With ListBox1
.ListStyle = fmListStyleOption
.List = Sheets("termes").[B11:B17].Value
End With

With ListBox2
Dim i As Integer, j As Integer
.ListStyle = fmListStyleOption
.MultiSelect = fmMultiSelectMulti
.ColumnCount = 5
.ColumnWidths = "0; 200;0 ; 0 ; 0"
End With

End Sub
Une Idée?

Merci d'avance
pnlop
 
Dernière édition:

nyko283

XLDnaute Occasionnel
Re : problème de code ListBox

Bonjour Pnlop, le forum,

Regarde le fichier joint si cela correspond a tes attentes.

!!!! attention la listbox 2 les paramètres ont été modifié dans la fenetre des propriètés donc non géré par le code.
 

Fichiers joints

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Bonjour Nyko283,
Merci, je suis en train de tester, mais ça bug un peu...
Dand ton code: x As Integer - Ca, c'est parce que tu n'as que 4 lignes de données? Car dans mes feuilles, le nombre de lignes est où il y a des données est variable...... Donc si je laisse tel quel, il ne me met que les 4 première lignes d'articles... est ce que je doit ajouter un truc du genre For x = 1 To 500 (mais je risque d'avoir des cases vides...?) ou alors quelque chose comme For x = 65536.End(xlUp).Row)?????
 

Excel-lent

XLDnaute Barbatruc
Re : problème de code ListBox

Bonjour Pnlop, Nyko283,

pnlop a dit:
Dand ton code: x As Integer - Ca, c'est parce que tu n'as que 4 lignes de données?
Lorsqu'on dit qu'une variable est de type "Integer" grâce à la ligne de code :
Dim x as Integer
Cela signifie qu'on indique à Excel que la variable x, durant l’exécution de la macro va contenir un nombre entier compris entre -32 768 et 32 767.

Donc si tu as 32 767 lignes maximum à traiter, pas besoin de changer.

Par contre si tes données vont jusqu'à la ligne 65 000 alors il faut écrire :
Dim x as Long
Pour plus d'informations, n'hésite pas à consulter ce lien très bien fait.

L'idéal serait de mettre ce lien en favoris, maintenant que tu as plongé du côté obscure de la force du VBA, il va souvent te servir ;)


pnlop a dit:
Car dans mes feuilles, le nombre de lignes est où il y a des données est variable...... Donc si je laisse tel quel, il ne me met que les 4 première lignes d'articles...
Tu retombe dans tes travers ;) tu n'as pas mis de fichier exemple. Donc tu obtiens une réponse JUSTE, mais pas complétement adapté à ton cas de figure! Mais excellente nouvelle, la question était clair et précise, tu as les connaissances pour pouvoir l'adapter ;)

En effet, la solution est là :
pnlop a dit:
je doit ajouter un truc du genre For x = 1 To 500 (mais je risque d'avoir des cases vides...?) ou alors quelque chose comme For x = 65536.End(xlUp).Row)?????
Tu y es presque! Voici la bonne réponse :
For x = 1 To [A65536].End(xlUp).Row
...
Next x
Bonne fin d'après midi
 

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Bonsoir le forum,
Merci Excel -lent. Tu es presque génial. Quoiqu'un peu sarcastique?:cool:
J'ai du faire une pause, mais vais m'y remettre et essayer d'adapter tout ça.
PS, j'ai mis le lien en favoris......
A plus
Pnlop
 

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Re,
J'ai essayé de tester le code mais plus rien ne fonctionne. Il me met: Erreur de compilation, projet ou bibliothèque introuvable... Mais en fait, je me demande si ça vient pas de ma version d'excel chez moi (excel 2000). Car je travaille sur ce projet à mon boulot sur excel 2010 et pour pouvoir avancer chez moi, je me le suis envoyer, en prenant soins de l'enregistrer en version 97-2003.... Pensez-vous que ça a un rapport car si oui, je vais arrêter de me prendre la tête!!!! Car tout fonctionnait bien jusque là. J'ai juste changé la portée de x dans mon code et quand j'exécute, il me balance des erreurs où il n'y en avait pas avant!!!:confused::confused::confused:
A bientôt
pnlop
 

Excel-lent

XLDnaute Barbatruc
Re : problème de code ListBox

Hello,

Les macros (formules, ...) développées sur une "ancienne" version fonctionnent forcément sur une version plus récente. Par contre, dans le sens inverse, ça peut bugger.

Je n'ai aucune preuve, ne suis pas assez calé pour l'expliquer :
Mais avec la version 2010 - d'après ce que j'ai lu dans plusieurs posts sur ce forum - il semble qu'il y ait des soucis dans les DEUX sens!

A+
 
Dernière édition:

nyko283

XLDnaute Occasionnel
Re : problème de code ListBox

Bonjour tout le monde,

Pour l' erreur de compilation projet ou bibliotheque introuvable, regarde dans les référence active celle qui pose probléme devrait etre mentionne avec manquant, par exemple si tu as activer au boulot la ref pour Excel versions 15, 16 ... et que chez toi tu n'as que la versions 9 alors active ta versions sinon il se peut aussi que dans ton fichier tu utilise un composant du style dtpicker, calendar, ou bien d'autres mais que sur ton ordi personnel il ne soit pas installer.

sinon en complément des réponse d' EXCEL-LENT, rajoute dans ta boucle une condition permettant d'eviter les lignes vides:

VB:
For x = 1 To [A65536].End(xlUp).Row
   If not cells(x,1).value="" then 
       ...
   End if
Next x
bon dimanche a tous.
 

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Bonjour le forum,
Excel-lent et Nyko, Merci pour vos réponses. Je vais mettre mon travail en standby jusqu'à mardi (jour oû je serai à nouveau au bureau sur excel 2010). En effet, j'ai chez moi une version excel2000 "empruntée" à qqn..... donc pas moyen de modifier quoique ce soit, j'ai même pas l'aide installée... Mais je garde tout bien au chaud pour tester tout ça mardi.
Je vous redis si ça marche...
A plus
pnlop
 

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Bonjour le forum, Excel-lent, Nyko,
Me revoilà devant excel 2010..... J'ai fait tout comme on a dit... j'ai même compris que je devais changer Integer en Long si je mettais 65000 et quelques lignes...
Mais dans ma ListBox2 (UserForm10, appeler en cliquant sur formulaire Oekofen dans la feuille "choix formulaire", il n'y a toujours que 5 entrées... :confused:
Donc soit l'erreur me crève les yeux et je la vois pas et j'ai besoins de vos lunettes, soit il me manque des données...
PS à Nyko, le code en cas de ligne vide dans la liste m'intéresse vraiment, sauf que je sais pas trop où l'installer... ni quoi mettre à la place des 3 points rouge...!
Je met une version allégée de mon fichier en PJ.
A bientôt
Merci
pnlop
 

Paritec

XLDnaute Barbatruc
Re : problème de code ListBox

Bonjour Pnlop le forum
bon alors ton remplissage de listbox2 revu et corrigé pour le reste tu fais pareil
a+
Papou:eek:
 

Fichiers joints

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Re le forum,
Merci beaucoup Papou! ton code semble fonctionner comme je le souhaite dans ton fichier. Cependant, pour ma culture et pour que je puisse l'utiliser en le modifiant dans d'autres contextes, peux-tu me donner qq explications...:
Private Sub ListBox1_Click()
Dim i&, j&, x&, fin& i = ? / j = ? / x = ? / fin = "le plus possible?!?"
If ListBox1.ListIndex = -1 Then Exit Sub ça j'ai compris!
ListBox2.Clear ça aussi!
With Sheets(ListBox1.Value) ça aussi!
fin = .Range("A" & Rows.Count).End(xlUp).Row ça plus ou moins... c'est pour qu'il aille chercher les données (cllules pleines) depuis le bas?
For i = 1 To fin la réponse sera plus haut... i = ?
If .Range("B" & i) <> "" Then
ListBox2.AddItem .Range("B" & i).Value B??
For a = 1 To 4 a??
ListBox2.List(ListBox2.ListCount - 1, a) = .Cells(i, a)
Next a
End If
Next i
End With
End Sub
Je suis un peu perdu avec les lettres qui sont parfois en majuscules et parfois en minuscules...
Excusez moi de mon ignorance :rolleyes:
Merci
A plus
 

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Ah juste un tout petit bug quand je teste le code dans mon fichier original:
J'ai les données de la colonne A qui s'affichent (n° d'articles) et non pas le libellé... C'est sûrement un problème de propriété des colonnes de ma ListBox non?
 

Paritec

XLDnaute Barbatruc
Re : problème de code ListBox

re pnlop le forum
a+
papou:eek:

VB:
Private Sub ListBox1_Click()
    Dim i&, j&, x&, fin& ' là c'est pour déclarer les variables en long
    If ListBox1.ListIndex = -1 Then Exit Sub 'ça j'ai compris!
    ListBox2.Clear'ça aussi
    With Sheets(ListBox1.Value)' ça aussi!
        fin = .Range("A" & Rows.Count).End(xlUp).Row 'là c'est pour trouver la dernière ligne de la liste de ta feuille
        For i = 1 To fin 'là c'est pour faire une boucle de la ligne 1 à le dernière ligne remplie
            If .Range("B" & i) <> "" Then  'là je vérifie si la colonne B contient bien une valeur et si oui j'ajoute à la listbox
            ListBox2.AddItem .Range("B" & i).Value   'ajout à la listbox
            For a = 1 To 4 ' là je donne à la variable a la valeur de 1 à 4 pour les colonnes
                ListBox2.List(ListBox2.ListCount - 1, a) = .Cells(i, a) 'là j'ajoute les colonnes 1 à 4
            Next a
        End If
    Next i
End With
End Sub
 
Dernière édition:

pnlop

XLDnaute Occasionnel
Re : problème de code ListBox

Merci pour les superr explication! ça m'a permis de corriger l'erreur toute seule!!!!!
Je me sens comme un superhéro! pour une fois que j'y arrive!
A plus
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas