Macro Excel

Buck -  
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
A voir également:

2 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
Utilisateur anonyme
 
Voila un lien https://www.cjoint.com/?AFkiXw2Ce3K vous allez tout de suite comprendre mon problème
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
Utilisateur anonyme
 
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
Utilisateur anonyme
 
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
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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