Probléme macro disparait lors de l'enregistrement

chasseur44

XLDnaute Occasionnel
Bonjour Forum !
J'ai une macro qui me permet de créer un bouton et d'y associer une macro.
Macro que j'ai récupéré sur le forum et adapté à mon besoin (j'ai srcuté tous les topic mais en vain)


Sub crea_bouton_et_macro()

Dim Ws As Worksheet
Dim Obj As Object
Dim x As Integer

Set Ws = ActiveSheet
Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
With Obj
.Left = 180
.Top = 5
.Width = 190
.Height = 25
.Object.Caption = "Vision : Cumulé"
End With

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
x = .CountOfLines
.insertlines x + 1, "private Sub CommandButton1_Click()"
.insertlines x + 2, "cells(5,1).Select"
.insertlines x + 3, "If ActiveSheet.CommandButton1.Caption = ""Vision : Mensuel"" Then"
.insertlines x + 4, "ActiveWorkbook.ShowPivotTableFieldList = True"
.insertlines x + 5, " With ActiveSheet.PivotTables(""TCD3"").PivotFields(""Somme de Nombre d'heures"")"
.insertlines x + 6, " .Calculation = xlNormal"
.insertlines x + 7, " End With"
.insertlines x + 8, "ActiveSheet.PivotTables(""TCD3"").ColumnGrand = True"
.insertlines x + 9, "ActiveSheet.PivotTables(""TCD3"").RowGrand = True"
.insertlines x + 10, "ActiveSheet.CommandButton1.Caption = ""Vision : Cumulé"""
.insertlines x + 11, "ElseIf ActiveSheet.CommandButton1.Caption = ""Vision : Cumulé"" Then"
.insertlines x + 12, "ActiveWorkbook.ShowPivotTableFieldList = True"
.insertlines x + 13, "With ActiveSheet.PivotTables(""TCD3"").PivotFields(""Somme de Nombre d'heures"")"
.insertlines x + 14, " .Calculation = xlRunningTotal"
.insertlines x + 15, " .BaseField = ""Mois année"""
.insertlines x + 16, "End With"
.insertlines x + 17, "ActiveSheet.PivotTables(""TCD3"").ColumnGrand = True"
.insertlines x + 18, "ActiveSheet.PivotTables(""TCD3"").RowGrand = False"
.insertlines x + 19, "ActiveSheet.CommandButton1.Caption = ""Vision : Mensuel"""
.insertlines x + 20, "End if"
.insertlines x + 21, "End Sub"
End With

Range("A1").Select
End Sub


Cette macro fonctionne correctement (création du bouton et affectation de la macro dans la bonne feuille) mais quand j'ajoute ce module dans ma macro générale qui se termine par une sauvegarde (en xlsm) et une fermeture du fichier créée. je vois bien quand j'ouvre le fichier le bouton mais aucune macro affectée (en pas à pas je vois la macro qui s'affecte à la bonne feuille ds ma visu Projet de VBA) ?

Je tourne en rond ! Merci pour votre aide
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Bonjour Chasseur44 le forum
moi j'ai fait un fichier avec ta macro et cela fonctionne parfaitement.
par contre quand tu dis
mais quand j'ajoute ce module dans ma macro générale qui se termine par une sauvegarde (en xlsm) et une fermeture du fichier créée.
Ta macro s'exécute et crée le bouton et la macro dans le fichier ACTIF donc tu dois lancer la macro de ce fichier fichier que tu craies.
Enfin sans fichier et sans connaitre le reste de ce que tu appelles ta macro générale difficile de te dire plus
a+
Papou:)
 

chasseur44

XLDnaute Occasionnel
Re : Probléme macro disparait lors de l'enregistrement

Oui je sais bien mais pas facile de faire un fichier exemple avec mes données (données confidentielles sur l'absenteisme maladie d'environ 70 000 salariés).
En fait j'utilise deux fichiers : mon fichier source et un fichier macro !
Ce fichier Macro découpe le fichier maitre par niveau de structure afin de produire un suivi (Tableau de Bord) pour les différentes Directions et donc crée différentes Visions de l'absenteisme Maladie et notamment plusieurs feuilles comportant des TCD (créé par la Macro) ! jusque la tout va bien !
J'ai souhaité rajouté dans les différentes feuilles comportant des TCD un bouton permettant de basculer les TCD soit en Mensuel soit en cumulé (Mes interlocuteurs ne savent pas forcément le faire en utilisant les différentes options des TCD :))
Donc j'ai consulté le forum et j'ai adapté le code ci-dessus.
Quand je lance ce code effectivement cela marche.
Une fois que j'essaie de l'intégrer dans ma macro ! ca commence à se gater ! Pas de plantage ! cela crée bien un bouton dans la bonne feuille mais je ne vois pas de macro associée à ma feuille et bien sur le bouton n'est pas actif !
Ce qui est bizarre c'est quand je fais du pas à pas, je vois bien dans le code de ma feuille la macro s'incrémenter !!! Je n'y comprend plus rien !
Merci d'avoir regardé Paritec
 
Dernière édition:

chasseur44

XLDnaute Occasionnel
Re : Probléme macro disparait lors de l'enregistrement

J'ai essayé de faire un fichier exemple pour voir le souci !
mon fichier maitre que je souhaite découper (ds l'exemple il n'y a plus qu'une direction et deux mois) : Fichier exemple à découper.xlsx (j'ai enlevé bcp d'automatisme pour la taille !)
et ma macro avec la macro que j'ai rajouter à l'intérieur "crea_bouton_macro" : "macro découpage et cré ...."
Merci de votre aide
 

Pièces jointes

  • macro découpage et création tdb maladie par UM V4.xlsm
    58.4 KB · Affichages: 126
  • Fichier exemple à découper.xlsx
    219.8 KB · Affichages: 114

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Bonjour chasseur44 le forum
bon je suis entrain de lire tes réponses et je vais y regarder mais pas avant début d'après midi je dois m’occuper de deux de mes clients avant
a+
papou:)
 

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Re Bonjour Chasseur44 le forum
bon alors ta macro ??? !!!!! je suppose faite à 90% avec l’enregistreur de macro??
Je suppsoe que la macro doit être crée dans le fichier ci-dessous??
Code:
ActiveWorkbook.SaveAs Filename:=chemin & "\" & "Tdb Mal&AT " & Var1 & " " & nom_fic & " " & var4, FileFormat:= _
                              xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
à te relire??
si oui tu me dis aussi dans quelle feuille tu veux ta macro car je ne veux pas refaire tout ton fichier!!!
je te ferai une modif pour que tu puisses tester et que l'on avance
a+
Papou:)
 

chasseur44

XLDnaute Occasionnel
Re : Probléme macro disparait lors de l'enregistrement

Pour te répondre :
Pour la macro : oui à 90 % avec l'enregistreur de macro :(
Ta supposition est bonne pour le fichier où doit etre la macro et la feuille c'est suivi des heures travaillées !
Merci de ton aide :eek:
 

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Re Chasseur44 le forum
bon alors tu lances ta macro de création de bouton quand ? car moi je n'arrive pas à générer le fichier Tdb Mal&AT CODEUM DIRECTION 1 etc car ta macro elle plante sur sheets("données edivis ") !! je suppose que tu n'as pas de donnée dans les bonne feuille mais pas grave.
expliques moi quand tu lances la macro creation du bouton + sa macro STP ?? et comment ?? car je ne vois pas dans traitement le moment ou tu la veux
a+
Papou:)
 

chasseur44

XLDnaute Occasionnel
Re : Probléme macro disparait lors de l'enregistrement

Ah oui effectivement j'ai fait des modifs hier soir n'arrivant pas à faire marcher mon truc
Dans le code de "Traitement" tu as la macro "crea_bouton_et macro_" ! mais je ne l'utilise pas car cela ne marchait pas plus alors j'ai essayé de la balancer dans le code "crea_onglet" directement (vers la ligne 124) !
Merci de m'accorder ton aide
 

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Re Chasseur44 le forum
oui j'avais trouvé que tu l'avais intégré directement dans création des onglets, mais je viens de tester plusieurs fois et je ne suis pas plus malin que toi, j'ai bien la macro qui se crée dans la bonne feuille mais effectivement lors de l'enregistrement et de la fermeture la macro n'est plus là???
je vais continuer de chercher mais j'ai testé en fait si tu lances la macro de création d'un autre fichier que celui de destination la macro ne se mémorise pas le pourquoi?? je cherche et je reviens vers toi
a+
Papou:)
 

Staple1600

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Bonsoir à tous

Juste une variante d'écriture
VB:
Sub crea_bouton_et_macro()
Dim Ws As Worksheet, Obj As Object, cVBA$
Set Ws = ActiveSheet
Set Obj = Ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=180, Top:=5, Width:=190, Height:=25)
Obj.Object.Caption = "Vision : Cumulé"
    cVBA = "Private Sub CommandButton1_Click()" & vbCrLf
    cVBA = cVBA & "cells(5,1).Select" & vbCrLf
    cVBA = cVBA & "If ActiveSheet.CommandButton1.Caption = ""Vision : Mensuel"" Then" & vbCrLf
    cVBA = cVBA & "ActiveWorkbook.ShowPivotTableFieldList = True" & vbCrLf
    cVBA = cVBA & " With ActiveSheet.PivotTables(""TCD3"").PivotFields(""So mme de Nombre d'heures"")" & vbCrLf
    cVBA = cVBA & " .Calculation = xlNormal" & vbCrLf
    cVBA = cVBA & " End With" & vbCrLf
    cVBA = cVBA & "ActiveSheet.PivotTables(""TCD3"").ColumnGrand = True" & vbCrLf
    cVBA = cVBA & "ActiveSheet.PivotTables(""TCD3"").RowGrand = True" & vbCrLf
    cVBA = cVBA & "ActiveSheet.CommandButton1.Caption = ""Vision : Cumulé""" & vbCrLf
    cVBA = cVBA & "ElseIf ActiveSheet.CommandButton1.Caption = ""Vision : Cumulé"" Then" & vbCrLf
    cVBA = cVBA & "ActiveWorkbook.ShowPivotTableFieldList = True" & vbCrLf
    cVBA = cVBA & "With ActiveSheet.PivotTables(""TCD3"").PivotFields(""Somme de Nombre d'heures"")" & vbCrLf
    cVBA = cVBA & " .Calculation = xlRunningTotal" & vbCrLf
    cVBA = cVBA & " .BaseField = ""Mois année""" & vbCrLf
    cVBA = cVBA & "End With" & vbCrLf
    cVBA = cVBA & "ActiveSheet.PivotTables(""TCD3"").ColumnGrand = True" & vbCrLf
    cVBA = cVBA & "ActiveSheet.PivotTables(""TCD3"").RowGrand = False" & vbCrLf
    cVBA = cVBA & "ActiveSheet.CommandButton1.Caption = ""Vision : Mensuel""" & vbCrLf
    cVBA = cVBA & "End if" & vbCrLf
    cVBA = cVBA & "End Sub" & vbCrLf
With ActiveWorkbook.VBProject.VBComponents(Ws.CodeName).CodeModule
 .insertlines .CountOfLines + 1, cVBA
End With
End Sub
Le bouton est créé, le code VBA est bien inséré dans le module de la feuille.

Je te laisse tester ce qui se passe quand tu fermes le fichier.
 

chasseur44

XLDnaute Occasionnel
Re : Probléme macro disparait lors de l'enregistrement

Merci pour ton intéret à mon probème mais cela ne change rien; une fois integré à ma macro, le fichier découpé est bien créé, le bouton également mais inactif et pas de macro associée (dans le projet de vba sur la feuille : pas de macro):mad:
 

Paritec

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Bonjour Chasseur Jm le forum
non JM le problème est que avec ta macro ou la sienne, tu craies bien le bouton et le code dans la feuille, mais quand tu lances la macro sur le classeur ou tu as la macro c'est ok dans les deux cas, mais là il lance la macro de son classeur sur un autre fichier et la macro est effectivement bien écrite dans la bonne feuille mais ne s'enregistre pas.
Si tu veux essayer sans sans macro tu ouvres un fichier nommé "JM" avec ta macro et tu ouvres n'importe quel autre fichier que l'on va appeler "destination", et tu essayes de lancer ta macro de "JM" sur le fichier destination et tu auras bien la création du bouton et de la macro dans le module de la feuille, mais à l'enregistrement il ne restera dans destination que le bouton
moi j'ai tester et pas moyen de comprendre pourquoi??? Et j'avoue que si tu peux m'expliquer JM je suis preneur, car j'aime bien comprendre pourquoi et ou je fais des erreurs.
a+
Papou:)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Probléme macro disparait lors de l'enregistrement

Bonsoir à tous, Paritec ;)

Chez moi cela fonctionne
1) J'ai créé un fichier TestJMG.xlsm (vide) puis fermé ce classeur et Excel.

2) J'ouvres Excel, dans le classeur vierge (nommé Classeur1)
J'insère un module dans lequel je colle le code ci-dessous
Code:
Sub crea_bouton_et_macro_TESTOK()
Dim Ws As Worksheet, wbKDest As Workbook, Obj As Object, cVBA$
 Set wbKDest = Workbooks.Open(Filename:="C:\Temp\testJM.xlsm")
Set Ws = wbKDest.Sheets(1)
Set Obj = Ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=180, Top:=5, Width:=190, Height:=25)
Obj.Object.Caption = "Vision : Cumulé"
    cVBA = "Private Sub CommandButton1_Click()" & vbCrLf
    cVBA = cVBA & "Cells(1,1).Font.Bold=true" & vbCrLf
    cVBA = cVBA & "Cells(1,1)=""TEST""" & vbCrLf
    cVBA = cVBA & "End Sub" & vbCrLf
With wbKDest.VBProject.VBComponents(Ws.CodeName).CodeModule
 .insertlines .CountOfLines + 1, cVBA
End With
wbKDest.Close True
End Sub

3) J’exécute la macro à partir de Classeur1 (le bouton et le code VBA sont bien créés dans TestJM.xlsm)
A la fin de la macro TestJM.xlsm est fermé.

4) J'ouvre alors manuellement TestJMG.xlms
Le bouton et le code sont toujours là, et si je clique sur le bouton, c'est bien la macro présente dans le code la Feuille 1 de TestJM.xlsm qui est exécuté.
 

Discussions similaires

Réponses
1
Affichages
119
Réponses
0
Affichages
83

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87