VBA : plantage d'excel au lancement successif de 2 macros

dionys0s

XLDnaute Impliqué
Bonjour/soir le forum :)

petit soucis, je ne suis absolument pas certain de trouver une solution. Voici mon problème.

J'ai une feuille comportant un tableau croisé dynamique qui s'actualise en cliquant sur un bouton. J'ai une premiere macro dans un module qui supprime des boutons qui sont obsolètes du fait de l'actualisation du classeur, et une deuxième macro qui recrée tous les boutons nécessaires.

Si je lance les 3 procédures de manière distinctes (clic pour actualiser le TCD, puis lancement de la macro 1 puis lancement de la macro 2), tout se passe c'est c'est glop youpi.

Mais si je modifie le code de mon bouton comme suit :
Code:
Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
Application.ShowWindowsInTaskbar = False

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
Range("B3").Select
Selection.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, Orientation:=xlTopToBottom

Call SupprimerLesBoutons
Call AjouterLesBoutons

End Sub

Là Excel plante. Y a-t-il une cause - sur laquelle je puisse influer - à cet étrange phénomène ? :confused:

D'avance merci pour votre aide ^^
 

Pièces jointes

  • Exemple.zip
    27.9 KB · Affichages: 72
  • Exemple.zip
    27.9 KB · Affichages: 67
  • Exemple.zip
    27.9 KB · Affichages: 82
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Pour info, le code des deux macros :
Code:
Sub SupprimerLesBoutons()

For r = 2 To Range("I65536").End(xlUp).Row - 1
ActiveSheet.Shapes("CommandButton" & r).Delete

Dim Debut As Integer, Lignes As Integer

    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        Debut = .ProcStartLine("CommandButton" & r & "_Click", 0)
        Lignes = .ProcCountLines("CommandButton" & r & "_Click", 0)
        .DeleteLines Debut, Lignes
    End With

Next r

End Sub

Code:
Sub AjouterLesBoutons()

Application.ScreenUpdating = False

Dim i As Integer
For i = 3 To Range("B65536").End(xlUp).Row

    Dim Ws As Worksheet
    Dim Obj As OLEObject
    Dim laMacro As String
    Dim x As Integer

    Set Ws = Sheets(Sheets.Count)

    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
        .Left = "154,5"
        .Top = "12,75" * (i - 1) + "0,75"
        .Width = "60,75"
        .Height = "12,75"
        .Object.Caption = ""
    End With

    laMacro = "Private Sub CommandButton" & i - 1 & "_Click()" & vbCrLf & vbCrLf
    laMacro = laMacro & "Dim Valeur as String" & vbCrLf
    laMacro = laMacro & "Valeur = Cells(" & i & ", 2).Value" & vbCrLf
    laMacro = laMacro & "MsgBox Valeur" & vbCrLf & vbCrLf
    laMacro = laMacro & "End Sub"

With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
x = .CountOfLines + 1
    .InsertLines x, laMacro
End With

Cells(i, 9).FormulaR1C1 = "ok"

Next i

End Sub
 

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Private Sub Edit: Je manque à toutes les règles de politesse.
Bonsoir Paritec
End Sub

Hum... a trois je vais passer pour un tocard.

1.
2.
3.

Comment on gère les Doevents ? Je veux dire quelles en sont les règles ? Je vais aller fouiner sur la toile mais je suis preneur de tout conseil ^^

En tout cas merci pour celui-ci :) Je sais que tout n'est pas perdu comme ça :)
 

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

J'ai adapté le comme comme suit (je ne sais pas du tout si c'est la bonne adaptation mais ça n'a pas bugé. Excel a planté, mais pas la macro) :

Code:
Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
Application.ShowWindowsInTaskbar = False

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
Range("B3").Select
Selection.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, Orientation:=xlTopToBottom

DoEvents
Call SupprimerLesBoutons
DoEvents
Call AjouterLesBoutons

End Sub
Mais ca ne marche pas.

Par contre quand je n'appelle que la premiere macro, et pas la deuxième, ca ne plante pas.
Edit : j'ai fait le test inverse. J'ai supprimé mes boutons au préalable, puis actualisé le TCD et fait un call AjouterLesBoutons, et là ca a planté. C'est donc ma macro AjouterLesBoutons qui fait planter excel...
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Bonjour MJ13

J'y ai pensé mais c'est pas la macro qui plante... C'est excel qui n'y arrive pas. Quand j'execute la macro toute seule, (sans l'incorporer à la suite de l'actualisation du TCD), elle tourne sans problème. C'est quand je l'appelle à partir du bouton qui me sert à actualiser le TCD que Excel plante. Pas la macro. Du coup je suppose que le debogger me servira à rien...
En plus il y a quasiment que des procédures qui ne s'executent pas en pas à pas.
 

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Re Michel :)

J'ai suivi ton conseil. J'ai donc executé le code suivant en pas à pas en ayant mis des stop partout dans les macros appelées (puisque je ne sais pas d'où vient le plantage.

Le code dans la feuille :
Code:
Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
Application.ShowWindowsInTaskbar = False

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
Range("B3").Select
Selection.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, Orientation:=xlTopToBottom

Call SupprimerLesBoutons
Call AjouterLesBoutons

End Sub

Le message d'erreur :

Erreur d'exécution '-2147417848 (80010108)':

Erreur Automation
L'objet invoqué s'est déconnecté de ses clients

Fin du message d'erreur.
Aucune ligne n'apparait sur fond jaune :confused:

Edit: Je prépare le fichier plutot pour demain matin je pense...
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Rebonsoir le forum

Tout compte fait j'ai préparé le fichier test ce soir.
Le voici en pièce jointe.

Il y a juste 2 macros dans un module et une dans la Feuil10.
J'ai tout testé et retesté. Bilan :
Tout fonctionne quand tout est exécuté séparément, à savoir l'actualisation du TCD via le bouton sur la Feuil10, puis avec alt+F8 la macro SupprimerLesBoutons, puis la macro AjouterLesBoutons (toujours avec avec alt+F8).

Si je rajoute Call SupprimerLesBoutons à la fin de module Feuil10, puis alt+F8 AjouterLesBoutons là encore ça marche.

Mais si je rajoute Call AjouterLesBoutons après Call SupprimerLesBoutons, là ça ferme excel.

Dans la pièce jointe, à l'ouverture, tous les boutons sont en place. L'actualisation du TCD ne changera rien mais je l'ai laissé tout de même.

Je pense avoir tout mis.

D'avance merci pour votre aide
 

Pièces jointes

  • Exemple.zip
    27.9 KB · Affichages: 66
  • Exemple.zip
    27.9 KB · Affichages: 70
  • Exemple.zip
    27.9 KB · Affichages: 71

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Re

Je progresse... J'ai supprimé la fin du code de la macro AjouterLesBoutons et ça marche ! Bon le problème c'est qu'il me manque la fin du code, qui est ultra important. Je vais voir ce qu'il se passe si je le met dans une autre macro, mais j'ai des doutes...

Edit: le code supprimé :

Code:
Sub sauvegarde()

    Dim i As Integer
    For i = 3 To Range("B65536").End(xlUp).Row
    Dim laMacro As String
    Dim x As Integer

    laMacro = "Private Sub CommandButton" & i - 1 & "_Click()" & vbCrLf & vbCrLf
    laMacro = laMacro & "Dim Valeur as String" & vbCrLf
    laMacro = laMacro & "Valeur = Cells(" & i & ", 2).Value" & vbCrLf
    laMacro = laMacro & "MsgBox Valeur & chr(10) & Left(Valeur, 3)" & vbCrLf & vbCrLf
    laMacro = laMacro & "End Sub"

With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
x = .CountOfLines + 1
    .InsertLines x, laMacro
End With

Next i

End Sub

Ceci me servait à insérer du code pour chaque bouton.
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Bonjour le forum

je me permets de faire un up de ce topic vu que j'y ai mis un fichier exemple hier soir.
J'ai refait des tests, et c'est bel et bien la macro AjouterLesBoutons qui fait planter Excel (pas la macro. La macro s'execute jusqu'au bout sans problème, et Excel plante à la fin et lance la récupération de document.)

D'avance merci pour votre aide ^^
 

Pièces jointes

  • Exemple.zip
    27.9 KB · Affichages: 73
  • Exemple.zip
    27.9 KB · Affichages: 77
  • Exemple.zip
    27.9 KB · Affichages: 66

MJ13

XLDnaute Barbatruc
Re : VBA : plantage d'excel au lancement successif de 2 macros

Re

Dionysos: est-ce que le fchier plante chez toi en appuyant sur le bouton Test.
 

Pièces jointes

  • Exemple3.zip
    24.6 KB · Affichages: 85
  • Exemple3.zip
    24.6 KB · Affichages: 86
  • Exemple3.zip
    24.6 KB · Affichages: 80
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Bonjour Michel. Bonjour le fil.
Merci d'avoir pris le temps de regarder pour moi.

Le fichier ne plante pas. Je vais aller regarder le code de ce pas.

Merci beaucoup en tout cas ! Je tiendrai informé du rendu final.
 

dionys0s

XLDnaute Impliqué
Re : VBA : plantage d'excel au lancement successif de 2 macros

Re

Michel, je ne suis pas certain de comprendre comment tu as fait ?
C'est quel type de bouton que tu as mis ? Je n'ai pas l'impression qu'il s'agisse d'un commandbutton comme ceux que j'insère.

Encore merci en tout cas.