Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 consolidation plusieurs feuilles

  • Initiateur de la discussion Initiateur de la discussion gds77
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gds77

XLDnaute Occasionnel
Bonjour à vous tous,
Je vais essayer d'être claire😎. Sur le fichier joint je dispose de 3 feuilles pour mes banques et pour lesquelles je souhaiterais sur la feuille synthèse consolider les colonnes G "montant" et les colonnes F "catégorie" en fonction des années 2017 et 2018. Mon point d'entrée serait la colonne E "émetteur".

Merci d'avance pour votre aide.😉🙂
 

Pièces jointes

Bonjour
Je te propose une manière qui te permettra d'aller plus loin dans tes synthèses.
Dans la feuille consolidation , j'intègre toutes les données de toutes les banques plus une formule qui donne l'année.
Dans la feuille Tcd un tableau croisée que tu peux modifier, tu peux aussi ajouter d'autres tableaux dans cette feuille
Tu lances la macro consolidation.
 

Pièces jointes

Bonjour Sousou,
Merci pour cette super proposition, mais mon employeur aura accès a ce document, et pour lui expliquer le fonctionnement impossible 😕moi même trop novice sur ce sujet. C'est pourquoi, je pensais à des fonctions indirect en utilisant les années et les catégories, dans un premier temps. Mais je ne trouve pas de solutions.
 
Bonjour gds77, sousou,

Voyez le fichier joint et cette macro dans le code de la feuille SYNTHESE :
Code:
Private Sub Worksheet_Activate()
Dim a, annee1, annee2, d1 As Object, d2 As Object, i%, derlig&, j&, v1#, v2#, x$
a = Array("BP", "BCP", "CDN") 'feuilles à consolider
annee1 = [E3]: annee2 = [F3]
Set d1 = CreateObject("Scripting.Dictionary")
d1.CompareMode = vbTextCompare 'la casse est ignorée
Set d2 = CreateObject("Scripting.Dictionary")
d2.CompareMode = vbTextCompare 'la casse est ignorée
For i = 0 To UBound(a)
    With Sheets(a(i))
        derlig = .Range("E" & .Rows.Count).End(xlUp).Row
        For j = 6 To derlig
            If IsDate(.Cells(j, 2)) Then 'sécutité
                v1 = 0: v2 = 0
                If IsNumeric(.Cells(j, 7)) Then 'sécurité
                    If Year(.Cells(j, 2)) = annee1 Then
                        v1 = .Cells(j, 7)
                    ElseIf Year(.Cells(j, 2)) = annee2 Then
                        v2 = .Cells(j, 7)
                    End If
                End If
                x = .Cells(j, 5) & Chr(1) & .Cells(j, 6)
                d1(x) = d1(x) + v1: d2(x) = d2(x) + v2
            End If
        Next j
    End With
Next i
Application.ScreenUpdating = False
Range("C5:F" & Rows.Count).ClearContents
If d1.Count = 0 Then Exit Sub 'sécurité
[C5].Resize(d1.Count) = Application.Transpose(d1.keys) 'Transpose est limitée à 65536 lignes
[C5].Resize(d1.Count).TextToColumns [C5], xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
[E5].Resize(d1.Count) = Application.Transpose(d1.items)
[F5].Resize(d2.Count) = Application.Transpose(d2.items)
[C5].Resize(d1.Count, 4).Sort [C5], xlAscending, [D5], Header:=xlNo 'tri
Columns("C:F").AutoFit 'ajustement largeur
End Sub
Elle s'exécute quand on active la feuille.

PS : il y a des références circulaires dans votre fichier, tâchez de voir ça...

A+
 

Pièces jointes

Dernière édition:
 

Pièces jointes

Oups fichier parti trop tôt ,

Merci job 75 pour cette macro, mais malheureusement je ne maitrise pas le fonctionnement et serais incapable de la recopier dans mon fichier de base , et je dois rendre ma synthèse pour ce soir. Alors j'ai chercher et pour simplifier j'ai essayé la fonction indirect uniquement sur les catégories mais je ne sais pas comment dissocier les années 2017 et 2018. Alors si vous pouvez m'indiquer la formule 🙂

Merci d'avance
 

Pièces jointes

Re,

J'ai supprimé un test inutile sur derlig dans ma macro précédente et j'ai mis le format "Comptabilité" en colonnes E et F.
Merci job 75 pour cette macro, mais malheureusement je ne maitrise pas le fonctionnement et serais incapable de la recopier dans mon fichier de base
Si votre fichier de base a la même structure que celui du post #1 il n'est pas nécessaire de comprendre la macro .

Et copier la macro est hyper facile :

- clic droit sur l'onglet SYNTHESE et Visualiser le code

- coller le code

- enregistrer le fichier en .xlsm (acceptant les macros).

A+
 
Surement, mais mon employeur me demande en plus de distinguer des colonnes débit et crédit sur une même catégorie quand le cas se présente....Alors pour modifier votre macro 😱😱
Donc si une solution existe sans macro pour utiliser la fonction indirect + année + colonne débit et crédit....Je suis preneuse avec grand plaisir.

A+
 
Re,
mon employeur me demande en plus de distinguer des colonnes débit et crédit sur une même catégorie
Il n'est pas difficile de modifier la macro, il suffit d'utiliser 4 Dictionary :
Code:
Private Sub Worksheet_Activate()
Dim a, annee1, annee2, d1 As Object, d2 As Object, d3 As Object, d4 As Object, i%, derlig&, j&, v1#, v2#, v3#, v4#, x$
a = Array("BP", "BCP", "CDN") 'feuilles à consolider
annee1 = [E3]: annee2 = [G3]
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Set d3 = CreateObject("Scripting.Dictionary")
Set d4 = CreateObject("Scripting.Dictionary")
d1.CompareMode = vbTextCompare 'la casse est ignorée
d2.CompareMode = vbTextCompare
d3.CompareMode = vbTextCompare
d4.CompareMode = vbTextCompare
For i = 0 To UBound(a)
    With Sheets(a(i))
        derlig = .Range("E" & .Rows.Count).End(xlUp).Row
        For j = 6 To derlig
            If IsDate(.Cells(j, 2)) Then 'sécutité
                v1 = 0: v2 = 0: v3 = 0: v4 = 0
                If IsNumeric(.Cells(j, 7)) Then 'sécurité
                    If Year(.Cells(j, 2)) = annee1 Then
                        If .Cells(j, 7) > 0 Then v1 = .Cells(j, 7) Else v2 = .Cells(j, 7)
                    ElseIf Year(.Cells(j, 2)) = annee2 Then
                        If .Cells(j, 7) > 0 Then v3 = .Cells(j, 7) Else v4 = .Cells(j, 7)
                    End If
                End If
                x = .Cells(j, 5) & Chr(1) & .Cells(j, 6)
                d1(x) = d1(x) + v1: d2(x) = d2(x) + v2
                d3(x) = d3(x) + v3: d4(x) = d4(x) + v4
            End If
        Next j
    End With
Next i
Application.ScreenUpdating = False
Range("C5:H" & Rows.Count).ClearContents
If d1.Count = 0 Then Exit Sub 'sécurité
[C5].Resize(d1.Count) = Application.Transpose(d1.keys) 'Transpose est limitée à 65536 lignes
[C5].Resize(d1.Count).TextToColumns [C5], xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
[E5].Resize(d1.Count) = Application.Transpose(d1.items)
[F5].Resize(d2.Count) = Application.Transpose(d2.items)
[G5].Resize(d3.Count) = Application.Transpose(d3.items)
[H5].Resize(d4.Count) = Application.Transpose(d4.items)
[C5].Resize(d1.Count, 6).Sort [C5], xlAscending, [D5], Header:=xlNo 'tri
Columns("C:H").AutoFit 'ajustement largeur
End Sub
Fichier (2).

A+
 

Pièces jointes

Sur mon fichier d'origine, les cellules en colonne "E" ne sont pas toutes sous le même format (trop compliqué pour l'analyse). Pour simplifier, Est il possible donc de supprimer cette colonne et de n'afficher que les catégories.

Encore Merci🙂
 
Merci Sousou, en effet ton TCD est une bonne solution à mon problème, mais je ne retrouve pas le bon résultat entre Débit - Crédit et Résultat sur le tri fait par catégorie.
exemple : BFA 2017 en débit 283 €- en Crédit 0€ - et résultat 40431 €.
de plus je dois afficher les année 2017 et 2018 en colonne et pas en ligne.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
25
Affichages
778
Réponses
20
Affichages
963
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…