VBA - filtrer des données avec un userform
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 ligneLe 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 ligneMais 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 !
Salut Soline,
Le plus simple selon moi serait d'utiliser les filtres avancés au travers d'un UserForm pourquoi pas
Du coup pas besoin de code, ou très peu !
A+
Bonjour !
En fait la raison pour laquelle je cherche un code est très simple : il s'agit d'un projet universitaire ^^
Je suis en licence et j'ai des cours de macro et dans ce cadre je dois réaliser un projet avec des codes de macro.
Du coup je tiens à faire fonctionner ce code, est ce possible d'obtenir ce que je cherche ?