Macro Excel

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

2 réponses

  1. Modérateur
    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.
    0
    1. Voila un lien https://www.cjoint.com/?AFkiXw2Ce3K vous allez tout de suite comprendre mon problème
      0
      1. Modérateur
        Effectivement, j'ai vu tout de suite qu'il s'agit d'un fichier Excel >=2007....
        Peux tu stp nous donner un fichier exemple enregistré sous/97-2003. Au format .xls
        0
      2. Modérateur
        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...
        0
      3. j'ai testé ta machine de guerre ! et il y a un petit problème incompatibilité de type 13 mais je vois pas ou ! mon hypothèse serait que cela vient des mois écris en lettres mais bon rien de sur

        En tout cas merci bien pour ton travail,

        Cordialement Buck
        0
      4. Modérateur
        Le petit problème incompatibilité de type 13 te parmet un débogage il me semble. Clic donc voir sur le petit bouton "débogage" et dis nous qu'elle ligne est surlignée de jaune.....
        0