Macro Excel
Buck
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je vous avoue que je suis dans l'impasse pour une macro pour faire du tri dans un fichier excel mais ce tri doit prendre en compte 3 critères différents qui doivent être indépendants, c'est à dire qu'on pourra les choisir indépendement et ensemble :
Exemple : Evenement en Asie n'importe quel secteur
Evenement du secteur Industriel
Evenement en Asie du Secteur industriel
Pour sortir les listes des évènements correspondant, en croisant les données
suivantes
-Date : les évènements doivent être triés par mois
-Par zone géographique : asie,europe,amérique du nord ect...
-Par secteur d'activité : industrie, cosmétique ect...
Sachant que les donnée ce trouve dans des feuilles dans le même document et que je voudrais en fonction des critères obtenir des listes dans une feuille du document.
Je vous remercie d'avance pour votre aide.
Cordialement, Buck
Je vous avoue que je suis dans l'impasse pour une macro pour faire du tri dans un fichier excel mais ce tri doit prendre en compte 3 critères différents qui doivent être indépendants, c'est à dire qu'on pourra les choisir indépendement et ensemble :
Exemple : Evenement en Asie n'importe quel secteur
Evenement du secteur Industriel
Evenement en Asie du Secteur industriel
Pour sortir les listes des évènements correspondant, en croisant les données
suivantes
-Date : les évènements doivent être triés par mois
-Par zone géographique : asie,europe,amérique du nord ect...
-Par secteur d'activité : industrie, cosmétique ect...
Sachant que les donnée ce trouve dans des feuilles dans le même document et que je voudrais en fonction des critères obtenir des listes dans une feuille du document.
Je vous remercie d'avance pour votre aide.
Cordialement, Buck
2 réponses
-
Bonjour,
Ton problème, bien que compréhensible, reste néanmoins fort confus. Il nous faudrait dans ton cas, un classeur exemple pour comprendre de quoi il s'agit. Peux tu nous copier un lien vers un fichier exemple (enregistré sous/97-2003) sans données confidentielles, lien créé précédemment sur : https://www.cjoint.com/ par exemple. -
Voila un lien https://www.cjoint.com/?AFkiXw2Ce3K vous allez tout de suite comprendre mon problème
-
-
-
re-
1- il faut corriger quelque chose dans ton classeur : la liste déroulante "zone géographique" n'a pas EXACTEMENT les mêmes valeurs que les noms des feuilles. Il faudrait changer cela pour que ma macro fonctionne...
Voici donc le code...A tester, re-tester et re-re-tester...Option Explicit Sub FiltrerDonnees() Dim Feuille As Worksheet Dim Nom As String, Secteur As String, Zone As String, MoisCherche As String Dim Mois As Byte, i As Byte Dim Val As Variant Dim Lig As Long, DrLg As Long 'Vidage des données de la feuille "Tableau_De_résultat" With Sheets("Tableau_De_résultat") DrLg = .Cells(65536, 2).End(xlUp).Row If DrLg > 2 Then .Range(.Cells(3, 2), .Cells(DrLg, 8)).ClearContents End If End With 'On stocke les valeurs choisies feuille Sélection dans les variables prévues à cet effet With Sheets("Sélection") Nom = .Cells(3, 2) Secteur = .Cells(6, 2) MoisCherche = .Cells(8, 2) i = 1 For Each Val In Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre") If Val = MoisCherche Then Mois = i Exit For Else i = i + 1 End If Next Zone = .Cells(11, 2) End With 'Choix de la ou des feuilles à filtrer selon si indifférent ou pas If Zone = "Indifférent" Then 'Si indifférent alors on boucle sur toutes les feuilles For Each Feuille In ThisWorkbook.Worksheets 'on exclut de la boucle les feuilles sélection et tableau If Feuille.Name <> "Sélection" And Feuille.Name <> "Tableau_De_résultat" Then With Sheets(Feuille.Name) DrLg = .Cells(65536, 1).End(xlUp).Row For Lig = 2 To DrLg 'si les valeurs contenues dans nos variables sont présentes aux bons endroits If .Cells(Lig, 1) = Nom And Month(.Cells(Lig, 2)) = Mois And .Cells(Lig, 4) = Secteur Then 'alors on copie la plage concernée vers la feuille résultats, en fin de tableau .Range(.Cells(Lig, 1), .Cells(Lig, 7)).Copy Sheets("Tableau_De_résultat").Cells(65536, 2).End(xlUp).Offset(1, 0) End If Next End With End If Next Feuille Else 'si pas indifférent, on ne gère que la feuille concernée par la zone With Sheets(Zone) DrLg = .Cells(65536, 1).End(xlUp).Row For Lig = 2 To DrLg If .Cells(Lig, 1) = Nom And Month(.Cells(Lig, 2)) = Mois And .Cells(Lig, 4) = Secteur Then .Range(.Cells(Lig, 1), .Cells(Lig, 7)).Copy Sheets("Tableau_De_résultat").Cells(65536, 2).End(xlUp).Offset(1, 0) End If Next End With End If End Sub
Ce code a été péniblement testé car pas trop le temps de remplir un classeur avec des données... Donc il comporte certainement des erreurs. Teste le bien et reviens nous dire... -
-
-