Code VBA pour une MFC

Bonjour,

Je joins ici un fichier qui a été créé avec l’aide du Forum, plus particulièrement de Galopin. Ce fichier fonctionne à merveille à un détail prêt : Il faudrait que le résultat final présente les montants des sous-totaux et le total général en gras. Ceci en tenant compte du fait que le nombre de lignes est à chaque fois différent.

J’ai essayé d’enregistrer une macro automatique et d’en inclure le code à la macro existante Sub TCD(), mais ça donne des résultats étranges. La condition que j'ai essayé d'utiliser était : « Pour chaque ligne, si la cellule de la colonne A est vide, la cellule de la colonne E doit être mise en gras ».

Si quelqu’un veut bien m’aider, voici une petite information : normalement on introduit des données manuellement dans la feuille base avant de lancer la macro « Sous-totaux et Tableau croisé dynamique ». Le bouton « Demo » permet d’introduire des données justement afin de pouvoir faire des essais de la macro suivante.

Au plaisir de vous relire.

59journal.zip (28.85 Ko)

Bonjour,

Pourrais-tu me mettre le fichier avec le TCD en question car malheureusement avec excel 2000 je ne peux pas le construire.

A te relire

Dan

Salut Dan,

Merci d'avoir pris le flambeau.

J'espère que je t'ai bien compris ; je joins un fichier comme il se trouve après que j'ai lancé la macro reliée au bouton « Sous-totaux et Tableau croisé dynamique », c'est à dire qu'il y a une page qui a été copiée, que des boutons ont été effacés, etc. A ce moment-là il faudrait qu'en plus la colonne E soit mise en forme conditionnelle.

Bonne salutations.

Edit d'Yvouille : J'ai un problème à joindre le fichier. Je regarde ça ce soir à la maison au cas où ça viendrait de nos sécurités à mon travail

Re,

Oui. Il me faut voir ton tableau après que tu as exécuter la macro reliée au bouton "Sous-totaux et Tableau croisé dynamique".

De cette sorte, je pourrai appliquer le code que j'ai réalisé dans un fichier il y a quelques années.

Amicalement

Dan

En fait mon dossier était simplement trop volumineux

Voici un fichier comprimé.

Bonne soirée.

re,

Merci de ton fichier.

Le TCD à faire est celui dans la feuille "Base", je suppose.

J'essaie de comprendre comment tu fonctionnes dans ce fichier car au vu de la macro TCD, il y a pas mal d'instructions inutiles.

Pourquoi mets-tu le TCD sur la même feuille que la feuille "Base" et pas sur une autre feuille.

Ce que j'ai compris :

  • clique sur le bouton Demo ramène des données de la feuille Cas pour Démo en feuille Base. Pourquoi ramène t on ces données et d'où viennet-elles ?
  • on duplique la feuille Base et on supprime les boutons
  • on crée le TCD sur la feuille Base

Donne moi un minimum d'explications sur ta manière de procéder afin que je puisse comprendre et alléger ton code.

J'ai commencé à refaire le code et ensuite je ferai le code pour appliquer le gras en focntion de ta demande.

A te relire

Dan

Salut Dan,

Lors de l'utilisation normale de mon fichier, on y introduit manuellement des données provenant d'un autre programme (nombre très variable de lignes) avant de lancer la macro Sub TCD (). Mais comme vous n'avez pas ces données à disposition, j'ai créé la macro "Démo" qui simule l'importation manuelle de ces données, d'où mon premier texte :

Yvouille a écrit :

normalement on introduit des données manuellement dans la feuille base avant de lancer la macro « Sous-totaux et Tableau croisé dynamique ». Le bouton « Demo » permet d’introduire des données justement afin de pouvoir faire des essais de la macro suivante.

La macro Sub TCD fait en gros ceci : elle crée une copie de cette feuille afin que les données introduites soient encore à disposition à l'état brut pour d'autres utilisations, elle crée un TCD et des sous-totaux puis efface les boutons afin qu'on n'essaie pas de relancer une deuxième fois le code involontairement.

Ce code me convient parfaitement en l'état. J'aurais simplement voulu que sur la feuille de base, en plus, les chiffres de la colonne E soient mise en gras sous condition qu'il s'agisse d'un sous-total ou d'un total. J'ai essayé de mettre en forme la colonne "à vide", avant le lancement du code, mais certains sous-totaux n'étaient alors quand même pas correctement mit en forme après que la macro ait été lancée (il me semble que des "conditions" non désirées sont mise en place par le lancement du code). C'est la raison pour laquelle j'ai pensé qu'il vallait mieux enlever au préalable toutes les MFC de cette colonne et de placer uniquement la MFC désirée lorsque les sous-totaux sont établis par la macro.

Pour répondre à tes autres questions :

Je place le TCD sur la même feuille que la feuille "Base" (et à coté du total général, quel que soit le nombre de lignes) afin que l'utilisateur puisse choisir entre ces deux aides (sous-totaux et TCD) afin de continuer à travailler sur ce fichier.

A te relire.

Re,

Dans ton premier fichier le TCD se trouve en dessous du tableau et dans le fichier "Journal après macro", le TCD se trouve à droite du tableau.

D'après le code macro, le TCD se trouve toujours en dessous de ton tableau.

Tu peux confirmer sa réelle position ?

A te relire

Dan

Edit Dan

Autant pour moi, je viens de voir pourquoi le TCD se trouve à droite.

Voici le code à intégrer dans la SUB TCD depuis fin de rajout 1

 '----------------- Fin du rajout 1 --------------------------
Ws.Range("D2:D" & i).NumberFormat = "dd.mm.yyyy"
ws.PivotTableWizard SourceType:=xlDatabase, SourceData:="mazone", TableDestination:="Base!R" & i + 5 & "C1", TableName:="TCD"
With ws.PivotTables("TCD")
      .SmallGrid = False
      .AddFields RowFields:=Array("Vorname", "Rente"), PageFields:="Betrag"
      .PivotFields("Betrag").Orientation = xlDataField
End With
Application.CommandBars("PivotTable").Visible = False
With Ws.Range("A1:E" & i)
    .Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    .Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(5), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End With
Dim c As Range
With Ws
For Each c In .Range("A2:A" & Ws.Range("E65536").End(xlUp).Row))
If IsEmpty(c) Then c.Offset(0, 4).Font.Bold = True
Next
End With
i = Ws.Range("E65536").End(xlUp).Row + 1
'.....Le reste de ton code

On peut encore améliorer le tout mais à toi de voir.

Amicalement

Dan

Salut Dan,

Merci pour ta réponse.

Lorsque je place ton code où tu me le proposes, la ligne ci-dessous est écrite en rouge

For Each c In .Range("A2:A" & Ws.Range("E65536").End(xlUp).Row))

Puis selon les divers essais que je fais, je reçois divers messages d'erreur. J'ai par exemple essayé d'indiquer sous "Option Explicit" : c as Range, c as String (ne rigole pas !).

Peux-tu encore m'indiquer ce que je dois corriger ?

Bonne journée.

Re,

Oups,

Dans cette instruction, il y a deux parenthèses après ROW. Il n'en faut qu'une seule au lieu de deux. Enlève la dernière de l'instruction.

A te relire

Dan

Salut Dan,

Merci beaucoup pour ta réponse.

J'ai placé ton code comme tu me l'as indiqué (voir fichier ci-joint). Lorsque je lance le code ainsi, les sous-totaux sont parfaitement réalisés et mis en forme, le TCD est réalisé mais placé en dessous des sous-totaux, dans la colonne A (comme s'il n'était pas encore déplacé) et le code bloque sur cette partie qui est placé deux lignes après ton nouveau code :

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="mazone", _
  Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:="Base!R" & i + 5 & "C1", _
  TableName:="TCD", DefaultVersion:=xlPivotTableVersion10

Si je désactive cette nouvelle partie que j'ai nommée "Rajout de Dan pour MFC" et que je lance le code, le TCD est placé comme désiré à droite du dernier sous-total, dans la colonne G, les sous-totaux sont normalement fait et - FAIT NOUVEAU - il n'y a plus aucune mise en forme dans la colonne des tous-totaux, alors que jusqu'à maintenant il y avait parfois des mises en formes bizarres et involontaires ; est-ce que ça vient du fait que jusqu'à maintenant j'avais fait des essais avec des MFC déjà placées avant de lancer le code, ce qui me donnait des résultats bizarres ????? Mais cette question n'a pas une grande importance, puisqu'avec ton nouveau code, la partie MFC semble fonctionner parfaitement.

A te relire.

22journal-v2.zip (29.77 Ko)

Re,

Normal car tu te trompes en copiant le code.

Si tu relis ce que j'ai écrit avant, tu dois placer mon code entre

'----------------- Fin du rajout 1 --------------------------

et l'instruction

j = Ws.Range("A65536").End(xlUp).Row + 1

Cela veut dire bien entendu que le code existant dans ton fichier à cette position doit être remplacé par celui que je t'ai proposé.

Amicalement

Dan

Salut Dan,

Je suis désolé de t'avoir si mal compris, mais ce n'était pas évident de saisir qu'une partie du code devait être effacée. Mais tout est bien qui fini bien puisque ça fonctionne maintenant parfaitement. Un tout, tout grand merci pour ton aide ; une fois de plus tu m'as bien dépanné

Bonnes salutations.

errchev
Rechercher des sujets similaires à "code vba mfc"