[Aide_débutant] Filtrage avec 2 combobox

bonjour a tous,

j'apprend a codé sous excel ( depuis hier ), j'ai un niveau très très débutant.

pour me motivé et pas abandonné, j'essaye de faire un programme de GMAO asser simple.

pour le programme, je pioche des bout de code par-ci par-la sur internet et essaie de les adapter a mon programme. cela me permet surtout de voir les fonction et comment sa marche.

j'essaie aussi d'aller au plus simple dans le code, cepandant je bloque sur une fonction.

j'aimerais avoir 2 combobox, dont une qui affiche selon le choix de combobox 1.

j'ai trouver un code, mais n'arrive pas a l'inclure dans ma page de code.

je vous transmet le fichier qui marche ( recup internet ) ainsi que le mien.

je vous remercie vraiment.

[EDIT1] le code je l'ai déjà inclue dans ma page "ajout_panne" tous en bas, si j'ai bien compris il crée un dictionnaire pour filtrer les valeurs

malgrer que cela soit surement super basic pour vous, merci de me dire aussi si j'ai bien fais les chose =) notamment pour les autres feuilles

12test-seb.xlsm (35.30 Ko)

Bonjour Oneil, bonjour le forum,

L'utilisation d'un dictionnaire permet d'afficher une liste sans doublon. Donc pas utile pour alimenter la ComboBox ligne

C'est Ok pour la seconde ComboBox machine. Mais tu n'as pas besoin de filtrage. Pour cela il te faudrait avoir plusieurs machines par ligne dans ton tableau. Tu pourrais alors filtrer, par exemple, les machines de la ligne 3. Mes telles que sont pésentées les données le filtrage n'est pas viable.

Pas compris non plus ce que tu a voulue dire avec :

 Me.machine.List = Split(dico(Me.Famille.Value), "|")

Il faut que tu revoie le tuto de Jacques sur les Dictionary...

salut, merci de ta réponse rapide.

pour le code, j'ai utiliser un code dispo sur le net. celui en piece jointe daillieurs .

moi ce que j'aimerais faire, c'est que lorsque je selectionne 'ligne 1 ' dans la combobox, j'ai toutes les machines qui apparaissent dans la combo machine.

je vais regarder le tuto dont tu me parle.

peut être que le code que j'ai pris sur le net n'est pas le plus adapter a ma situation.

Re,

Mais, quelque soit la ligne sélectionnée, tu voudras quand même la liste de toutes les machines ! Non ?

Donc pas besoin de filtre. Utilise à l'initialisation de l'UserForm, le même code pour alimenter ligne en l'adaptant pour machine.

J'ai éditer mes cellule avec les machines pour être plus claire, car je me comprend dans mes feuilles, mais comme sa, c'est plus claire pour vous

11test-seb.xlsm (33.87 Ko)

non, je veux pas toutes les machines,

si je selectionne dans la combobox "ligne 1" , je veux toutes les machines de la ligne 1 dans la combobox machine

"ligne 2" toutes celle de la ligne 2

la perceverance paye.

voici un code qui marche a peu pres =)

Set f = Sheets("Donnee_techniques")

Set mondico = CreateObject("Scripting.Dictionary")

For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)

mondico(c.Value) = ""

Next c

Me.ligne.AddItem "ligne"

For Each i In mondico.keys

Me.ligne.AddItem i

Next

Me.ligne.ListIndex = 0

End Sub

Private Sub ligne_Change()

Set f = Sheets("Donnee_techniques")

Me.machine.Clear

For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)

If c = Me.ligne Or Me.ligne = "ligne" Then

Me.machine.AddItem c.Offset(0, 1)

End If

Next c

Me.machine.ListIndex = 0

Re,

En pièce jointe ton fichier modifié :

Le code :

Dim f As Worksheet
Dim D As Object
Dim TV As Variant

Private Sub UserForm_Initialize()
Dim I As Integer
Set f = Sheets("Donnee_techniques")

'liste_déroulante_Heure-d'arret
Me.heure_arret.List = f.Range("D2:D" & f.Range("D" & Application.Rows.Count).End(xlUp).Row).Value
'liste_déroulante_technicien
Me.tech1.List = f.Range("C2:C" & f.Range("C" & Application.Rows.Count).End(xlUp).Row).Value
Me.tech2.List = f.Range("C2:C" & f.Range("C" & Application.Rows.Count).End(xlUp).Row).Value
Me.tech3.List = f.Range("C2:C" & f.Range("C" & Application.Rows.Count).End(xlUp).Row).Value
TV = f.Range("A1").CurrentRegion
Set D = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
    D(TV(I, 1)) = ""
Next I
Me.ligne.List = D.keys
End Sub

Private Sub ligne_click()
Dim I As Integer

machine.Clear
For I = 2 To UBound(TV, 1)
    If TV(I, 1) = ligne.Value Then machine.AddItem TV(I, 2)
    Next I
End Sub

Private Sub machine_click()
Dim I As Integer

For I = 2 To UBound(TV, 1)
    If TV(I, 1) = ligne.Value And TV(I, 2) = machine.Value Then
        'le code ici
    End If
    Next I
End Sub

Private Sub ajout_Click()
Dim L As Integer

If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
    L = Sheets("pannes").Range("a65536").End(xlUp).Row + 1
    Range("A" & L).Value = TextBox1
    Range("B" & L).Value = TextBox2
    Range("C" & L).Value = heure_arret
    Range("D" & L).Value = ligne
    Range("E" & L).Value = machine
    Range("F" & L).Value = TextBox4
    Range("G" & L).Value = TextBox5
    Range("H" & L).Value = tech1
    Range("I" & L).Value = tech2
    Range("J" & L).Value = tech3
End If
End Sub

'formatdate dans la textbox
Private Sub TextBox1_Change()
Dim Valeur As Byte

TextBox1.MaxLength = 8 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
End Sub

'Ensuite pour vérifier que c'est bien une date qui a été saisie
Private Sub CommandButton1_Click()
If Not IsDate(TextBox1) Then
    MsgBox "Format de date incorrect JJMMAA sans / ni ."
    TextBox1 = ""
    Exit Sub '?
End If
End Sub

Le fichier :

18oneil-v01.xlsm (30.65 Ko)

merci, je suis arrivé a la meme chose que toi, sauf que toi tu a l'avantage de laisser les champs vide, tant que rien n'est selectionnée, moi je n'y suis pas arrivé .

bien jouer

serais-tu pourquoi quand j'ajouter des pannes, ma feuille de panne, ne vas pas au delà de la ligne 5 ?

Re.

Je n'utilise pratiquement jamais les tableaux et le VBA car le code pour déterminer la dernière ligne est plus pénible. Essaie comme ça (à condition que la date soit systématiquement renseignée à l'ajout) :

Private Sub ajout_Click()
Dim L As Integer
Dim P As Worksheet

Set P = Sheets("Pannes")
If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
    'avec des les tableaux déterminer la dernière ligne est plus pénible. Je préfère cette solution
    L = IIf(P.Range("A2").Value = "", 2, P.Range("A1").End(xlDown).Row + 1)
    'toujours renvoyer le format américian dans une cellule et définir le format voulu
    'dans la cellule pour éviter les inversions jour/mois
    P.Range("A" & L).Value = Format(TextBox1.Value, "yyyy/mm/dd")
    P.Range("B" & L).Value = TextBox2.Value
    P.Range("C" & L).Value = heure_arret.Value
    P.Range("D" & L).Value = ligne.Value
    P.Range("E" & L).Value = machine.Value
    P.Range("F" & L).Value = TextBox4.Value
    P.Range("G" & L).Value = TextBox5.Value
    P.Range("H" & L).Value = tech1.Value
    P.Range("I" & L).Value = tech2.Value
    P.Range("J" & L).Value = tech3.Value
End If
End Sub

merci bien, je vais manger, je travail de nuit cette semaine.

sujet résolue.

A+ pour de nouvelle demande. ( je deviendrais pas un pro, mais je serais me débrouiller un peu )

merci a la communauter =)

Rechercher des sujets similaires à "aide debutant filtrage combobox"