Bonjour j'ai un usf avec plusieurs combo(s).
Actuellement mes combo(s) font références à une collone d'une feuiille donnée, avec le code suivant dans mon userform_initialize que j'ai trouvé sur le forum et adapté à mes besoins:
Jusque la tout va bien. Etant de nature à vouloir toujours parfaire le travail et simplifier la tâche aux futurs utilisateurs je souhaiterai qu'en fonction du choix fait sur la combobox3 et 4, les combobox, 5, 6 aient des values défférentes.
J'ai bien vu plusieurs pistes sur des sujets analogue mais j'ai du mal à le transcrire.
Un code dans l'initialize du genre:
De même qu'il y a 4 choix différents faisant référence à des range précises pour combobox4.
Si je ne suis pas assez clair:
combobox3 détermine la colonne des données (il y en a 8 possible)
combobox4 déterminie la plage des lignes de cette colonne (il y en a 4 possible)
Et pour bien compliquer certaine cellules sont vides dans certaines colonnes. donc ne devrait pas apparaitre dans les combobox5 et 6.
Ni a-t-il pas un code plus simple que de reprendre toutes les possibilité une à une et faire un code interminable? Du genre "Or".
Je vous joint le tableau des données que je voudrais dans mes combo.
Merci d'avance pour vos conseils et pistes de travail.
Actuellement mes combo(s) font références à une collone d'une feuiille donnée, avec le code suivant dans mon userform_initialize que j'ai trouvé sur le forum et adapté à mes besoins:
Private Sub UserForm_Initialize()
DateBox1.Value = Format(Now(), "dd/mmm/yyyy") 'met sous format français la date du jour dans le textbox date.
With UserForm1
.startUpPosition = 3
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With
ComboBox1.Clear 'conducteur
lgderlig = Worksheets("civil").Range("d" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox1.RowSource = "civil!d1:d" & lgderlig
End If
ComboBox2.Clear 'opérateur
lgderlig = Worksheets("civil").Range("d" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox2.RowSource = "civil!d1:d" & lgderlig
End If
ComboBox3.Clear 'ligne
lgderlig = Worksheets("item").Range("a" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox3.RowSource = "item!a1:a" & lgderlig
End If
ComboBox4.Clear 'arrêt
lgderlig = Worksheets("item").Range("c" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox4.RowSource = "item!c1:c" & lgderlig
End If
ComboBox5.Clear 'causes
lgderlig = Worksheets("item").Range("d" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox5.RowSource = "item!d1:d" & lgderlig
End If
ComboBox6.Clear 'nature
lgderlig = Worksheets("item").Range("e" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox6.RowSource = "item!e1:e" & lgderlig
End If
ComboBox7.Clear 'durée
lgderlig = Worksheets("item").Range("b" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox7.RowSource = "item!b1:b" & lgderlig
End If
ComboBox8.Clear 'Agent de Maintenance
lgderlig = Worksheets("item2").Range("c" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox8.RowSource = "item2!c1:c" & lgderlig
End If
ComboBox9.Clear 'Type de Panne
lgderlig = Worksheets("item2").Range("e" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox9.RowSource = "item2!e2:e" & lgderlig
End If
ComboBox12.Clear 'Durée panne
lgderlig = Worksheets("item").Range("b" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox12.RowSource = "item!b1:b" & lgderlig
End If
ComboBox10.Clear 'Cause
lgderlig = Worksheets("item2").Range("F" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox10.RowSource = "item2!f2:f" & lgderlig
End If
End Sub
Jusque la tout va bien. Etant de nature à vouloir toujours parfaire le travail et simplifier la tâche aux futurs utilisateurs je souhaiterai qu'en fonction du choix fait sur la combobox3 et 4, les combobox, 5, 6 aient des values défférentes.
J'ai bien vu plusieurs pistes sur des sujets analogue mais j'ai du mal à le transcrire.
Un code dans l'initialize du genre:
If combobox3.value= "ligne 1" And Combobox4.value= "Pannes" Then
ComboBox5.Clear 'causes
lgderlig = Worksheets("item3").Range("c" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox5.RowSource = "item3!c3:c62" & lgderlig
Else If
If combobox3.value= "ligne 2" And Combobox4.value= "Pannes" Then
ComboBox5.Clear 'causes
lgderlig = Worksheets("item3").Range("d" & Cells.Rows.Count).End(xlUp).Row
If lgderlig > 1 Then
ComboBox5.RowSource = "item3!d3:d62" & lgderlig
Else If ' et ainsi de suite pour toute les "Lignes" Il y en a 8
De même qu'il y a 4 choix différents faisant référence à des range précises pour combobox4.
Si je ne suis pas assez clair:
combobox3 détermine la colonne des données (il y en a 8 possible)
combobox4 déterminie la plage des lignes de cette colonne (il y en a 4 possible)
Et pour bien compliquer certaine cellules sont vides dans certaines colonnes. donc ne devrait pas apparaitre dans les combobox5 et 6.
Ni a-t-il pas un code plus simple que de reprendre toutes les possibilité une à une et faire un code interminable? Du genre "Or".
Je vous joint le tableau des données que je voudrais dans mes combo.
Merci d'avance pour vos conseils et pistes de travail.
Pièces jointes
Dernière édition: