Erreurs avec Datalabel ou bug VBA ?[Résolu]

Guy_M

XLDnaute Occasionnel
Bonjour,

Je modifie un graphique à chaque visite de la feuille le contenant par VBA via un Worksheet_Activate ou un appel depuis Worksheet_Change.

Cela fonctionne parfaitement sauf lors de la première visite de la feuille où j'ai le droit à une erreur
'"La méthode 'Text' de l'objet 'DataLabel' a échoué"
'Err.Number : -2147467259

Si je clique sur débogage, le programme est arrêté au niveau d'un 'if' qui teste "SerieCourante.DataLabels(1).Text"
Un espion sur cette objet m'indique qu'il est bien instancié et qu'il a une valeur "7" et si je poursuis l'exécution avec un pas à pas détaillé (F8) tout se passe "nominalement" (je n'ai plus de message d'erreur). :confused:

Je n'arrive pas à "capturer" l'erreur.

Un "error resume next" permettrait de contourner l'erreur, mais si une vrai erreur intervient je ne la verrai plus.

Pour essayer d'être plus clair, j'ai joint un extrait de mon fichier. Pour reproduire l'erreur, ouvrir le fichier, autoriser les macros dans le fichier, cliquez sur l'onglet "Synth." Quand on ne fait pas dans cet ordre l'erreur ne se produit pas ! On dirait que VBA va plus vite que Excel.

En espérant que cela piquera votre curiosité.

J'attends vos commentaires voir vos solutions.

Par avance, merci
A bient
 

Pièces jointes

  • PbDataLabel.xlsm
    38.4 KB · Affichages: 48
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Erreurs avec Datalabel ou bug VBA ?

Bonjour Guy_M le forum
alors moi ce qui me pique c'est tes explications, si tu pouvais donné ton virus à tout les demandeurs je serais très heureux.
Ton Explication est parfaite en tout point et je vais de ce pas essayer de te trouver le pourquoi de ton bug
En tout cas Bravo pour ta demande claire et précise
a+
Papou:eek:
 

Paritec

XLDnaute Barbatruc
Re : Erreurs avec Datalabel ou bug VBA ?

Re Bonjour Guy_M le forum
bon alors pour une fois que les explications sont limpides, je n'arrive pas à reproduire le défaut en respectant à la lettre à l'ouverture du fichier, je ne touche rien et je clique Synt et là aucune erreur chez moi j'ai refait la manip 10 fois !!
Une différence par rapport à ton descriptif est que je n'active pas les macros manuellement, j'active systématiquement les macros dans les fichiers !!!
Peut-être peux-tu faire le test pour voir si chez toi cela change quelque chose ou non d'activer systématiquement les macros?
a+
Papou:eek:

EDIT: Bonjour Pierrot:eek:
 
Dernière édition:

Guy_M

XLDnaute Occasionnel
Re : Erreurs avec Datalabel ou bug VBA ?

Bonjour,

Merci Paritec et Pierrot93 d'avoir regardé.

Si je suis si précis, d'abord parce que j'ai tourné et retourné le problème dans tous les sens, ensuite a force de fréquenter ce forum, j'ai compris que pour avoir une réponse de qualité, il faut poser une question de qualité, encore plus quand le problème est évanescent comme celui-ci.

C'est bien le pire de ce que je pouvais craindre, c'est très très difficilement reproductible.

Bonne nouvelle, ma macro fonctionne ailleurs que sur mon ordinateur.

J'ai changé mes paramètre d'exécution des macros, le problème persiste.

Mais avec
Code:
if SerieCourante.Points(1).DataLabel.Characters.Text
plus de problème mais je ne comprends pas pourquoi
Code:
If SerieCourante.DataLabels(1).Text"
bogue au démarrage, est-ce un bug excel lié à ma configuration ?

A bientôt
Guy
 
Dernière édition:

Guy_M

XLDnaute Occasionnel
Re : Erreurs avec Datalabel ou bug VBA ?

La joie a été de courte durée :
Code:
SerieCourante.Points(1).DataLabel.Characters.Text
et
Code:
SerieCourante.DataLabels(1).Text
ne retournent pas la même valeur, du coup ma procédure ne fonctionne plus :(

Retour à la case départ.
 

Guy_M

XLDnaute Occasionnel
Re : Erreurs avec Datalabel ou bug VBA ?

La bonne valeur est dans l'objet qui génère le bug :-(
Code:
SerieCourante.DataLabels(1).Text

après plusieurs tests, il semble que
Code:
SerieCourante.DataLabels.Item(1)
n'existe pas au premier appel dans la boucle

Je vais tester si en forçant le dessin du graphique en début de procédure l'erreur disparaît.
 

Pierrot93

XLDnaute Barbatruc
Re : Erreurs avec Datalabel ou bug VBA ?

Re,

Aarf en fait dans ton graph tu n'as pas une seule série... mais 11... faut donc boucler sur les séries et renvoyer la première valeur, regarde peut être ceci, enfin si j'ai bien compris :

Code:
Option Explicit
Sub test()
Dim s As Series
For Each s In ActiveSheet.ChartObjects(1).Chart.SeriesCollection
    MsgBox s.Values(1)
    If s.Values(1) = 0 Then s.HasDataLabels = False
Next s
End Sub
 

Guy_M

XLDnaute Occasionnel
Re : Erreurs avec Datalabel ou bug VBA ?

Du coup j'ai nettoyé le code de la procédure

VB:
Sub Worksheet_Activate()
'
' GraphChangeCouleurSerie Macro
'
Dim SerieCourante As Series
Dim Ligne As Long
Dim CellTotal As Range 'Cellule contenant le nombre total de dossiers
Dim EspaceDeRecherche As Range
Dim Reponse As VbMsgBoxResult
Dim Protege As Boolean

On Error GoTo GestionErreurs

Protege = Me.ProtectContents

If Protege Then Me.Unprotect

'Recherche de la cellule contenant le nombre de dossiers
'+++Pour être plus fin pourquoi ne pas utiliser une cellule nommé "CellTotal" ?
Set EspaceDeRecherche = Range("C:C")
For Each CellTotal In EspaceDeRecherche
    If CellTotal = "" Then Exit For
Next CellTotal
Set CellTotal = Cells(CellTotal.Row - 2, CellTotal.Column)


Application.EnableEvents = False
With ChartObjects("Graphique 1").Chart
'Applique au graphique les couleurs définies dans les cellules pour les états et masque les étiquettes des valeurs nulles
    For Each SerieCourante In .SeriesCollection
        Ligne = WorksheetFunction.Match(SerieCourante.Name, Range("B1:B20"), 0)
        SerieCourante.Format.Fill.Solid
        SerieCourante.Format.Fill.ForeColor.RGB = Cells(Ligne, 2).Interior.Color
            
        If SerieCourante.Values(1) = 0 Then 'On masque l'étiquette car la valeur est 0
            SerieCourante.HasDataLabels = False
        Else 'Sinon l’étiquette doit apparaître dans la bonne couleur 
            SerieCourante.HasDataLabels = True
            SerieCourante.DataLabels.ShowValue = True
            SerieCourante.DataLabels.Font.Color = Cells(Ligne, 2).Font.Color
        End If
    Next SerieCourante

    'Limite l'axe principal au nombre de données
    .Axes(xlValue).MaximumScaleIsAuto = False
    .Axes(xlValue).MaximumScale = CellTotal.Value
    .Axes(xlValue).MinimumScaleIsAuto = False
    .Axes(xlValue).MinimumScale = 0
    .Axes(xlValue).MajorUnit = (CellTotal.Value / 4)
End With

GoTo SortiePropre

GestionErreurs:
Err.Source = Err.Source & " dans la procédure ""Worksheet_Activate"" de " & ActiveSheet.Name 'Personalisation de la source de l'erreur
Reponse = MsgBox("Erreur : " & Err.Number & " - " & Err.Description & " dans " & Err.Source, vbCritical + vbSystemModal, "Une erreur s'est produite à l'exécution")

SortiePropre:
If Protege Then Me.Protect
Application.EnableEvents = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 756
Messages
2 091 734
Membres
105 060
dernier inscrit
DEDJAN Gaston