VBA - filtrer des données par un userform
Soline
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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 :
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 :
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 !
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 !
A voir également:
- VBA - filtrer des données par un userform
- Fuite données maif - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Supprimer les données de navigation - Guide
- Excel validation des données liste - Guide
3 réponses
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")
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")
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
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
Bonjour
Voir l'indispensable
http://boisgontierjacques.free.fr/
du coté des filtres en cascade
Voir l'indispensable
http://boisgontierjacques.free.fr/
du coté des filtres en cascade
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
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
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/
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/