VBA - Onglet Consolidé

Bonjour à tous,

Je viens une nouvelle fois vers vous pour un sujet important de mon côté.

En effet, nous avons une base (en copie), qui regroupe plusieurs onglets de personnes (FBR, FTD, STO) et un Onglet général (BU MTP).

Tous les onglets sont similaires et j'aimerai en un clic pouvoir basculer toutes les données des onglets (FBR, FTD, STO) sur l'onglet "BU MTP". En effet, cela me permettrait d'effacer les formules, et donc de faciliter le traitement.

De plus la deuxième contrainte est qu'il est fortement possible que de nouveaux onglets de personnes s'ajoutent, et il me faudrait donc pouvoir les ajouter à la macro le plus rapidement possible.

Merci d'avance pour votre aide,

Bien à vous,

FloBru

6im-mtp.xlsx (63.35 Ko)

Bonjour,

Voici un essai en supposant qu'il faille prendre toutes les feuilles exceptée "BU MTP" et que chacune de ces feuilles contienne un unique tableau structuré (l'égalité du nombre de colonnes est une contrainte), qu'on récupère dans un tableau dynamique :

sub test()
dim t()
for each ws in worksheets
    if ws.name <> "BU MTP" then
        n = n + 1: redim preserve t(1 to n)
        t(n) = ws.listobjects(1).databodyrange.value
    end if
next ws
tbl = Convert3Dto2D(t)
with sheets("BU MTP")
    nvl = .cells(.rows.count, 1).end(xlup).row + 1
    .cells(nvl, 1).resize(ubound(tbl), ubound(tbl, 2)).value = tbl
end with
end sub

function Convert3Dto2D(ArrSrc)
dim temp()
for i = lbound(ArrSrc) to ubound(ArrSrc)
    for j = lbound(ArrSrc(i)) to ubound(ArrSrc(i))
        n = n + 1: redim preserve temp(1 to ubound(ArrSrc(i), 2), 1 to n)
        for k = lbound(ArrSrc(i), 2) to ubound(ArrSrc(i), 2)
            temp(k, n) = ArrSrc(i)(j, k)
        next k
    next j
next i
Convert3Dto2D = application.transpose(temp)
end function

Cdlt,

Une proposition qui permet d'ajouter autant de feuilles que nécessaire.

Sur la feuille "liste feuilles" il suffit d'ajouter le nom de la feuilles dans le tableau pour qu'elle soit intégrée.

J'ai inséré des données aléatoires pour contrôler le fonctionnement

Dans les feuilles détails j'ai ajouté une colonne qui semblait manquer puisque la colonne N de BU MTP indiquait une erreur #Ref et que vous disiez que tous les onglets sont identiques.

2im-mtp.xlsm (97.95 Ko)

Bonjour à tous les deux,

En effet la solution de yal semble le mieux convenir sur mon tableau même si celle de 3GB fonctionne aussi, donc premièrement merci !

@yal, pourriez-vous m'expliquer :

ReDim tb1(1 To Range("pl_MU_MTP").Rows.Count, 1 To Range("pl_MU_MTP").Columns.Count)

Le "pl_MU_MTP" que je n'arrive pas bien à comprendre ?

Merci d'avance,

FloBru

Bonjour FloBru
pl_MU_MTP correspond au nom de la plage de cellules à laquelle le code se réfère.
.Rows.Count compte le nombre de lignes de la plage et .Columns.Count le nombre de colonnes.
Est ce que cela répond à votre question?

Bonjour Yal,

Merci encore pour ce retour !

Que puis-je donc modifier si j'ajoutes/retires des lignes et des colonnes ?

En reprenant votre base, j'ai ajouté des lignes et retiré une colonne mais la macro ne fonctionne pas complètement.

La colonne T ne doit pas être modifié et les 5 dernières lignes ne sont pas prises en compte.

Merci d'avance,

FloBru

1im-mtp.xlsm (65.34 Ko)

De plus si je veux ajouter une ou plusieurs années !?

J'ai rendu la plage de donnée dynamique cela qui devrait résoudre le problème de la prise en compte des dernières lignes

"De plus si je veux ajouter une ou plusieurs années !?". Je ne comprends pas la questions. Ajoutez une année et renvoyez le fichier que je puisse voir en quoi consiste cet ajout.

1im-mtp.xlsm (67.49 Ko)

C'est parfait !

Merci encore :)

L'ajout d'année correspond à un ajout de ligne le problème est donc réglé.
Merci encore

J'ai repéré une erreur de numéro de ligne. Voici la version corrigée.

2im-mtp.xlsm (69.62 Ko)

Bonjour,

Je reviens juste rapidement pour une question : Quand je change le nom de l'onglet "BU MTP" la macro ne fonctionne plus.. Comment puis-je faire ?

Merci d'avance,

FloBru

Bonjour à tous,

@FloBru : Une solution simple serait de ne pas changer le nom d'onglet ou sinon de changer toutes les occurrences de "BU MTP" dans le code par le nouveau nom d'onglet.

Sinon, il faudra plutôt chercher à coder en fonction d'autres critères plus spécifiques ou à paramétrer la macro de consolidation.

Cdlt,

Rechercher des sujets similaires à "vba onglet consolide"