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

2 réponses

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