Macro plante et repart avec F5

eretyk_1er

XLDnaute Nouveau
Bonjour à tous,

J'ai l'habitude de fouiller dans les forums pour trouver ce dont j'ai besoin, mais là je bloque...

Explication :

J'ai réalisé une macro excel qui agrandit/rétrécit un graphique, associée à l'événement 'cliquer sur le graphique'. Cela permet à l'utilisateur de réduire le graphique s'il n'en a pas besoin.

Tout fonctionnait bien, jusqu'à aujourd'hui. J'ai relancé le classeur, cliqué sur le graphique, et l'éxécution du code se stoppe (ligne surlignée en jaune).

En appuyant sur F5, la macro repart comme si de rien n'était (graphique redimensionné, variables modifiée comme il faut).
Le pas-à-pas fonctionne aussi sans problème. Pourquoi bloque-t-il alors? :confused:

Ci-joint le code. Le blocage se fait dans les deux derniers paragraphes, au niveau du .height
Remarque 1 : en inversant .height et .width, le blocage apparait sur .width
Remarque 2 : Le blocage se fait à l'agrandissement ET à la réduction du graphique
[EDIT] Remarque 3 : l'erreur au blocage est "erreur d'exécution '-2147417848 (80010108)': La méthode 'height' de l'objet 'Shape' a échouée"
Code:
Sub Agrandir_Graph_Gén()
' Créé en 2011 par J. Hoché
Dim Virgule As Boolean
Dim ListeDEtiquettes As String, ListeDeValeurs As String
Dim cellul As Range

Virgules = False
Set feuil = Sheets("Généralités")
                Application.ScreenUpdating = False
    
'_____________On met à jour les données du graphiques, en ignorant les données nulles.    
'_____________On stocke les données dans la liste 'ListeDeValeurs 
'_____________On stocke les étiquettes dans la liste ListeDEtiquettes 

For lign = 2 To 6
            Set cellul = Range("CALCULS_Tableau_Récapitulatif").Cells(lign, 3)
        If cellul.Value <> 0 Then
            ListeDEtiquettes = ListeDEtiquettes & ",CALCULS!" & cellul.Offset(0, -2).Address(ReferenceStyle:=xlR1C1)
            ListeDeValeurs = ListeDeValeurs & ",CALCULS!" & cellul.Address(ReferenceStyle:=xlR1C1)
                If Virgules = False Then
                    ListeDEtiquettes = Right(ListeDEtiquettes, Len(ListeDEtiquettes) - 1)
                    ListeDeValeurs = Right(ListeDeValeurs, Len(ListeDeValeurs) - 1)
                End If
                Virgules = True
        End If
    Next
    
'_____________Si Virgules est faux, tous les totaux sont nuls  => pas de données => on efface le graphique en entier
'_____________Dans l'autre cas, on indique au graphique ses nouvelles données.

    With feuil.ChartObjects("Graphique 394").Chart
        If Virgules = faux Then
            .SeriesCollection(1).XValues = ""
            .SeriesCollection(1).Values = ""
        Else
            .SeriesCollection(1).XValues = "=(" & ListeDEtiquettes & ")"
            .SeriesCollection(1).Values = "=(" & ListeDeValeurs & ")"
        End If
    End With
    

'_____________On agrandit/rétrécit le graphique. Quand on le rétrécit, on met un shape 
'_____________rectangulaire semi-transparent devant pour inciter l'utilisateur à cliquer dessus.
    With feuil.Shapes("Graphique 394")

     If Sheets("CALCULS").Range("Calculs_GraphGrand").Value = True Then
        Sheets("CALCULS").Range("Calculs_GraphGrand").Value = False
         feuil.Shapes("RctgleAgrandir").Visible = True
            .Top = feuil.Range("AB13").Top
            .Left = feuil.Range("AB13").Left
            .Height = 100
            .Width = 130
     Else
        Sheets("CALCULS").Range("Calculs_GraphGrand").Value = True
        feuil.Shapes("RctgleAgrandir").Visible = False
           .Top = feuil.Range("T22").Top
           .Left = feuil.Range("T22").Left
           .Height = 290
           .Width = 360
     End If
    End With

Application.ScreenUpdating = True
End Sub

D'avance merci aux bonnes âmes qui se pencheront sur la question :)
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Macro plante et repart avec F5

Bonjour
pas tester mais je te propose une solution pour la gestion du défaut,regarde si au niveau du graphique la macro travaille correctement ou si il saute l'étape .height ou .width.
Code:
Sub Agrandir_Graph_Gén()
' Créé en 2011 par J. Hoché
Dim Virgule As Boolean
Dim ListeDEtiquettes As String, ListeDeValeurs As String
Dim cellul As Range

Virgules = False
Set feuil = Sheets("Généralités")
                Application.ScreenUpdating = False
   
'_____________On met à jour les données du graphiques, en ignorant les données nulles.    
'_____________On stocke les données dans la liste 'ListeDeValeurs
'_____________On stocke les étiquettes dans la liste ListeDEtiquettes

For lign = 2 To 6
            Set cellul = Range("CALCULS_Tableau_Récapitulatif").Cells(lign, 3)
        If cellul.Value <> 0 Then
            ListeDEtiquettes = ListeDEtiquettes & ",CALCULS!" & cellul.Offset(0, -2).Address(ReferenceStyle:=xlR1C1)
            ListeDeValeurs = ListeDeValeurs & ",CALCULS!" & cellul.Address(ReferenceStyle:=xlR1C1)
                If Virgules = False Then
                    ListeDEtiquettes = Right(ListeDEtiquettes, Len(ListeDEtiquettes) - 1)
                    ListeDeValeurs = Right(ListeDeValeurs, Len(ListeDeValeurs) - 1)
                End If
                Virgules = True
        End If
    Next
   
'_____________Si Virgules est faux, tous les totaux sont nuls  => pas de données => on efface le graphique en entier
'_____________Dans l'autre cas, on indique au graphique ses nouvelles données.

    With feuil.ChartObjects("Graphique 394").Chart
        If Virgules = faux Then
            .SeriesCollection(1).XValues = ""
            .SeriesCollection(1).Values = ""
        Else
            .SeriesCollection(1).XValues = "=(" & ListeDEtiquettes & ")"
            .SeriesCollection(1).Values = "=(" & ListeDeValeurs & ")"
        End If
    End With
   

'_____________On agrandit/rétrécit le graphique. Quand on le rétrécit, on met un shape
'_____________rectangulaire semi-transparent devant pour inciter l'utilisateur à cliquer dessus.
    With feuil.Shapes("Graphique 394")

     If Sheets("CALCULS").Range("Calculs_GraphGrand").Value = True Then
        Sheets("CALCULS").Range("Calculs_GraphGrand").Value = False
         feuil.Shapes("RctgleAgrandir").Visible = True
            .Top = feuil.Range("AB13").Top
            .Left = feuil.Range("AB13").Left
on error resume next           
 .Height = 100
            .Width = 130
     Else
        Sheets("CALCULS").Range("Calculs_GraphGrand").Value = True
        feuil.Shapes("RctgleAgrandir").Visible = False
           .Top = feuil.Range("T22").Top
           .Left = feuil.Range("T22").Left
            .Width = 360
           .Height = 290
     End If
    End With

Application.ScreenUpdating = True
End Sub

A+
 

solquagerius

XLDnaute Junior
Re : Macro plante et repart avec F5

Salut,

c'est bizzare comme bug, c'est comme si y'avait un point d'arrêt à cette ligne finalement ? Est-ce qu'Excel aurait pu garder en mémoire un point d'arrêt que t'as mis avant et ait "oublié" de l'enlever ???? (bug Excel)
Tu as essayé de copier/coller ton code dans un autre classeur pour voir si ça fait la même chose ?
 

eretyk_1er

XLDnaute Nouveau
Re : Macro plante et repart avec F5

@ solquagerius : C'est l'idée. Ya quand même un message d'erreur (je viens d'éditer mon post) mais sinon c'est ça.
Je tente le code dans un nouveau classeur...
@Fhoest : Tout se passe normalement à part l'arrêt inopiné.
 

eretyk_1er

XLDnaute Nouveau
Re : Macro plante et repart avec F5

Pas de soucis dans un nouveau classeur :\

J'ai fermer-relandé excel, ca ne plante plus.

Le hic c'est que ce classeur est un outils de relation entreprise-clients. Si il plante devant les clients, il vont faire une drôle de tête devant un pop-up de VBA.

Vous auriez une idée de l'origine du problème?
 
Dernière édition:

solquagerius

XLDnaute Junior
Re : Macro plante et repart avec F5

Avec l'erreur que tu donnes (mais j'imagine que tu l'as déjà recherchée sur google :p), ça me semble être un problème non lié au programme... mais plutôt l'environnement. Je m'y connais pas trop de ce côté...
Runtime Error 80010108 - Disconnected Object Problems, Anyone?

Si c'est vraiment une "déconnexion d'objet", tu peux ptet faire un "on error goto" et réinitialiser l'objet, puis revenir à la ligne d'exécution.
 

eretyk_1er

XLDnaute Nouveau
Re : Macro plante et repart avec F5

J'imagine que l'initialisation se fait au démarrage du classeur, et qu'elle bug de temps en temps (le classeur est bien rempli, peut-être que ça joue).

Comme l'erreur a disparu à la réouverture, ça va être difficile de la gérer maintenant... Je regarderai comment réinitialiser l'objet la prochaine fois que ca me le fait (si ça me le refait!)

Merci pour le coup de pouce :)


EDIT: Ca a replanté...
Cette fois ci redémarré excel ne suffisait pas. Je n'ai pas réussi à réaliser la manip pour réinitialiser le graphique. (BOGUE : Message d'erreur Run-Time-2147417848 (80010108) lors de la transmission de tableau d'objets Dictionary)
Je l'ai donc copié-collé, effacé l'original, puis j'ai renommé la copie avec le nom de l'original.
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
168
Réponses
0
Affichages
153

Statistiques des forums

Discussions
312 219
Messages
2 086 369
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang