Consolidation de plusieurs feuilles dans une seule feuille

Nickel, ça fonctionne très bien

merci beaucoup pour votre aide précieux

Reste sauf le point des titres dans la feuille consolidée si ça vous pouvez m'aider, je serai reconnaissant

merci en tout cas

Après la ligne suivante :

If k = 0 Then

Ajouter :

.Rows(1).Copy f1.[a1]

Bonjour,

Je viens de rajouter la ligne comme demandé mais je remarque que seule la mise en forme de la 1ère ligne a été modifié mais je n'ai toujours pas les titres

Pouvez vous me dire ce qui ne marche pas ?

Merci

J'ai oublié de te préciser qu'à la fin du code, il faut modifier [a1] par [a2]

Effectivement ça marche bien

merci beaucoup

Bonne journée

Excuse moi pour le dérangement mais en testant sur un fichier réel, je viens de m'apercevoir que l'entête copiée dans le fichier consolidé est issue d'un autre onglet (différent des feuilles spécifiés dans le code)

Pouvez vous préciser au niveau du code qu'il doit prendre les entêtes à partir du 1er onglet parmi la liste défini dans le code ou bien nommer l'onglet source de l'entête ?

Merci d'avance

As-tu placé le code au bon endroit ?

En effet, chez moi cela fonctionne correctement ..

oui, le code est mis dans un classeur Excel qui contient une seule feuille "Consolidation"

Lorsque je l'exécute, il me donne la main pour sélectionner le fichier source qui contient beaucoup d'onglets dont mes 5 feuilles dont j'en ai besoin...

après l'exécution du code, il me récupère le contenu des 5 feuilles sources précisées dans le code mais l'entête d'un autre onglet qui n'est pas indiqué dans la liste

Est-ce que j'ai fait une erreur ?

Merci

Je ne sais pas, il faudrait que je vois ton fichier original pour te dire

fait une exécution "pas par pas " du code pour voire à quels moment sa plante ^^

je vous joints les 2 fichiers :

  • Le fichier source qui contient 6 onglets dont 5 indiqués dans le code
  • Le fichier d'arrivée (de consolidation) qui contient le code

Vous allez voir que lorsque j'exécute le code, l'entête récupérée est celle de l'onglet 'Source 6' qui ne fait partie des feuilles à consolider

Merci d'avance

28fichier-source.xlsx (22.55 Ko)

Quand je disais qu'il devait y avoir une erreur dans le code ..

Si tu regardes bien le code proposé il est marqué .Rows(1) et pas Rows(1)

Toute la différence est ici

Sans le "." tu récupères la ligne de la feuille active, qui est bien celle dont tu n'as pas l'utilité.

En mettant le "." tu te places dans la feuille choisie au premier tour ("Source 1")

oups, j'ai fait une bêtise, excusez moi je suis pas très fort en VBA

du coup, j'ai fait la modification et ça marche bien

juste une dernière remarque (j'espère) les colonnes N, O et P contiennent des dates, est-il possible de les mettre sous format date jj/mm/aaaa ?

Merci beaucoup

il suffit de changer le format des colonne les donnée se mettrons automatique sous le format indiquer

En modifiant la fin du code ainsi :

'On note les valeurs dans le classeur d'origine.
With f1
    .[a2].Resize(UBound(t), UBound(t, 2)).Value = t
    .Range("a:m, q:t").NumberFormat = "@"
End With

Merci thebenoit59 pour votre réponse rapide,

j'ai fait la modification demandée mais j'ai toujours un format da date différent du souhaité

ci-dessous un exemple des formats que j'en ai :

3/7/2016

3/15/2016

sachant que j'ai déjà modifié le format de date en jj/mm/aaaa mais ça marche pas (ils sont saisies comme des données texte je pense)

L'inconvénient pour vérifier, c'est qu'avec la version que j'utilise c'est directement écrit en dates française.

Peux-tu essayer en ajouter cette procédure à la fin ?

'On place les dates en un format "dd-mm-yyyy"
For i = LBound(t) To UBound(t)
    For j = 14 To 16
        f1.Cells(i + 1, j).Value = Format(t(i, j), "dd/mm/yyyy")
    Next j, i

Bonjour,

ça fonctionne très bien, merci beaucoup

Merci pour votre aide

bonne journée

Bonjour,

Je me permets de revenir sur ce sujet parce que j'ai un bug que je n'arrive pas à trouver de solutions malgré mes recherches :

En fait, dans ma macro, il y a une liste de feuilles sources définie comme suit :

Liste = Array("SOURCE 1", "SOURCE 2", "SOURCE 3", "SOURCE 4", "SOURCE 5")

mais mon fichier ne comporte pas systématiquement cette liste : j'ai eu un cas ou il y a une feuille qui manque donc du coup ma macro bug avec le code d'erreur 9 (Erreur d'exécution '9': L'indice n'appartient pas à la sélection) au niveau de la ligne suivante :

With .Sheets(Liste(i))

ci-dessous le code complet

est ce quelqu'un peut me dire comment surmonter ce problème ?

c'est très urgent, je serai très reconnaissant si quelqu'un peut me proposer quelques chose ?

Merci

Sub Consolidation_2()
Dim w1 As Workbook, w2 As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim l&, i&, k&, t(), temp(), Liste(), nw2

Set w1 = ThisWorkbook: Set f1 = w1.Sheets("Recap Conso")
Liste = Array("SOURCE 1", "SOURCE 2", "SOURCE 3", "SOURCE 4", "SOURCE 5")

'On choisit le fichier à ouvrir
nw2 = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
    If nw2 <> False Then
        Set w2 = Workbooks.Open(nw2)
        Else: MsgBox "Vous n'avez pas sélectionné de fichier": Exit Sub
    End If

'On débute le compteur à 0, afin de savoir s'il s'agit du premier tableau.
k = 0

'On boucle les différentes feuilles.
With w2
    For i = LBound(Liste) To UBound(Liste)
        With .Sheets(Liste(i))
            l = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            temp = .Range(.Cells(2, 1), .Cells(l, 20)).Value
            If k = 0 Then
            .Rows(1).Copy f1.[a1]
                t = temp
                Else: t = MergeArray2DVert(t, temp)
            End If
        End With
    k = k + 1
    Next i
End With

'On ferme le classeur à consolider.
w2.Close False

'On note les valeurs dans le classeur d'origine.
With f1.[a2].Resize(UBound(t), UBound(t, 2))
    .NumberFormat = "@"
    .Value = t
End With
End Sub

Function MergeArray2DVert(a, b)
  maxtab1 = UBound(a)
  Dim Tbl(): ReDim Tbl(1 To UBound(a) + UBound(b), 1 To UBound(a, 2))
  For i = LBound(a) To UBound(a)
    For c = 1 To UBound(a, 2): Tbl(i, c) = a(i, c): Next
  Next i
  For i = 1 To UBound(b)
    For c = 1 To UBound(b, 2): Tbl(maxtab1 + i, c) = b(i, c): Next
  Next i
  MergeArray2DVert = Tbl
End Function
Rechercher des sujets similaires à "consolidation feuilles seule feuille"