Compilation de plusieurs tableaux en une feuille

21test-code.zip (1.35 Mo)

Bonjour,

Dans mon fichier excel j'ai différents onglets (BDD société1, BDD société2,BDD société3..), chaque onglet comporte plusieurs tableaux (A,B,C ..).

Ces différents tableaux (A,B,C..) se mettent à jour automatiquement en lien avec un autre fichier Excel

Je souhaiterais compiler tous les tableaux de tous les onglets BDD sur une seule feuille et que les donnés se mettent à jour via le fichier en lien.

Merci d'avance de votre aide :)

Bonjour, personne n'aurais une petite idée pour l'aider ?

Cordialement

Bonjour,

Dans mon fichier excel j'ai différents onglets (BDD société1, BDD société2,BDD société3..), chaque onglet comporte plusieurs tableaux (A,B,C ..).

Ces différents tableaux (A,B,C..) se mettent à jour automatiquement en lien avec un autre fichier Excel

Je souhaiterais compiler tous les tableaux de tous les onglets BDD sur une seule feuille et que les donnés se mettent à jour via le fichier en lien.

Pour bien comprendre ...

  1. seulement les onglets commençant par BDD ?
  2. tous les tableaux ont la même structure et le même nombre de colonnes ? j'ai remarqué que le nombre de tableaux par contre était variable
  3. on copie en valeur ou avec le lien ?
  4. A B C D E F ... ont-ils une signification particulière ?
  5. dans quel onglet est-ce que l'on compile ?
  6. pourquoi ne pas compiler directement à partir des fichiers source ?

As-tu essayé une solution PowerQuery ?

Bonjour,

Oui je souhaiterais compiler uniquement les données présentes dans les onglets BDD.

Tous les tableaux ont la même structure et le même nombre de colonnes, mais pas le même nombre de lignes (ces lignes s’agrémentent grâce à un autre fichier Excel donc avec des liens). Et en effet, le nombre de tableaux n'est pas le même dans onglet BDD à un autre.

Les noms des tableaux A B C D .. ont bien une signification.

C'est vrai, j'ai oublié, je vais créer une feuille pour la compilation des données.

S'il est possible de compiler directement des fichiers sources, ca peut être encore plus intéressant :)

Je ne connais pas vraiment Power Query, ce serait possible de travailler sur plusieurs feuilles en même temps ?

Un premier jet ... la compilation se fait dans la feuille "BDD Tous"

Sub compilBDD()
Dim f As Worksheet
li = 1
With Sheets("BDD Tous")
    .Cells.UnMerge
    .Cells.Clear
    For Each f In Worksheets
        If f.Name Like "BDD Soc*" Then
            For i = 1 To f.Cells(2, Columns.Count).End(xlToLeft).Column Step 10
                If f.Cells(2, i) <> "" Then
                    f.Cells(2, i).CurrentRegion.Copy Destination:=.Cells(li, 1)
                    li = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                End If
            Next
        End If
    Next
End With
End Sub
45test-code.xlsm (153.13 Ko)

Merci beaucoup pour ta réponse, sur mon fichier "test" la macro fonctionne, cependant sur mon fichier "réel", les BDD sont des liens vers un autre fichier Excel.

Seul le premier tableau ressort dans la compil, les autres tableaux sont en message d'erreur #REF!.

J'ai modifié les données des tableaux des BDD sous format texte, et là ca marche, je pense donc que ca vient des formules mais je n'arrive pas à résoudre ce problème ..

As-tu une idée ? stp

J'ai laissé à tort le module 2 que tu peux supprimer !

Je vais faire une version avec copie comme valeur.

Essaie ceci ...

Sub compilBDD()
Dim f As Worksheet
li = 1
With Sheets("BDD Tous")
    .Cells.UnMerge
    .Cells.Clear
    For Each f In Worksheets
        If f.Name Like "BDD Soc*" Then
            For i = 1 To f.Cells(2, Columns.Count).End(xlToLeft).Column Step 10
                If f.Cells(2, i) <> "" Then
                    f.Cells(2, i).CurrentRegion.Copy
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteValues
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteFormats
                    li = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                End If
            Next
        End If
    Next
End With
End Sub

mais le mieux serait de récupérer directement des fichiers source !

Parfait merci beaucoup, ca marche avec la derniere macro.

Est ce possible de supprimer les titres des tableaux (A,B,C ...) et les lignes à 0 dans la compilation?

ok pour A B C

c'est quoi les lignes à 0 ?

Sub compilBDD()
Dim f As Worksheet
li = 1
With Sheets("BDD Tous")
    .Cells.UnMerge
    .Cells.Clear
    For Each f In Worksheets
        If f.Name Like "BDD Soc*" Then
            For i = 1 To f.Cells(2, Columns.Count).End(xlToLeft).Column Step 10
                If f.Cells(2, i) <> "" Then
                    nblignes = f.Cells(2, i).CurrentRegion.Rows.Count
                    nbcolonnes = f.Cells(2, i).CurrentRegion.Columns.Count
                    Debug.Print nblignes, nbcolonnes
                    f.Cells(2, i).CurrentRegion.Offset(1, 0).Resize(nblignes - 1, nbcolonnes).Copy
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteValues
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteFormats
                    li = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                End If
            Next
        End If
    Next
End With
End Sub

Dans les BDD ce sont des liens vers un autre fichier, les formules sont etirees mais les lignes peuvent être vides dans le fichier de base, et donc ça ressort dans ma BDD des lignes à 0.

C'est un peu compliqué à expliquer j'espère que c'est compréhensible ^^

ok, donc les 9 valeurs de la ligne sont à 0 ?

Sub compilBDD()
Dim f As Worksheet
li = 1
With Sheets("BDD Tous")
    .Cells.Clear
    For Each f In Worksheets
        If f.Name Like "BDD Soc*" Then
            For i = 1 To f.Cells(2, Columns.Count).End(xlToLeft).Column Step 10
                If f.Cells(2, i) <> "" Then
                    nblignes = f.Cells(2, i).CurrentRegion.Rows.Count
                    nbcolonnes = f.Cells(2, i).CurrentRegion.Columns.Count
                    f.Cells(2, i).CurrentRegion.Offset(1, 0).Resize(nblignes - 1, nbcolonnes).Copy
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteValues
                    .Cells(li, 1).PasteSpecial Paste:=xlPasteFormats
                    li = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                End If
            Next
        End If
    Next

    MsgBox .Cells(1, 1).CurrentRegion.Rows.Count & " lignes recopiées."
    donnee = .Cells(1, 1).CurrentRegion.Value
    .Cells.Clear
    donnee = epuration(donnee)
    .Cells(1, 1).Resize(UBound(donnee), UBound(donnee, 2)) = donnee
    MsgBox .Cells(1, 1).CurrentRegion.Rows.Count & " lignes valides."

End With
End Sub

Function epuration(Tbl)
Dim i%, ii%, j%, k%, n%, flag As Boolean

    For i = 1 To UBound(Tbl)
        flag = False
        For j = 1 To UBound(Tbl, 2)
            If Tbl(i, j) <> 0 Then flag = True
        Next j
        If flag Then n = n + 1
    Next i
    Dim temp: ReDim temp(1 To n, 1 To UBound(Tbl, 2))

    j = 0
    For i = 1 To UBound(Tbl)
        flag = False
        For j = 1 To UBound(Tbl, 2)
            If Tbl(i, j) <> 0 Then flag = True
        Next j
        If flag Then
            ii = ii + 1
            For k = 1 To UBound(Tbl, 2)
                temp(ii, k) = Tbl(i, k)
            Next k
        End If
    Next i
    epuration = temp

End Function

Parfait ca fonctionne comme ca! Je te remercie :)

Rechercher des sujets similaires à "compilation tableaux feuille"