Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplir 3 combobox avec critères

12 réponses
Avatar
François
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes (A:K)
car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI

10 réponses

1 2
Avatar
LSteph
Bonjour François,
Dim i as long

a+
lSteph

"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI



Avatar
LSteph
Re,
plus ennuyeux:
dans l'exemple que tu as utilisé myr visait une ligne , dans le tien il
s'agit d'une colonne,
tu ne peux donc pas utiliser ceci:
Set lst = myr(ComboBox1.ListIndex + 1)
.....

Cells(65536, lst.Column).End(xlUp)).Cells


...
a+


"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI



Avatar
michdenis
Bonjour François,


Une copie d'une réponse que je donnais à Yvan plutôt !


si cela t'intéresse, voici un exemple sur la manière d'utiliser ADO (activex data objets 2.x lilbrairy) pour remplir des combobox,
empêcher les doublons et trier la liste par ordre croissant.

Pour utiliser cet exemple, vous devez avoir la référence "Microsoft Activex Data Objects 2.x" disponible et accessible par le
classeur

http://cjoint.com/?iBsTCrw53o


Salutations!


"François" a écrit dans le message de news: zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes (A:K)
car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI
Avatar
LSteph
....suite... ce qui sous tend que tes autres listes sont issues de lignes et
non de colonnes
donc on aurait qqchose du genre:

Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(0, 1), _
Cells(lst.Row, 255).End(xlToLeft)).Cells
that.Add c, CStr(c)
Next c

..pour le reste je ne vois pas trop ce que tu fais après ni du Tableau as
variant...
le plus simple serait que tu mette ton classeur (en modèle plus réduit) là
http://www.cjoint.com


a+
lSteph


"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI



Avatar
François
Les combobox sont pour les colonnes.

Voici le lien : http://cjoint.com/?iBuD3BuN56

Merci

"LSteph" a écrit dans le message de news:

....suite... ce qui sous tend que tes autres listes sont issues de lignes
et non de colonnes
donc on aurait qqchose du genre:

Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(0, 1), _
Cells(lst.Row, 255).End(xlToLeft)).Cells
that.Add c, CStr(c)
Next c

..pour le reste je ne vois pas trop ce que tu fais après ni du Tableau as
variant...
le plus simple serait que tu mette ton classeur (en modèle plus réduit) là
http://www.cjoint.com


a+
lSteph


"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un élément
dans le premier, seul les choix en fonction du premier doivent s'afficher
dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI







Avatar
LSteph
Bonsoir François,

Tout à lheure
je téléchargeais ton fichier et commençais à écrire ceci:
--
Compte-tenu de ce que tu réfères dans cette macro il y a plein de vide en
colonne A
et pour le reste la disposition ne constitue pas réellement un critère
indexé dans une première liste
duquel découlerait un choix déterminant les matrices référant à d'autres
listes sur lesquelles trier des doublons.
En clair, c'est assez éloigné de l'exemple proposé sur l'autre fil.
Sinon qui pourraient renseigner une combobox, je vois les types de
numérotation de timbres en colonne B,
et un élément coincidant dans des colonnes adjacentes, soit seul la
colonne G qui est relativement renseignée.
Je regarde donc toutefois ce qui se pourrait faire selon l'useform que tu
as élaboré...
--
Je reprends donc:

En fait, la colonne B ne constitue pas non plus un index il y a plusieurs
fois les mêmes numéros.
Aussi, dans la mesure où la colonne C ajoute un renseignement, de type
a,b,c,...
il serait envisageable de concaténer ces deux références en une, de sorte
que tes enregistrements soient bien distincts.
ainsi en ajoutant une colonne par exemple ²&c2 à recopier sur la colonne.
Si je peux me permettre aussi mettre un titre distinct pour chaque colonne
et ne pas utiliser ces fusions
pour ainsi se retrouver avec un seul titre pour 3 colonnes.
Pour l'instant, désolé mais je ne vois pas vraiment ce qui pourrait ou à
quelle fin être exploité dans le userform
selon le sujet de ce fil.


A+

lSteph





"François" a écrit dans le message de news:
BF1Qe.67418$
Les combobox sont pour les colonnes.

Voici le lien : http://cjoint.com/?iBuD3BuN56

Merci

"LSteph" a écrit dans le message de news:

....suite... ce qui sous tend que tes autres listes sont issues de lignes
et non de colonnes
donc on aurait qqchose du genre:

Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(0, 1), _
Cells(lst.Row, 255).End(xlToLeft)).Cells
that.Add c, CStr(c)
Next c

..pour le reste je ne vois pas trop ce que tu fais après ni du Tableau as
variant...
le plus simple serait que tu mette ton classeur (en modèle plus réduit)

http://www.cjoint.com


a+
lSteph


"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un
élément dans le premier, seul les choix en fonction du premier doivent
s'afficher dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je ne
peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI











Avatar
François
"LSteph" a écrit dans le message de news:

Bonsoir François,

Tout à lheure
je téléchargeais ton fichier et commençais à écrire ceci:
--
Compte-tenu de ce que tu réfères dans cette macro il y a plein de vide en
colonne A
Il faut donc enlever les doublons


et pour le reste la disposition ne constitue pas réellement un critère
indexé dans une première liste
duquel découlerait un choix déterminant les matrices référant à
d'autres listes sur lesquelles trier des doublons.
En clair, c'est assez éloigné de l'exemple proposé sur l'autre fil.
Sinon qui pourraient renseigner une combobox, je vois les types de
numérotation de timbres en colonne B,
En colonne A il y a des lettres mais j'ai du diminuer mon fichier ...


Je crois donc que je suivrai donc conseil en concaténant les 3 colonnes mais
j'aimerai tout de même connaître la procédure des 3 combobox pour une
utilisation dans un autre fichier.

et un élément coincidant dans des colonnes adjacentes, soit seul la
colonne G qui est relativement renseignée.
Je regarde donc toutefois ce qui se pourrait faire selon l'useform que
tu as élaboré...
--
Je reprends donc:

En fait, la colonne B ne constitue pas non plus un index il y a plusieurs
fois les mêmes numéros.
Aussi, dans la mesure où la colonne C ajoute un renseignement, de type
a,b,c,...
il serait envisageable de concaténer ces deux références en une, de sorte
que tes enregistrements soient bien distincts.
ainsi en ajoutant une colonne par exemple ²&c2 à recopier sur la
colonne.
Si je peux me permettre aussi mettre un titre distinct pour chaque colonne
et ne pas utiliser ces fusions
pour ainsi se retrouver avec un seul titre pour 3 colonnes.
Pour l'instant, désolé mais je ne vois pas vraiment ce qui pourrait ou à
quelle fin être exploité dans le userform
selon le sujet de ce fil.


A+

lSteph





"François" a écrit dans le message de news:
BF1Qe.67418$
Les combobox sont pour les colonnes.

Voici le lien : http://cjoint.com/?iBuD3BuN56

Merci

"LSteph" a écrit dans le message de news:

....suite... ce qui sous tend que tes autres listes sont issues de
lignes et non de colonnes
donc on aurait qqchose du genre:

Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(0, 1), _
Cells(lst.Row, 255).End(xlToLeft)).Cells
that.Add c, CStr(c)
Next c

..pour le reste je ne vois pas trop ce que tu fais après ni du Tableau
as variant...
le plus simple serait que tu mette ton classeur (en modèle plus réduit)

http://www.cjoint.com


a+
lSteph


"François" a écrit dans le message de news:
zn0Qe.46463$
Bonjour,

J'ai trois combobox liés entre eux, i.e. que lorsque je choisi un
élément dans le premier, seul les choix en fonction du premier doivent
s'afficher dans le 2e et dans le 3e en fonction du 1er et du 2e.

J'ai bien regardé la question posée plus tôt pour des listbox mais je
ne peux rien faire pour les combobox.

Voici donc le code (il est à noté que mon fichier contient 6000 lignes
(A:K) car j'ai l'erreur Dépassement) :

Option Explicit
Public L As Integer
Dim tabtemp As Integer
Dim myr As Range
Dim that As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim Tableau As Variant
Set myr = Range("Inventaire!A2:a" & Range("A35000").End(xlUp).Row)
For i = 1 To myr.Count
ComboBox1.AddItem myr(i)
Next i
End Sub
Private Sub ComboBox1_Click()
Dim m As Integer
Dim c As Range, lst As Range, j As Long, k As Long
Set lst = myr(ComboBox1.ListIndex + 1)
Do While that.Count > 0
that.Remove 1
Loop
On Error Resume Next
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
ComboBox2.Clear
For j = 1 To that.Count
ComboBox2.AddItem that(j)
Next j
ComboBox3.Clear
For k = 1 To that.Count
ComboBox3.AddItem that(k)
Next k

With Worksheets("Inventaire")
m = .Range("a5000").End(xlUp).Row
tabtemp = .Range("A2:k" & m).Value
End With

For m = 1 To UBound(tabtemp, 1)
If tabtemp(m, 1) = CLng(ComboBox3.Value) Then
TextBox1.Value = tabtemp(m, 1)
TextBox2.Value = tabtemp(m, 2)
TextBox3.Value = tabtemp(m, 3)
TextBox4.Value = tabtemp(m, 4)
TextBox5.Value = tabtemp(m, 5)
TextBox6.Value = tabtemp(m, 6)
TextBox7.Value = tabtemp(m, 7)
TextBox8.Value = tabtemp(m, 8)
End If
Next m

End Sub

Quelqu'un peut corriger les erreurs ?

MERCI















Avatar
LSteph
Bonjour François,

Il faut donc enlever les doublons
Il faut surtout complèter,

tu ne peux pas créer une liste permettant de repèrer des éléments s'ils ne
sont pas référencés.

j'aimerai tout de même connaître la procédure des 3 combobox pour une
utilisation dans un autre fichier.


***Alors d'abord explication de pourquoi plusieurs listes plusieurs
critères:

Tout dépendra des données à traiter, pour reprendre l'exemple de l'autre fil
duquel tu voulais t'inspirer:
on a les noms en colonneA des régions en Ligne1 et des départements en
données verticalement sous chaque région.
Dans la ligne1, les régions sont uniques dans les données les départements
apparaissent plusieurs
fois à raison des noms en colonne1.
Le but était donc de lister les trois régions dans le listbox1 et sur
évènement click sur une valeur de
listbox1 de décliner sans doublons en listbox2 les départements..
ensuite la propriété controlsource de la listebox2 renvoie le dept choisi
dans une cellule de la feuille.
Après la Mise en forme conditionnelle fait ressortir les noms concernés.

Pour avoir un ensemble avec trois listes,
il suffirait que l'on ait à gèrer une troisième dimension par exemple
Domaine1,...Domaine3,Domaine4 ceci suppose que l'on ait probablement des
feuilles distinctes pour chaque entité,
donc pour faire un userform correspondant une première liste distinguerait
les onglets ,
la seconde les régions dans la feuille concernée, la troisième les
départements.

***C'est pourquoi je te demandais des précisions sur les données à traiter,
maintenant je commente le bout de code dont tu t'étais inspiré:

Dim myr As Range
Dim that As New Collection

'définir en haut les variables à utiliser probablement dans plusieurs sub
'myr sera la plage des régions
'that collectera les départements

Private Sub UserForm_Initialize()
Dim i As Integer
Set myr = Range("feuil1!b1:d1")
'ici on repèrepar la variable les régions
'que l'on met en liste
For i = 1 To myr.Count
ListBox1.AddItem myr(i)
Next i
'on boucle l'ajout de chaque item
End Sub

'**après il faut que la liste serve
Private Sub ListBox1_Click()
Dim c As Range, lst As Range, j As Long
Set lst = myr(ListBox1.ListIndex + 1)
'on récupère l'adresse correspondant à l'élément sélectionné
Do While that.Count > 0
that.Remove 1
Loop
'on vide d'abord la collection
'cela sert pour la réutiliser sans y ajouter
On Error Resume Next
'on fait passer à la suite en cas d'erreur
'c'est ce qui va éviter les doublons
For Each c In Range(lst.Offset(1, 0), _
Cells(65536, lst.Column).End(xlUp)).Cells
that.Add c, CStr(c)
Next c
'la boucle stocke depuis la cellule situé juste en dessous de lst
'et jusqu'à celle rencontrée en premier si l'on remote de 65536

'L'utilisation d'une collection avec la clé Cstr(c)
' génère ici une erreur si doublon
'grâce à resume next il sera ignoré et non ajouté

ListBox2.Clear
For j = 1 To that.Count
ListBox2.AddItem that(j)
Next j
' on vide liste2 et cette denière boucle
' l'alimente avec la collection
End Sub
'******


J'espère que cela t'aidera.

A bientôt.

lSteph

Avatar
François
Bonjour LSteph,

Les données à traités sont en A, B et C (pour les combobox). La Combobox1
cherche les données en A2:A, Combobox2 en B2:B et Combobox3 en C2:C.

En sélectionnant un numéro (ex. : C1a, les données en D, E, F, G, H, I, J et
K s'affiche dans le Userform. Je pourrais ainsi compléter certains champs
(I, J et K) et ajouter ces informations dans la liste (donc aucune
modification possible pour les colonnes A2:H) avec avec le bouton Ajouter à
l'inventaire.

Serait-il préférable que je mette les possibilités du Combobox1 dans une
feuille caché ? et de même pour les deux autres et ainsi éviter les doublons
?

Merci.
Avatar
LSteph
Bonjour François,

Si le but est de remplir des enregistrements,
il y a une solution simple:
il faut toutefois que pour chaque colonne de ta base
tu aies un titre distinct et pas de fusions.
Données grille devrait alors faire ton affaire.

Sinon, quoique ne voyant pas encore bien sur quoi déboucher,
j'ai peut-être une idée en utilisant vide en A comme si c'était une
catégorie,
qui d'ailleurs est la plus répandue dans cettecolonne.
Je regarde cela quand j'aurais un moment, ce soir probablement.
Là c'est une autre heure...!!

A+

lSteph

"François" a écrit dans le message de news:
frhQe.1324$A%
Bonjour LSteph,

Les données à traités sont en A, B et C (pour les combobox). La Combobox1
cherche les données en A2:A, Combobox2 en B2:B et Combobox3 en C2:C.

En sélectionnant un numéro (ex. : C1a, les données en D, E, F, G, H, I, J
et K s'affiche dans le Userform. Je pourrais ainsi compléter certains
champs (I, J et K) et ajouter ces informations dans la liste (donc aucune
modification possible pour les colonnes A2:H) avec avec le bouton Ajouter
à l'inventaire.

Serait-il préférable que je mette les possibilités du Combobox1 dans une
feuille caché ? et de même pour les deux autres et ainsi éviter les
doublons ?

Merci.





1 2