[RESOLU] Filtrer des données dans une feuille par combobox... Help

jozerebel

XLDnaute Occasionnel
Salut le Fofo et joyeux 14 juillet!

Je suis sur un USF qui me pose pas mal de pb...

Après l'aide de Modeste, j'ai pu avancer, mais là, je bloque de nouveau...

Dans mon USF, j'ai plusieurs combobox qui me permettent de choisir les critères de filtres d'une feuille de mon classeur. Je précise que les combobox ne sont pas en cascade, c'est à dire que je prends, dans la feuille non filtrée, les valeurs uniques des villes et les propose dans le combo1, puis les valeurs uniques des gir et les propose dans le combo2... : Je ne propose pas les gir disponibles en fonction de la ville choisie, etc... En effet, l'utilisateur peut utiliser les combos dans le sens qu'il veut et je n'ai pas su gérer ça en vba (il peut choisir le gir, puis la ville, puis l'hébergement, et même laisser une ou plusieurs combo vide(s), ou bien la ville, puis l'hébergement,puis le Gir...).

Bon, je filtre grâce à ce code:

If Me.gir.Value <> "" Then


Sh.Range("$A$1:$AD$" & nbUtil + 1).AutoFilter Field:=5, Criteria1:=Me.gir.Value
End If

If Me.ville.Value <> "" Then

Sh.Range("$A$1:$AD$" & nbUtil + 1).AutoFilter Field:=7, Criteria1:=Me.ville.Value

End If

If Me.hgt.Value <> "" Then

Sh.Range("$A$1:$AD$" & nbUtil + 1).AutoFilter Field:=6, Criteria1:=Me.hgt.Value
End If

etc...


Le problème, c'est que quand aucune donnée ne correspond au filtre, Excel pédale dans la semoule jusqu'à mettre "Ne répond pas"... J'ai comme l'impression qu'il essaie, par exemple, d'imposer une valeur au filtre 2 qui ne serait pas proposée par le filtre auto de la feuille...

Une idée pour m'aider?

D'avance merci! :confused:
 
Dernière édition:

jozerebel

XLDnaute Occasionnel
Re : Filtrer des données dans une feuille par combobox... Help

Bon, très costaud ce code....

Je crains ne pouvoir l'appliquer... par manque de connaissances et compétences...

Alors, j'essaie de détourner le pb...

N'y a -t-il pas un moyen, avant de lancer l'autofilter de vérifier si la valeur choisie dans le combobox est présente dans les éléments filtrés de la colonne de la feuille de calcul?

ça éviterait de me lancer dans la reconstruction totale de mon code...

D'avance merci pour votre aide.
 

Dranreb

XLDnaute Barbatruc
Re : Filtrer des données dans une feuille par combobox... Help

Rassurez vous, ce n'est costaud qu'à l'intérieur, mais facile à utiliser.
Joignez votre classeur, et je l'équiperai des modules de services nécessaires les plus récents.
Remarquez, j'espère que vos filtres ne sont pour vous qu'un moyen d'arriver à quelque chose que vous ne précisez pas, mais que l'utilisation d'un ComboBoxLiés n'implique plus, et même ne permet pas, pour ranger par exemple dans une ListBox toutes les lignes qui correspondent à l'ensemble des choix effectués dans les ComboBox.
 
Dernière édition:

jozerebel

XLDnaute Occasionnel
Re : Filtrer des données dans une feuille par combobox... Help

Salut Danreb,

Merci pour ton aide.

Il faut que je retravaille mon fichier pour pouvoir le poster car bcp de données confidentielles, y compris parfois dans le code...

Concernant les combo en cascade, il s'agit de filtrer une feuille de calcul et d'afficher dans un autre combo les résultats du filtre, ce dont je parviens grâce à Modeste et son code:

With Worksheets("Choix")
lig = 0
For Each c In .Range("A1:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible) 'uniquement colonne A
Me.ML_Utilisateur.AddItem (c.Value) 'ajout d'une ligne (colonne 0 de ML_Utilisateur)
For col = 1 To 8 'ajout dans les colonnes
Me.ML_Utilisateur.List(lig, col) = .Cells(c.Row, col + 1)
Next col
lig = lig + 1
Next c
End With

Sheets("Choix").Protect mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingColumns:=True, AllowFiltering:=True
 

jozerebel

XLDnaute Occasionnel
Re : Filtrer des données dans une feuille par combobox... Help

Re Danreb,

Je crois avoir réussi en biaisant.

Avant d'appliquer mon filtre, je teste la présence de la valeur dans la colonne à filtrer. Si Ko, j'affiche une msgbox, si ok, je filtre... ça a l'air de marcher? ton avis svp?

Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig


If Me.gir.Value <> "" Then


Valeur_Test = Me.gir.Value 'La valeur qu'on souhaite tester

DerniereLigne = Cells(65536, 1).End(xlUp).Row 'On va aller trouver la dernière ligne de la colonne 1

'On va voir si on trouve la valeur testée.
Set Lig = Range(Cells(2, 5), Cells(DerniereLigne, 5)).Find(Valeur_Test, LookIn:=xlValues, LookAt:=xlWhole)
If Not Lig Is Nothing Then
'Si on la trouve, alors on filtre

Sh.Range("$A$1:$AD$" & nbUtil + 1).AutoFilter Field:=5, Criteria1:=Me.gir.Value

Else ' Sinon, on affiche un msg

MsgBox ("Pas de résultat avec ces conditions et avec ce Gir. Merci de réinitaliser la recherche!")
End If
End If
 

Dranreb

XLDnaute Barbatruc
Re : Filtrer des données dans une feuille par combobox... Help

Oui. Je confirme quil n'y aurait plus lieu de filtrer. Un comboBoxLiés se comporte un peu vu de l'Userform comme une sorte de super-ComboBox, et renvoie à une procédure évènement, lors du changement de l'un d'eux, une liste des numéros de lignes dans la plage source correspondant aux choix effectués dans tous. Il ne reste plus qu'a les prendre une par une et les ranger presque de la même façon. Encore qu'il vaudrait mieux travailler avec un tableau de variant pris d'un coup de la propriété Value de toute la base de donnée plutôt qu'avec des centaines de Cells: ce serait des centaines de fois plus rapide.

La programmation pour les ComboBox donnera lieu à un code très concis, surtout concentré dans l'Userform_Initialize. Dans celle ci: à peu près 3 ou 4 lignes fixes + 1 par ComboBox à gérer.
Donc la "reconstruction totale de votre code" consisterait en quelque sorte à en supprimer les 3/4 et à le remplacer par … quasiment rien.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Filtrer des données dans une feuille par combobox... Help

Bonjour à tous

jozerebel

Juste pour éclairer ma lanterne
car bcp de données confidentielles, y compris parfois dans le code...
Que peut-il bien y avoir de confidentiel dans ton VBA ???

NB: Seuls les résultats de l'évaluation GIR peuvent être confidentiels, non ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Filtrer des données dans une feuille par combobox... Help

Voici le premier jet. J'ai été obligé de supprimer le CommandButton: mon convertisseur de xlsm en xls met toujours la pagaille dès qu'il y a des contrôles dans des feuilles.
 

Pièces jointes

  • CbxLiésJozerebel.xls
    324.5 KB · Affichages: 137

jozerebel

XLDnaute Occasionnel
Re : Filtrer des données dans une feuille par combobox... Help

Wahoo,

ça a vraiment l'air puissant...

Faut que je teste, que j'adapte et que je comprenne un peu qd mm...

Merci pour tout.

Je te ferai un retour.

Juste pour ma culture, si j'ai plus de 3 combo, j'ai juste à les imbriquer dans le code ci-dessous:

CL.Add Me.gir, "E"
CL.Add Me.ville, "G"
CL.Add Me.hgt, "F"


Rien à faire dans les modules?

Bonne soirée.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 321
Membres
102 862
dernier inscrit
Emma35400