Créer un tableau à partir des sous totaux d'un autre tableau sous VBA

Bonjour,

J'ai un problème assez compliqué (pour moi en tout cas) à régler. Je joint un fichier simplifié de mes données.

Je voudrais faire une macro qui me permet de créer un tableau dans l'onglet REPARTITION avec l'en-tête, les lignes de sous-totaux et le total général du tableau de l'onglet PLANNING. A la base je voulais faire un tableau croisé dynamique mais on ne peut pas en faire sur les sous-totaux. La grosse difficulté pour moi c'est que après avoir créé le tableau REPARTITION, il est quasi certain que je vais faire des modifications dans les données de l'onglet PLANNING, donc mes sous totaux vont se mettre à jour, et je voudrais donc que les sous-totaux se mettent à jour également dans l'onglet REPARTITION. De plus, j'obtiens l'onglet PLANNING d'une extraction de données que je fais une fois par semaine, donc ce tableau est à taille variable.

J'espère que quelqu'un sera en capacité de m'aider.

Merci d'avance,

Eloïse

2base-forum.xlsm (17.70 Ko)

Bonjour,

Voici un essai par VBA:

2base-forum.xlsm (27.44 Ko)

A noter que si les sous-totaux ne viennent pas de l'extraction de base, il est possible je pense de passer par un tableau croisé dynamique pour avoir les sous totaux pour chaque semaine de production, et d'avoir un total général.

Aussi je me demandais pendant que je codais, votre tableau de répartition on peut simplement l'avoir en réduisant tous les groupes, est-ce bien utile de passer par du VBA pour faire une copie du tableau sur une autre feuille?

Bonjour,

En ce qui concerne les sous-totaux, ils ne viennent pas de l'extraction de base. Mais est-il possible en passant par un tableau croisé dynamique d'avoir exactement le même visuel que l'onglet PLANNING ?

Et effectivement, si on réduit tous les groupes, on va avoir juste les sous-totaux. Mais si je fais un copier coller des sous totaux vers mon onglet REPARTITION, quand je vais changer un chiffre manuellement dans l'onglet PLANNING, mes sous-totaux dans l'onglet REPARTITION ne seront plus à jour. Vous allez me dire : il faut juste refaire un copier coller après modification des sous totaux ! SAUF QUE : dans mon onglet REPARTITION, je fais aussi des modifs dans d'autres colonnes, je ne peux donc pas écraser mes modifs à chaque fois dans l'onglet REPARTITION. D'où ma nécessité de mettre à jour les totaux automatiquent d'un onglet à l'autre.

Je vais voir ce que donne la macro !

Eloïse

Alors j'ai essayé la macro, elle me va pas trop mal mais j'aimerais bien l'adapter à quelques situations :

est-ce que c'est possible de ne copier que certaines colonnes définies de l'onglet PLANNING vers l'onglet REPARTITION ?

Merci,

Eloïse

Alors pour répondre à la première question, en enlevant les sous-totaux du premier tableau, on peut obtenir ce genre de tableau croisé dynamique (je ne sais pas si ça ira ou non):

2base-forum.xlsm (45.66 Ko)

Concernant la seconde question, oui c'est possible de ne prendre que certaines colonnes, quelles colonnes voudrait-t-on?

Au fait, puisqu'on parle de colonne, vous avez parlé de tableau de taille variable, on est d'accord que seul le nombre de ligne est variable?

PS:

Je pense qu'on peut faire une macro plus simple avec un filtre avancé, on peut aussi sélectionner les colonnes qu'on veut garder. Voir la feuille REPARTITION pour le nouveau fonctionnement, le code est pour le coup beaucoup plus simple:

Sub filtreAvancé()
    Sheets("PLANNING").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("REPARTITION!B1:B2"), CopyToRange:=Range( _
        "REPARTITION!A5:C5"), Unique:=False
End Sub

Bonjour,

Ta macro simplifiée est pas mal mais j'ai essayé de l'adapter et ça ne marche pas. J'ai modifié ton fichier et rajouté un onglet Feuil1 avec plus de données. Le but est de récupérer les colonnes B, H, I, O, P, Q et R.

Si tu y arrive ça serait parfait.

Eloïse

1base-forum-2.xlsm (61.27 Ko)

Je vais rajouter une petite difficulté : est-ce possible pour le total général du bas de garder la formule et pas juste le résultat ?

Bonjour,

Pour la formule, avec la solution simple je ne vois pas trop comment faire.

En même temps, avoir un total général qui se met à jour, et tous les autres sous-totaux qui eux deviennent "périmés", je ne pense pas que ça ait un grand intérêt, je me trompe?

Voici la proposition avec code simple:

2base-forum-2.xlsm (69.11 Ko)

J'ai mis la macro dans mon fichier de base et j'ai une erreur 1004 : la méthode 'range' de l'objet '_global' a échouée.

Je comprend pas pourquoi, j'ai juste remplacé dans la formule le vrai nom de mes feuilles :

Sheets("PLANNING VRAC GIDA").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range("REPARTITION VRAC!B1:B2"), CopyToRange:=Range( _
            "REPARTITION VRAC!A5:G5"), Unique:=False
            

Je comprend pas ..

Sans voir le fichier de base je peux juste partir sur des pistes:

  • Bien renommer aussi le with Sheets("REPARTITION")
  • Vérifier que la feuille REPARTITION VRAC ait bien la même chose que pour le fichier que j'ai envoyé
  • Pour les Range, quand il y a un espace dans le nom de la feuille à laquelle on veut faire référence, il faut entourer le nom de la feuille de ' ', comme ceci
Sheets("PLANNING VRAC GIDA").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range("'REPARTITION VRAC'!B1:B2"), CopyToRange:=Range( _
            "'REPARTITION VRAC'!A5:G5"), Unique:=False

A noter que ce n'est pas nécessaire quand on utilise Sheets().

C'est bon ça marche ! Je pense que ça venait des ' ' dans les Ranges !

En tout cas merci beaucoup !!

Super j'ai eu du flair! (rien à voir avec ma photo de profil).

J'avais fait un test au cas où pour la troisième proposition et j'avais un souci en effet de mon côté avec le même message d'erreur. Je n'étais pas sûr que ce soit le seul problème donc j'avais quand même laissé les autres points.

Merci d'avoir passé le sujet en résolu.

Rechercher des sujets similaires à "creer tableau partir totaux vba"