Consolidation en vba de 2 feuilles de 3 colonnes

SLIM1255

XLDnaute Nouveau
Salut!
En rajoutant une colonne au fichier ; celle-ci n'est pas affichée en feuil 3 consolidée ? qu'elles modifications apportées au code
et Merci d'avance ! ci- joint fichier modifié avec 3 colonnes
 

Pièces jointes

  • Copie de Copie de test-conso(2).xls
    49.5 KB · Affichages: 14
Solution
Bonjour SLIM1255, le forum,

On peut en effet utiliser en VBA la commande Consolider mais ici il faut d'abord concaténer les 2 premières colonnes :
VB:
Private Sub Worksheet_Activate()
Dim w As Worksheet, a$(), n, tablo, i&
Application.ScreenUpdating = False
Range("A1").CurrentRegion.ClearContents 'RAZ
For Each w In Worksheets
    If w.Name <> Me.Name Then
        With w.Range("A1").CurrentRegion
            ReDim Preserve a(n)
            a(n) = .Address(, , xlR1C1, True) 'liste des adresses sources
            n = n + 1
            tablo = .Resize(, 2)
            For i = 1 To UBound(tablo)
                tablo(i, 1) = tablo(i, 1) & Chr(1) & tablo(i, 2) 'concaténation avec séparateur
            Next i...

job75

XLDnaute Barbatruc
Bonjour SLIM1255,

Il y a de nombreux exemples de consolidations sur ce forum.

Voyez cette macro dans le code de la feuille "Consolidation" du fichier joint :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, w As Worksheet, tablo, i&, x$, a, b, c(), s
Set d = CreateObject("Scripting.Dictionary")
For Each w In Worksheets
    If w.Name <> Me.Name Then
        tablo = w.[A1].CurrentRegion.Resize(, 3) 'matrice, plus rapide
        For i = 2 To UBound(tablo)
            If Not UCase(tablo(i, 2)) Like "*TOTAL*" Then
                x = tablo(i, 1) & Chr(1) & tablo(i, 2)
                d(x) = d(x) + Val(Replace(tablo(i, 3), ",", "."))
            End If
        Next i
    End If
Next w
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] 'cellule de destination, à adapter
    If d.Count Then
        a = d.keys: b = d.items: ReDim c(UBound(a), 2) 'base 0
        For i = 0 To UBound(a)
            s = Split(a(i), Chr(1))
            c(i, 0) = s(0)
            c(i, 1) = s(1)
            c(i, 2) = b(i)
        Next
        .Resize(d.Count, 3) = c
    End If
    .Offset(d.Count).Resize(Rows.Count - d.Count - .Row + 1, 3).ClearContents 'RAZ en dessous
End With
With UsedRange
    .Cells(.Rows.Count + 1, 2) = "TOTAL"
    .Cells(.Rows.Count + 1, 3) = "=SUM(" & .Columns(3).Address(0, 0) & ")"
End With
End Sub
Elle se déclenche quand on active la feuille.

Elle est très rapide car elle utilise le Dictionary et des tableaux VBA.

A+
 

Pièces jointes

  • test-conso(1).xls
    75 KB · Affichages: 9

SLIM1255

XLDnaute Nouveau
bonjour!
Merci pour la réponse , J'ai rajouté une autre colonne ;mais elle ne s'affiche pas donnez moi une solution et Merci ! code ou qu'elles modification apportées à votre code .............. Bonne soirée !!!! ci_ joint fichier
 

Pièces jointes

  • test-conso(2).xlsm
    20 KB · Affichages: 8

SLIM1255

XLDnaute Nouveau
Merci bien pour les réponses bien précises encore une autre fois ci-joint fichier consolidation et dites -moi que manque-t-il au code pour que la colonne 2 des Feuil1 et 2 s'affiche en Feuil3 ??
Bonne Journée...........et encore merci
 

Pièces jointes

  • Ma 2ère Consolide-3em.xlsm
    16.1 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour SLIM1255, le forum,

On peut en effet utiliser en VBA la commande Consolider mais ici il faut d'abord concaténer les 2 premières colonnes :
VB:
Private Sub Worksheet_Activate()
Dim w As Worksheet, a$(), n, tablo, i&
Application.ScreenUpdating = False
Range("A1").CurrentRegion.ClearContents 'RAZ
For Each w In Worksheets
    If w.Name <> Me.Name Then
        With w.Range("A1").CurrentRegion
            ReDim Preserve a(n)
            a(n) = .Address(, , xlR1C1, True) 'liste des adresses sources
            n = n + 1
            tablo = .Resize(, 2)
            For i = 1 To UBound(tablo)
                tablo(i, 1) = tablo(i, 1) & Chr(1) & tablo(i, 2) 'concaténation avec séparateur
            Next i
            .Columns(1) = tablo
            If n = 1 Then Range("A1") = w.Range("A1")
        End With
    End If
Next w
Range("A1").Consolidate Sources:=a, Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False 'commande Consolider
Application.DisplayAlerts = False
For Each w In Worksheets
    w.Columns(1).TextToColumns w.Columns(1), xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
Next w
End Sub
Bonne journée.
 

Pièces jointes

  • Consolider(1).xlsm
    25.7 KB · Affichages: 20
Dernière édition:

Discussions similaires

Réponses
3
Affichages
163
Réponses
21
Affichages
422

Statistiques des forums

Discussions
312 304
Messages
2 087 069
Membres
103 453
dernier inscrit
Choupi