VBA - filtrer des données par un userform

Fermé
Soline - 10 mai 2018 à 17:09
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 16 mai 2018 à 23:11
Bonjour,

J'ai un fichier Excel avec deux onglets, un "Données" et un "Synthèse"

Je souhaite à l'aide d'un userform trier les valeurs de l'onglet données et les copier dans l'onglet synthèse en les filtrant selon trois combobox : le statut, le secteur et le nom.

Pour l'instant j'ai comme code VBA :


'APPLIQUER UN TRI A L'AIDE DE L'USERFORM
'Définition des variables
Dim compteur As Integer
compteur = 15
dernlign = Sheets("Données").Cells(Rows.Count, 1).End(xlUp).Row



'Faire un tri selon le nom du collaborateur
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 5).Value = liste_nom.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)

compteur = compteur + 1
End If

Next ligne

'Faire un tri selon le secteur
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 3).Value = liste_secteur.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne

'Faire un tri selon le statut
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 6).Value = liste_statut.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne


Le soucis est qu'avec cette boucle for, mes données se copient de façon cumulative, j'ai ainsi d'abord toute les données correspondant au nom saisi dans l'userform qui se copient puis toutes celles correspondant au secteur puis toutes celles correspondant au statut.

Je voudrais que les conditions se cumulent, que ne se copient que les données qui correspondent au secteur ET au statut ET au nom saisis dans le userform.

J'ai bien essayé avec un AND comme :

For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 6).Value = liste_statut.Value and Sheets("Données").Cells(ligne, 3).Value = liste_secteur.Value and Sheets("Données").Cells(ligne, 5).Value = liste_nom.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne



Mais le problème avec cette solution est qu'elle m'impose de remplir toutes les données de l'userform ou j'obtient une copie vide. Cependant je voudrais pouvoir importer des données que, par exemple, qu'en saisissant un secteur dans le userform.

Une idée de comment saisir mon code pour obtenir ce que je recherche ?
Je ne peux malheureusement pas vous fournir mon fichier Excel (meme si j'ai bien conscience que ca serait plus simple) car celui ci contient des données confidentielles.

Je vous remercie par avance pour votre aide !

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 mai 2018 à 18:47
Bonjour

vu la météo dans mon coin.....
proposition
on peut sélectionner 1 ou plusieurs combobox en cochant le ou les checkbox concernés.

l''écriture des résultats dans la synthèse est effectué par une macro parametrée (valeur du combo, sa colonne dans les données (module vba "synthèse")
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
16 mai 2018 à 23:11
Bonjour,

Il me semble que ton formulaire convient très bien pour réaliser un filtre élaboré en alignant sur la feuille tes rubriques de filtrage. Ainsi avec un code très réduit, tu peux faire tes sélections sur chacun des 5 éléments remplis ou vides sans souci

https://www.cjoint.com/c/HEqvgW6KyLl

à toi de nos dire si cela correspond
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mai 2018 à 08:58
Bonjour

Voir l'indispensable
http://boisgontierjacques.free.fr/

du coté des filtres en cascade


-1
Bonjour,

Je vous remercie pour votre réponse et pour ce site où j'ai pu trouver d'autres informations dont j'avais besoin.
Cependant je pense que vous n'avez pas compris mon problème car je ne souhaite pas faire des filtres en cascade dans mon userform.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mai 2018 à 13:29
dont acte....
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 11 mai 2018 à 16:55
on ne peut que faire de hypothèses compte tenu de l'absr,ce de renseignements précis de ta part

par ex: comment sélectionnes tu le ou les combo utiles ? sur le clic du combo

Crées tu une variable regroupant les combos sélectionnés ?
pâr ex:
choix= statut, nom
on suppose que tu as un bouton pour déclencher le processus....

quels sont les libellés des ent^tes de ta base de données utiles colonnes 5 à ??, 8 à 12 etc
le but est de voir si on peut utiliser une technologie sans boucle (ADO) ou pas ?
a propos:
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)) tu es s^re ?

mais tu n'auras au mieux qu'un principe et non une solution

généralement, les demandeurs livrent un extrait du classeur avec des données bidons comme nom1, nom2, nom3, ect
petit effort nécessaire pour avoir une aide bénévole

A toi de voir
0
SolineG Messages postés 1 Date d'inscription vendredi 11 mai 2018 Statut Membre Dernière intervention 11 mai 2018
11 mai 2018 à 17:26
Voici mon fichier
https://www.cjoint.com/c/HElpz36z7gb

Merci de votre aide
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 mai 2018 à 18:52
Bonjour,

vu la météo ce dimanche dans mon coin.....

proposition
on peut sélectionner 1 ou plusieurs combobox en cochant le ou les checkbox concernés.

l''écriture des résultats dans la synthèse est effectué par une macro parametrée (valeur du combo, sa colonne dans les données (module vba "synthèse")

https://mon-partage.fr/f/lTYNoAE0/

0