Recherche avec Différents Modes et plusieurs critères.

Fermé
laumasyf Messages postés 24 Date d'inscription vendredi 11 janvier 2013 Statut Membre Dernière intervention 24 janvier 2014 - Modifié par pijaku le 17/01/2014 à 13:09
Kusco Messages postés 466 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 15 décembre 2014 - 30 janv. 2014 à 21:19
Bonjour,

Je suis novice en programmation VBA.
Cela fait plusieurs jours que je réfléchis à un problème que je fini par porter à votre niveau pour solliciter votre aide.
Je voudrais que vous m'aidiez à finir d'écrire les codes ci-dessous:
Celui plus haut me sert à afficher le résultat de la recherche faite par celui plus bas.

Private Sub RecordsComboBox_Change()
  Me.ResultListBox.Clear
  Dim Ctrl As Control
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "TextBox" Then Ctrl.Text = ""
    Next Ctrl
  For Each cel In pl
    If CStr(cel.Value) = CStr(Me.RecordsComboBox.Value) Then
      nl = cel.Row
      With ResultListBox
        .AddItem Sheets("Enregistrement").Cells(cel.Row, 3)
        .List(.ListCount - 1, 1) = Sheets("Enregistrement").Cells(nl, 5)
        .List(.ListCount - 1, 2) = Sheets("Enregistrement").Cells(nl, 8)
        .List(.ListCount - 1, 3) = nl
      End With
    End If
  Next cel
  If Me.ResultListBox.ListCount = 1 Then Me.ResultListBox.ListIndex = 0
End Sub


Private Sub obG2()
Dim col As Integer
Dim dico As Object
Dim tbl As Variant
Dim i As Variant
Dim j As Variant
Dim temp As Variant
  UserForm1.RecordsComboBox.Clear
  If OptionButton3.Value Then
    col = 3
                         Else
    If OptionButton4.Value Then col = 5 Else: col = 4
  End If
With Sheets("Enregistrement")
    Set pl = .Range(.Cells(3, col), .Cells(Application.Rows.Count, col).End(xlUp)) 'définit la plage pl
End With
Set dico = CreateObject("scripting.dictionary")
For Each cel In pl
    dico(cel.Value) = ""
Next cel
tbl = dico.keys
For i = 0 To UBound(tbl, 1)
For j = 0 To UBound(tbl, 1)
        If tbl(i) < tbl(j) Then
            temp = tbl(i)
            tbl(i) = tbl(j)
            tbl(j) = temp
        End If
    Next j
Next i
UserForm1.RecordsComboBox.List = tbl
End Sub



Pour la Recherche, j'ai trois choix de sélection (OptionBouton3, OptionBouton4, OptionBouton7).
Je voudrais pour chaque opération de ma recherche, ajouter 3 critères qui seront sélectionnés dans des zones modifiables que j'ai nommées (PeriodeComboBoxe, AnneeComboBox et TypeComboBox). Sachant qu'à défaut de la sélection par dans les Zones modifiables, chacune de leur fenêtre serait vide.

Cordialement

Année => 2014, 2013, 2012, ........
Période => Janvier, Février, Mars, .......
Type => Type de Produit

5 réponses

Kusco Messages postés 466 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 15 décembre 2014 336
16 janv. 2014 à 15:13
Avec quelque chose comme ça est ce que ça t'aiderait pour ta recherche et tes trois boutons ?

Private Sub OptionBouton3_Click() 'Quand tu cliques sur le bouton 3 cela devient visible

PeriodeComboBoxe.Visible = True
AnneeComboBox.Visible = True
TypeComboBox.Visible = True

End Sub



Private Sub UserForm_Initialize() 'A l'ouverture du UserForm, les Comboxbox ne sont pas visibles

PeriodeComboBoxe.Visible = False
AnneeComboBox.Visible = False
TypeComboBox.Visible = False

End Sub

Ou bien ce n'est pas ça que tu voulais dire ?
0
laumasyf Messages postés 24 Date d'inscription vendredi 11 janvier 2013 Statut Membre Dernière intervention 24 janvier 2014
17 janv. 2014 à 00:35
Bonjour Kusco,

Mon problème ne se situe pas au niveau de la visibilité des Zones modifiables (PeriodeComboBox, AnneeComboBox et TypeComboBox).
J'ai créé un Cadre (Frame) qui regroupe tous ces boutons qui n'apparaissent que lorsqu'on voudrait faire une recherche.
Pour la recherche, nous avons différents critères, tels expliqués ci-dessous:

Lot_1
1 - OptionButton3 est le choix de tri par commande
2 - OptionButton4 est celui par Demande d'Approvisionnement
3 - OptionButton7 celui par fournisseur.

Lot_2
A - AnneeComboBox
B - PeriodeComboBox
C - typeComboBox

Quelque soit le choix du Lot_1, La recherche est faite selon les critères A, B et C, à la fois, de manière à avoir comme résultat:

Choix 1 (OptionButton3): La liste des Fournisseurs ayant souscrit pour cette commande au cours de l'année (A), de la Période (B) et selon les type de produit.

Choix 2 (OptionButton4): La liste des Commandes passées au fournisseur sélectionné, au cours de l'année (A), de la Période (B) et selon le type de produit.

Choix 3 (OptionButton7): La liste des Fournisseurs ayant souscrit pour cette demande d'Approvisionnement, au cours de l'année (A), de la Période (B) et selon le type de produit.

Avec le code dans mon message, je suis arrivé à affiché mes résultats selon chacun des critères du lot_1.
Je n'arrive pas encore à trouver la solution pour croiser les critères du Lot_1 avec le Lot_2.

Merci pour ton intéressement à mon problème.
J'espère que nous trouverons la solution.

Cordialement
0
Kusco Messages postés 466 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 15 décembre 2014 336
17 janv. 2014 à 11:35
Ah d'accord je vois mieux mais j'ai encore un peu de mal à concrétiser le système.
Pourrais-tu m'envoyer ton fichier ? (par message privé s'il est confidentiel)
Ce site permet facilement l'envoie https://www.cjoint.com/

Je verrais au maximum ce que je peux faire. Je crois avoir eu le même problème mais cela dépends de la structure de ton fichier.
0
laumasyf Messages postés 24 Date d'inscription vendredi 11 janvier 2013 Statut Membre Dernière intervention 24 janvier 2014
17 janv. 2014 à 15:00
Bonjour Kusco,

Lien: https://www.cjoint.com/?0Aro7uE6oau

Ci-joint le fichier, espèrant que cela puis-ce mieux nous éclairer

A bientôt

Cdlt
0
Kusco Messages postés 466 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 15 décembre 2014 336
22 janv. 2014 à 10:13
Merci je viens de regarder ton fichier (désolé j'étais déconnecté d'internet ces derniers jours).

Si j'ai bien compris, c'est au niveau de "Private Sub ResultListBox_Click()" que tu ajoute dans ta ResultListBox tes différents éléments.

Pourquoi ne va filtrer les éléments de manière à n'ajouter que les champs de recherche un peu de cette manière :

'Tu ajoute ceci dans ta boucle de manière que cela vérifie chacun de ces trois éléments à chaque fois pour chaque ligne
  
If PeriodeComboBox = Cells(nl, 2) And AnneeComboBox = Cells(nl, 1) And TypeComboBox = Cells (nl, 9) Then
'La tu places ton ajout dans la liste
Else
'Rien
End if


Et il faut aussi que tu inclues quelque chose au cas où tu laisses les champs vide.

J'espère avoir pu t'aider, sinon n'hésite pas à revenir vers moi !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laumasyf Messages postés 24 Date d'inscription vendredi 11 janvier 2013 Statut Membre Dernière intervention 24 janvier 2014
24 janv. 2014 à 14:46
Bonjour Kusco,

J'ai mis du temps à vous répondre parce que je tenais à faire mon maximum pour m'en sortir, mais je ne suis pas arrivé à trouver où insérer les codes que vous m'avez recommandé.
Excusez-moi d'être aussi embêtant.
Je fais mes débuts en VBA.
Merci pour votre réponse.

Cdlt
0
Kusco Messages postés 466 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 15 décembre 2014 336
30 janv. 2014 à 21:19
Bonjour laumasyf,

Excuse moi de ne pas avoir répondu avant non plus, je n'avais pas eu l'occasion de retourner sur le forum non plus.
Cherche tu toujours ta réponse ? Je te fais ça demain sans faute !

Ne t'excuse pas, on est là pour apprendre :)
Bonne soirée !
0