OVH Cloud OVH Cloud

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

2 réponses

1 2
Avatar
LSteph
Bonsoir François,

...j'évoquais sous réserve des titres distincts pour chaque colonne
données grille
ou Données Formulaire
selon ta version
en VBA
activesheet.showdataform

sinon mes modestes recherches de solution par rapport au renseignement du
tableau
aboutissent à ce qu'il serait plus simple selon la même réserve d'utiliser
des filtres automatiques.

Indépendament, je poursuivrais si ton souhait se confirme par un apport de
précisions conséquent sur l'objectif,...
Au fait, il y a des trucs intéressants sur la toile concernant les
collections ..Michel par exemple!
Mais selon ce que j'ai vu ce sont des ressources assez réservées.

En attendant,
voici de quoi renseigner les trois listes sans doublons selon critère de
l'une à l'autre:
'A+

'**********
Option Explicit
'Public L As Integer
'Dim tabtemp As Integer
Dim myr1 As Range
Dim myr2 As Range
Dim myr3 As Range
Dim th1 As New Collection
Dim th2 As New Collection
Dim th3 As New Collection
'***
Private Sub UserForm_Initialize()
Dim i As Long, c As Range
Set myr1 = Range("Inventaire!A2:a" & [65536:65536].End(xlUp).Row)
Do While th1.Count > 0
th1.Remove 1
Loop
On Error Resume Next
For Each c In myr1.Cells
th1.Add c, CStr(c)
Next c
ComboBox1.Clear
For i = 1 To th1.Count
ComboBox1.AddItem th1(i)
Next i
End Sub
'***
Private Sub ComboBox1_Change()
'Dim m As Integer
Dim c As Range, j As Long
Set myr2 = myr1.Offset(0, 1)
Do While th2.Count > 0
th2.Remove 1
Loop
On Error Resume Next
For Each c In myr2.Cells
If c.Offset(0, -1) = ComboBox1 Then
th2.Add c, CStr(c)
End If
Next
ComboBox2.Clear
For j = 1 To th2.Count
ComboBox2.AddItem th2(j)
Next j
End Sub
'***
Private Sub ComboBox2_Change()
Dim c As Range, k As Long

Set myr3 = myr1.Offset(0, 2)
Do While th3.Count > 0
th3.Remove 1
Loop
On Error Resume Next
For Each c In myr3.Cells
If c.Offset(0, -2) & c.Offset(0, -1) = ComboBox1 & ComboBox2 Then
th3.Add c, CStr(c)
End If
Next
ComboBox3.Clear
For k = 1 To th3.Count
ComboBox3.AddItem th3(k)
Next k
End Sub
'***

'lSteph


"LSteph" a écrit dans le message de news:
O4bu%
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.









Avatar
François
Bonsoir LSteph,

WOWWWWW, alors là je te lève mon chapeau. Malgré mes mauvaises demandes et
réponses tu as tout trouvé. C'est exactement cela que je cherchais. Mille
mercis. Il ne me reste que le plus simple à faire soit compléter mes textbox
de mon userform avec les lignes D à K pour avoir toutes les info voulues.

MERCI


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

Bonsoir François,

...j'évoquais sous réserve des titres distincts pour chaque colonne
données grille
ou Données Formulaire
selon ta version
en VBA
activesheet.showdataform

sinon mes modestes recherches de solution par rapport au renseignement du
tableau
aboutissent à ce qu'il serait plus simple selon la même réserve d'utiliser
des filtres automatiques.

Indépendament, je poursuivrais si ton souhait se confirme par un apport de
précisions conséquent sur l'objectif,...
Au fait, il y a des trucs intéressants sur la toile concernant les
collections ..Michel par exemple!
Mais selon ce que j'ai vu ce sont des ressources assez réservées.

En attendant,
voici de quoi renseigner les trois listes sans doublons selon critère de
l'une à l'autre:
'A+

'**********
Option Explicit
'Public L As Integer
'Dim tabtemp As Integer
Dim myr1 As Range
Dim myr2 As Range
Dim myr3 As Range
Dim th1 As New Collection
Dim th2 As New Collection
Dim th3 As New Collection
'***
Private Sub UserForm_Initialize()
Dim i As Long, c As Range
Set myr1 = Range("Inventaire!A2:a" & [65536:65536].End(xlUp).Row)
Do While th1.Count > 0
th1.Remove 1
Loop
On Error Resume Next
For Each c In myr1.Cells
th1.Add c, CStr(c)
Next c
ComboBox1.Clear
For i = 1 To th1.Count
ComboBox1.AddItem th1(i)
Next i
End Sub
'***
Private Sub ComboBox1_Change()
'Dim m As Integer
Dim c As Range, j As Long
Set myr2 = myr1.Offset(0, 1)
Do While th2.Count > 0
th2.Remove 1
Loop
On Error Resume Next
For Each c In myr2.Cells
If c.Offset(0, -1) = ComboBox1 Then
th2.Add c, CStr(c)
End If
Next
ComboBox2.Clear
For j = 1 To th2.Count
ComboBox2.AddItem th2(j)
Next j
End Sub
'***
Private Sub ComboBox2_Change()
Dim c As Range, k As Long

Set myr3 = myr1.Offset(0, 2)
Do While th3.Count > 0
th3.Remove 1
Loop
On Error Resume Next
For Each c In myr3.Cells
If c.Offset(0, -2) & c.Offset(0, -1) = ComboBox1 & ComboBox2 Then
th3.Add c, CStr(c)
End If
Next
ComboBox3.Clear
For k = 1 To th3.Count
ComboBox3.AddItem th3(k)
Next k
End Sub
'***

'lSteph


"LSteph" a écrit dans le message de news:
O4bu%
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