Créer un rapport multi critère avec une macro

Alghorn

XLDnaute Junior
Bonjour le forum,

Je viens vers vous aujourd'hui car je bloque complètement sur un problème. Je m'explique :
J'ai un tableau de rapport incluant plusieurs fournisseurs, plusieurs villes et plusieurs ref.
Je cherche à créer un rapport mensuel avec une macro qui me permettrait d'extraire les données pour chaque fournisseurs (ex : fournisseur TATA / ref 4 / Annecy / nombre) sur le mois en cours et les 3 mois à venir, sur une nouvelle feuille.

Malheureusement j'ai beau prendre le problème dans tous les sens je ne m'en sors pas.
Je vous joins un fichier pour vous donner une idée du tableau initiale, en enlevant quelques données.

Je vous remercie par avance de votre aide.
 

Pièces jointes

  • Essai.xlsx
    5.7 MB · Affichages: 48

gosselien

XLDnaute Barbatruc
Bonjour,

A mon humble avis, je pense que tu aurais du faire une seule colonne avec les dates et par une par mois; c'est bien plus facile ensuite pour regrouper par tcd comme tu veux le faire et...il n'est pas trop tard de le faire.

P.

ps: Je me doute que c'est un exemple mais chaque colonne DOIT avoir un titre :)
ps2: on y arrive avec ton fichier mais bcp moins lisible
 

Pièces jointes

  • Essai.xlsx
    5.3 MB · Affichages: 41

Modeste

XLDnaute Barbatruc
Bonjour,

Je m'ennuyais un peu, alors ...
Je n'ai pas cherché à répondre à la demande de départ. J'ai donc une proposition intermédiaire (si j'ai compris!?)
Deux listes déroulantes en A2 et B2, pour choisir le fournisseur et le mois. Si les deux sont renseignés le récapitulatif est créé (sans les totaux, à ce stade)
... Alghorn verra bien ...
 

Pièces jointes

  • FauxFiltre (Alghorn).xlsm
    5.7 MB · Affichages: 34

Alghorn

XLDnaute Junior
J'aime beaucoup la solution de Modeste ! C'est exactement ce qu'il me faut en fait.
Maintenant j'essai de comprendre la macro pour pouvoir la reproduire par moi même et comprendre comment ajouter une colonne (la 1ère) et dupliquer ce tableau (par exemple sur la colonne E de la feuil3).

Si vous avez des conseils.

En tout cas merci à vous 2 ;-)
 

Alghorn

XLDnaute Junior
Bon décidément je suis bon a jeter à la poubelle :-(
J'ai tenté une adaptation toute bête :
- Dans la feuil3, ajouter une colonne en tête reprenant les infos de la colonne A de la feuill1
- Dans la feuill1, ajouter 2 lignes vide en haut pour que ma 1ère cellule soit en A3
- Renommer mes feuil1 en "Trajectoire" et ma feui3 en "rapport"...

Et comme je suis encore en train de tenter de comprendre le code je ne m'en sors pas.

Je vous remets le fichier en PJ, on ne sait jamais.

Merci encore pour vos lumières.
 

Pièces jointes

  • FauxFiltre (Alghorn).xlsm
    329 KB · Affichages: 20

Modeste

XLDnaute Barbatruc
Bonsoir les agonisants :rolleyes: ... et tous les autres


Alghorn à dit:
Dans la feuill1, ajouter 2 lignes vide en haut pour que ma 1ère cellule soit en A3
... ça j'ai compris!
Alghorn à dit:
Renommer mes feuil1 en "Trajectoire" et ma feui3 en "rapport"
... ça aussi j'ai compris (et ça n'implique aucune modification du code)
Alghorn à dit:
Dans la feuil3, ajouter une colonne en tête reprenant les infos de la colonne A de la feuill1
Euh ... là, par contre, je n'ai rien compris :( L'idéal aurait été d'illustrer dans le nouveau fichier déposé ... mais on n'y trouve qu'une colonne A ... vide (en dehors de son titre évocateur: '1' :confused:).
Deux solutions: tu donnes des explications complémentaires, on ajuste le code et tu essaies de comprendre avec les ajustements, ou alors on commente le code de départ, on te donne l'un ou l'autre indice et tu essaies d'ajuster toi-même.
Dans les 2 cas, il faut reformuler d'abord ton histoire de colonne A: c'est simplement une colonne supplémentaire dans le tableau de départ, sur laquelle il n'y a pas de "filtre" à faire et dont le contenu, pour les enregistrements du fournisseur sélectionné et pour le mois considéré doivent apparaître dans les résultats?
 

Alghorn

XLDnaute Junior
Bon je reconnais... je n'ai pas été très clair :-(
J'ai remis le fichier avec les modifs voulu (en fait je pensais l'avoir fait la 1ère fois mais j'ai du m’emmêler les pinceaux !).
Le voici donc...

Pour éclaircir tout ce bazar, dans la feuille nommée trajectoire, j'ai la colonne A (nommée "1" mais qui en réalité s’appellera "Région"), que je souhaite voire apparaitre dans mon tableau de rapport sous la forme d'une 4ème colonne.
Et c'est là que je coince :-(

Merci encore (et encore, et encore)
 

Pièces jointes

  • Copie de FauxFiltre (Alghorn).xlsm
    329.1 KB · Affichages: 30

Modeste

XLDnaute Barbatruc
Bonjour Alghorn,

M'est avis qu'il reste encore un bout de ton virus: la colonne A n'est garnie que jusqu'en ligne 35 ...

Pour autant que j'aie pu en juger, la proposition ci-dessous semble donner les bons résultats? À vérifier!
Remplacer le code de la feuille Rapport par celui-ci (je te laisse jouer au jeu des sept différences pour comprendre, mais reviens si tu as des questions ... ou s'il y a une erreur!)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B2:C2]) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    If Application.CountA([B2:C2]) <> 2 Then Exit Sub
    tablo = Feuil1.[A4].CurrentRegion
    Dim tablo2()
    col = Application.Match([C2], Feuil1.[A3:Y3], 0)
    [A5].Resize([A4].CurrentRegion.Rows.Count, 4).ClearContents
    For lig = 2 To UBound(tablo)
        If tablo(lig, 13) = [B2] And tablo(lig, col) <> "" Then
            ReDim Preserve tablo2(3, x)
            tablo2(0, x) = tablo(lig, 1)
            tablo2(1, x) = tablo(lig, 5)
            tablo2(2, x) = tablo(lig, 7)
            tablo2(3, x) = tablo(lig, col)
            x = x + 1
        End If
    Next lig
If Not IsEmpty(x) Then [A5].Resize(x, 4) = Application.Transpose(tablo2)
End If
End Sub
 

Alghorn

XLDnaute Junior
Bonjour Modeste,

Merci pour ta réactivité.
Effectivement les résultats sont là :)
J'ai compris pas mal de choses dans le code (particulièrement le positionnement) et du coup j'ai tenté d'appliquer l'exemple au réel.

Depuis le fichier d'exemple, j'ai du ajouter 2 colonnes (en K et L) mais aussi supprimer la colonne C dans la feuil1. J'ai aussi ajouter une ligne en haut. J'ai donc modifié comme suit :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B2:C2]) Is Nothing Then
  If Target.Count > 1 Then Exit Sub
  If Application.CountA([B2:C2]) <> 2 Then Exit Sub
  tablo = Feuil1.[A5].CurrentRegion
  Dim tablo2()
  col = Application.Match([C2], Feuil1.[A5:Z5], 0)
  [A5].Resize([A4].CurrentRegion.Rows.Count, 4).ClearContents
  For lig = 2 To UBound(tablo)
  If tablo(lig, 14) = [B2] And tablo(lig, col) <> "" Then
  ReDim Preserve tablo2(3, x)
  tablo2(0, x) = tablo(lig, 1)
  tablo2(1, x) = tablo(lig, 4)
  tablo2(2, x) = tablo(lig, 6)
  tablo2(3, x) = tablo(lig, col)
  x = x + 1
  End If
  Next lig
If Not IsEmpty(x) Then [A5].Resize(x, 4) = Application.Transpose(tablo2)
End If
End Sub

Je tombe malgré tout sur une erreur au niveau de la ligne suivante sans que je n'arrive à la résoudre.
If tablo(lig, 14) = [B2] And tablo(lig, col) <> "" Then

J'ai loupé un truc mais quoi ?

Je t'ai remis le fichier updaté au cas ou...

Merci de ton aide.
 

Pièces jointes

  • Copie de FauxFiltre (Alghorn).xlsm
    489.5 KB · Affichages: 19
Dernière édition:

Discussions similaires

  • Question
Microsoft 365 XLOOKUP
Réponses
8
Affichages
426

Statistiques des forums

Discussions
312 332
Messages
2 087 362
Membres
103 528
dernier inscrit
maro