[Catégorie modifiée VB6 --> VBA] VBA : Erreur d'exécution '-2147417848 (80010108

jojosbb00 Messages postés 2 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 22 juillet 2010 - 22 juil. 2010 à 18:32
jojosbb00 Messages postés 2 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 22 juillet 2010 - 22 juil. 2010 à 19:22
Bonjour,

C'est dans un état de dépression que je viens vous demander de l'aide.

Voici maintenant 2 jours que j'erre sur un problème VBA dont je ne comprends pas la nature.

J'en suis à la fin du développement d'un moyen programme sur VBA qui implique la création de worksheet, l'ouverture d'autres classeurs pour y copier des données et enfin la création de graphiques avec les données ainsi reprises (et en meme temps un peu modifiées).

C'est ce dernier point qui me pose problème. J'ai en effet découper mon programme en plusieurs modules avec chacuns une tâche particulière. Lorsque je joins le dernier module (création de graphiques) aux autres, le programme plante. Si je ne le lance pas en même temps, tout va bien.

L'erreur est : Erreur d'exécution '-2147417848 (80010108)' et le détail : "La méthode 'chartArea de l'objet '_chart' a échoué". La ligne surlignée est :"graph1.ChartArea.Clear" (cf code plus bas)

Par ailleurs, une fois que j'appuie sur "fin" pour quitter la boite de dialogue de l'erreur, il m'est impossible d'aller sur mon classeur Excel qui plante systématiquement. Il faut soit que j'effecture un Ctrl+alt+supr pour fermer et rouvrir le programme, soit que je tente de sauvegarder sous VBA pour qu'un message de Microsoft Excel de plantage me propose d'envoyer un rapport d'erreur à Microsoft et me relance mon Excel.

En me renseignant sur ce type d'erreur, il se pourrait qu'elle ait pour origine un appel à une fonction dejà fermée. Cependant, mon module "graph" ne fait que tracer des graphiques. Il fait bien appel à des worksheet du classeur courant, mais rien de plus. A savoir, qu'il m'arrive de réussir à lancer le module graphique indépendamment.

Pour vous éclaircir sur le fonctionnement global de mon appli. Lorsque j'ouvre mon fichier "prog.xls", il n'y a qu'une feuille "accueil" sur laquelle il y a un bouton CmdButton qui appel un userform (nommé UserForm1) par la fonction : UserForm1.UserForm1_Initialize

Dans cet userform, l'utilisateur renseigne deux trois broutilles dans des textbox et autres combobox avant de lancer l'appli grâce au CmdButton "go" qui appelle la sub du premier module "macro_go".

C'est dans ce module (macro_go) que je lance toutes les autres sub des autres modules. Pour rappel, tout marche bien lorsque je lance toutes les sub sauf celle du module "graph"

Comme test, j'ai pris un bout de code du module graph et je l'ai mis dans mon module macro_go pour tenter d'y voir plus clair. Voici les deux codes de mon module macro_go, le premier normal qui engendre l'erreur d'exécution ; et le deuxième avec le bout de code qui renvoie la même erreur. La ligne surlignée est "graph1.ChartArea.Clear" (cf code plus bas).

A savoir que j'ai mis en variable globale les divers worksheet qui sont appelés dans la macro graphique ("Graph" ). L'erreur était la même quand je déclarais les worksheet comme : Set ws = Application.workbook("prog.xls" ).worksheet("bla bla b.." ) ..




Option Explicit

Public mois As String
Public entite As String
Public annee As String


'*******************************************************************
'Macro générale de création de reporting
'Date : 13/07/10
'Dernière update : 13/07/10
'Auteur : Joel Barenco
'*******************************************************************

Sub macro_go(m As String, a As String, e As String)

    Dim r As Variant
    Dim w As Worksheet
   
    '--------------------------------------------------------------
    'TEMPORAIRE - A ENLEVER
    '--------------------------------------------------------------
   
    mois = m
    entite = e
    annee = a

    '--------------------------------------------------------------
    'Initialisation
    '--------------------------------------------------------------
   
    'On supprime les feuilles déjà créées si on veut lancer plusieurs
    'fois de suite le reporting
    Application.DisplayAlerts = False
    For Each w In Worksheets
    If Not (w.Name = "Accueil" ) Then
       w.Delete
    End If
    Next w
    Application.DisplayAlerts = True
   
    '--------------------------------------------------------------
    'Lancement des sous-macro
    '--------------------------------------------------------------
   
    r = Application.run("Prog.xls!IA.IA" )
    r = Application.run("Prog.xls!Incidents.Incidents" )
    r = Application.run("Prog.xls!FA.FA" )
   
    '--------------------------------------------------------------
    'Mise en forme
    '--------------------------------------------------------------
   
    r = Application.run("Prog.xls!MEP.MEP" )
   
    '--------------------------------------------------------------
    'Création des graphismes
    '--------------------------------------------------------------
   
    r = Application.run("Prog.xls!Graph.Graph" )
   
End Sub
 




Option Explicit

Public mois As String
Public entite As String
Public annee As String


'*******************************************************************
'Macro générale de création de reporting
'Date : 13/07/10
'Dernière update : 13/07/10
'Auteur : Joel Barenco
'*******************************************************************

Sub macro_go(m As String, a As String, e As String)

    Dim r As Variant
    Dim w As Worksheet
   
    '--------------------------------------------------------------
    'TEMPORAIRE - A ENLEVER
    '--------------------------------------------------------------
   
    mois = m
    entite = e
    annee = a

    '--------------------------------------------------------------
    'Initialisation
    '--------------------------------------------------------------
   
    'On supprime les feuilles déjà créées si on veut lancer plusieurs
    'fois de suite le reporting
    Application.DisplayAlerts = False
    For Each w In Worksheets
    If Not (w.Name = "Accueil" ) Then
       w.Delete
    End If
    Next w
    Application.DisplayAlerts = True
   
    '--------------------------------------------------------------
    'Lancement des sous-macro
    '--------------------------------------------------------------
   
    r = Application.run("Prog.xls!IA.IA" )
    r = Application.run("Prog.xls!Incidents.Incidents" )
    r = Application.run("Prog.xls!FA.FA" )
   
    '--------------------------------------------------------------
    'Mise en forme
    '--------------------------------------------------------------
   
    r = Application.run("Prog.xls!MEP.MEP" )
   
    '--------------------------------------------------------------
    'Création des graphismes
    '--------------------------------------------------------------
   
    '*************************************************************
    'TEST
    '*************************************************************
            Dim position As Integer
            Dim p_inci_1 As range
            Dim plage As range
            Dim graph1 As Chart
           
            position = 1
           
            '------------------------------------------------------------
            'Mise en place des références Range
            '------------------------------------------------------------
            With wsIncidents
                Set p_inci_1 = .range(.Cells(3, 3), .Cells(3, 3).End(xlDown)).Resize(, 5)
            End With
           
            '------------------------------------------------------------
            'Définition du graphique
            '------------------------------------------------------------
            With ws
                Set plage = .range(.Cells(7 + position * 56, 2).Address & ":" & .Cells(23 + position * 56, 17).Address)
                Set graph1 = .ChartObjects.Add(plage.Left, plage.Top, plage.Width, plage.Height).Chart
            End With
            graph1.ChartArea.Clear
            graph1.ChartType = xlXYScatter

           
    '*************************************************************
    '/TEST
    '*************************************************************
   
    'r = Application.run("Prog.xls!Graph.Graph" )
   
End Sub
 



Merci de votre aide !

2 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
22 juil. 2010 à 19:19
Bonjour,

Pour vider la liste des séries, il faut qu'aucune série ne soit vide.
J'ai galérer un moment aussi :)

Mon site
0
jojosbb00 Messages postés 2 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 19:22
Bonjour NHenry,

Effectivement en omettant les deux lignes :
graph1.ChartArea.Clear
graph1.ChartType = xlXYScatter
ca marche !!!!



Thanks a lot !
0
Rejoignez-nous