Poto
XLDnaute Occasionnel
Bonjour à tous,
Dans une de mes projet, j'utilise un userform contenant une listebox pour remplir automatiquement une cellule par rapport a la valeur choisi dans la listbox.
Voici le code contenu dans le userform
(code venant d'une aide sur ce forum, encore merci pour ca 😉 )
Elle fonctionne bien sauf que j'ai 2 petit probleme avec :
1°) si il y a une une (ou plusieurs) ligne vide dans la Listbox et que, par erreur, je la selectionne (par un double click), une erreur apparait alors :
"Erreur d'execution '381': Impossible de lire la propriété List. Index de table non valide."
j'ai essayer plusieurs manieres pour conditionner la procedure declencher par un double click, sans succés 🙁
2°) si la "source" ( Sheets("STAFF").Range("A7:A2007") contenant des noms de personnes), dans laquelle se renseigne la listbox, est filtrer afin de ne faire apparaitre que les lignes dont la cellule en A contient un nom, alors la listbox ce comporte tres bizzarement : seulement 1 nom apparait alors, et aucun des autres et la selection par double click ne fonctionne pas.
je sais que ca a l'air confu comme explication, pour clarifier un peu, ce projet est un planning avec une feuile "STAFF" qui est un tableau me servant de base de donnees du personnel, comportant 32 colonnes remplis de divers renseignements sur les employés et comportant 2000 lignes ( pas toutes remplis ).
La feuille "STAFF" renseigne un userform (celui en question plus haut ) qui se lance depuis la feuille "PLANNING" et qui me permet de remplir rapidement le ... planning 🙂
voilà, j'espère que quelqu'un aura une idée 🙂
merci d'avance
Poto
Dans une de mes projet, j'utilise un userform contenant une listebox pour remplir automatiquement une cellule par rapport a la valeur choisi dans la listbox.
Voici le code contenu dans le userform
(code venant d'une aide sur ce forum, encore merci pour ca 😉 )
Code:
Option Base 1
Private Sub UserForm_Initialize()
Dim i&, fin&, aa As Variant, bb As Variant, cc As Variant, a&
With Sheets("STAFF")
fin = .Range("A2007").End(xlUp).Row
aa = .Range("A7:J" & fin)
bb = Sheets("PLANNING").Range("B" & 13 + (mem * x) & ":B" & 62 + (mem * x))
y = 1
ReDim cc(1, y)
For i = 1 To UBound(aa, 1)
If aa(i, 1) = "" Then GoTo 1
For a = 1 To UBound(bb, 1)
If aa(i, 1) = bb(a, 1) Or aa(i, 10) <> "" Then
aa(i, 1) = ""
1 End If
Next a
Next i
For i = 1 To UBound(aa)
If aa(i, 1) <> "" Then ReDim Preserve cc(1, y): cc(1, y) = aa(i, 1): y = y + 1
Next i
ListBox1.List = Application.Transpose(cc)
End With
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell = ListBox1.List(ListBox1.ListIndex, 0)
ListBox1.Clear
Unload Me
End Sub
Elle fonctionne bien sauf que j'ai 2 petit probleme avec :
1°) si il y a une une (ou plusieurs) ligne vide dans la Listbox et que, par erreur, je la selectionne (par un double click), une erreur apparait alors :
"Erreur d'execution '381': Impossible de lire la propriété List. Index de table non valide."
j'ai essayer plusieurs manieres pour conditionner la procedure declencher par un double click, sans succés 🙁
2°) si la "source" ( Sheets("STAFF").Range("A7:A2007") contenant des noms de personnes), dans laquelle se renseigne la listbox, est filtrer afin de ne faire apparaitre que les lignes dont la cellule en A contient un nom, alors la listbox ce comporte tres bizzarement : seulement 1 nom apparait alors, et aucun des autres et la selection par double click ne fonctionne pas.
je sais que ca a l'air confu comme explication, pour clarifier un peu, ce projet est un planning avec une feuile "STAFF" qui est un tableau me servant de base de donnees du personnel, comportant 32 colonnes remplis de divers renseignements sur les employés et comportant 2000 lignes ( pas toutes remplis ).
La feuille "STAFF" renseigne un userform (celui en question plus haut ) qui se lance depuis la feuille "PLANNING" et qui me permet de remplir rapidement le ... planning 🙂
voilà, j'espère que quelqu'un aura une idée 🙂
merci d'avance
Poto