IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Erreur d'éxecution '1004'


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut [VBA-E] Erreur d'éxecution '1004'
    Bonjour à tous!

    Je souhaite créer une macro qui mette à jour les sources de données d'un graphique.
    Ce graphique possède 2 séries.

    La macro reçoit 3 arguments :
    1°) La ligne max
    2°) La colonne 1 (correspondant aux données de la séries 1)
    3°) La colonne 2 (correspondant aux données de la séries 2)

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub PourcentCmdParFN(intNbRows, intCol1, intCol2)
    '
    ' PourcentCmdParFN Macro
    ' Macro enregistrée le 03/01/2007 par administrateur
    '
     
    '
        ActiveChart.SeriesCollection(2).XValues = "='Commandes FN'!R4C1:R" & (3 + intNbRows) & "C1"
     
        ActiveChart.SeriesCollection(2).Values = "='Commandes FN'!R4C" & intCol2 & ":R" & (3 + intNbRows) & "C" & intCol2
     
        ActiveChart.SeriesCollection(1).XValues = "='Commandes FN'!R4C1:R" & (4 + intNbRows) & "C1"
     
        If intCol2 > 4 Then
            ActiveChart.SeriesCollection(1).Values = "='Commandes FN'!R4C" & intCol1 & ":R" & (3 + intNbRows) & "C" & intCol1
        Else
            ActiveChart.SeriesCollection(1).Values = "={0}"
        End If
     
    End Sub
    Je lance cette macro à partir d'un prog VB.Net (framework 1.1), et j'utilise MS Excel 2000 SP-3.

    A l'éxecution, l'erreur suivante apparait :
    Erreur d'éxection '1004'
    La méthode 'seriescollection' de l'objet '_chart' a échoué
    L'erreur intervient sur la 1ère ligne.
    Voici la manière dont j'appelle la macro : PourcentCmdParFN(14, 14, 15)

    Merci pour votre aide!
    Lionel.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    A la place de
    ActiveChart.SeriesCollection(2).XValues = "='Commandes FN'!R4C1:R" & (3 + intNbRows) & "C1"
    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Valeur = Worksheets("Commandes FN").Range(Cells(Activecell.row+4,Activecell.column+1), _
    cells(3 + intNbRows,Activecell.row+1)).value
        ActiveChart.SeriesCollection(2).XValues = Valeur
    Si l'erreur passe à la deuxième ligne, c'est que c'est bon
    A+

    PS - en espérant ne pas m'être trompé dans le passage des adresses...

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Si j'ai bien compris, tu as un classeur Excel avec un graphique, et tu souhaites modifier le graphique via un programme externe écrit en vb.net? Je me trompe?

    Le code que tu proposes est un code VBA, issu du classeur contenant le graphique? Je me trompe?


    Dans ce cas,
    n'est pas un objet valide.
    Tu dois, dans ton code vb.net
    - utiliser une référence à Excel
    - créer un objet excel.workbook et ouvrir le fichier contenant le graphique
    - créer un objet excel.chart(*) pointant vers le graphique que tu veux modifier
    - modifier ton code en remplaçant ActiveChart par l'objet Chart créé

    (*) Je n'ai pas vérifié l'appellation exacte, à toi de voir, notamment dans l'aide de VB.Net lié à Office.

    Ok?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, Pierre, tu as raison mais, pour ma propre gouverne, peut-on utiliser la formule Excel "='Commandes FN'!R4C1:R" & (3 + intNbRows) & "C1" dans ce cas-là ?

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par ouskel'n'or
    Oui, Pierre, tu as raison mais, pour ma propre gouverne, peut-on utiliser la formule Excel "='Commandes FN'!R4C1:R" & (3 + intNbRows) & "C1" dans ce cas-là ?
    Non, XValues demande une variable string.

    Lorsque l'on veut référencer une plage, on utilise la propriété FORMULA comme pour un objet Cell ou Range.

    Dans l'image zippée jointe, on voit les propriétés et leur valeur dans un espion VBA... (C'est parfois utile, l'espion VBA... )

    Ai-je répondu?

    Bonne année Ouskel'n'or

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    En effet, on voit plein de choses... C'est ta copine qui s'appelle Martine ?
    Pour la formule, je respire, j'ai cru que j'avais raté un cours
    Bonne année à toi aussi, Pierre

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    C'est même mon épouse...

    La prochaine fois, je nettoyerai mieux mes données

    A bientôt

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut
    Bonjour! Et merci à vous 2 pour votre aide!

    Pierre, pour résumer, j'ai un classeur excel avec des macro (enregistrées à l'aide de l'outil excel). J'ai rajouté des paramètres à ces macros pour quelles soient génériques.
    J'ai bien un programme externe en vb.net, mais celui ne fait pas la mise à jour. Il se contente d'exécuter les macros en leur indiquant les nouveaux paramètres...

    ouskel'n'or, j'ai effectué le changement que tu m'as demandé :
    Erreur d'éxécution '91'
    Variable objet ou variable de bloc non définie
    Cette erreur apparait à l'affectation de la variable 'valeur'. J'ai rajouté un "Dim valeur as string", mais ça change rien.

    Par contre j'ai moi même modifié quelques petites choses. En fait j'ai modifié l'ordre de la mise à jour. Au début je commençais par mettre à jour la série 2, puis la série 1; cette fois-ci j'ai fait l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub PourcentCmdParFN(strNbFN, intCol1, intCol2)
    '
    ' PourcentCmdParFN Macro
    ' Macro enregistrée le 03/01/2007 par administrateur
    '
     
    '
     
        ActiveChart.SeriesCollection(1).XValues = "='Commandes FN'!R4C1:R" & (3 + strNbFN) & "C1"
     
        ' Si le mois en cours n'est pas janvier
        If intCol2 > 4 Then
            ActiveChart.SeriesCollection(1).Values = "='Commandes FN'!R4C" & intCol1 & ":R" & (3 + strNbFN) & "C" & intCol1
        Else
     
            ActiveChart.SeriesCollection(1).Values = "={0}"
        End If
     
     
        ActiveChart.SeriesCollection(2).XValues = "='Commandes FN'!R4C1:R" & (3 + intNbFN) & "C1"
     
        ActiveChart.SeriesCollection(2).Values = "='Commandes FN'!R4C" & intCol2 & ":R" & (3 + strNbFN) & "C" & intCol2
     
     
    End Sub
    Et bien ce coup-ci, la màj de la série 1 a fonctionnée. L'erreur apparaît encore à la même instruction : "ActiveChart.SeriesCollection(2).XValues =..."

    PS : Bonne année !!!

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut
    L'erreur vient bien de la série 2.

    J'ai modifié ma macro en rajoutant un paramètre : intSerie. Et je l'appelle 2 fois, une fois pour chaque série. J'ai également rajouté des mouchards.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub PourcentCmdParFN(intSerie, intNbFN, intCol1)
     
    ' PourcentCmdParFN Macro
    ' Macro enregistrée le 03/01/2007 par administrateur
    '
     
    '
        Range("A1") = intSerie & " : Mouchard0"
     
        ActiveChart.SeriesCollection(intSerie).XValues = "='Commandes FN'!R4C1:R" & (3 + intNbFN) & "C1"
        Range("A1") = intSerie & " : Mouchard1"
        ActiveChart.SeriesCollection(intSerie).Values = "='Commandes FN'!R4C" & intCol1 & ":R" & (3 + intNbFN) & "C" & intCol1
        Range("A1") = intSerie & " : Mouchard2"
     
    End Sub
    J'execute ensuite ma macro à partir de mon prog VB.net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlApp.Run("PourcentCmdParFN", 1, intNbFN, intMois + 2)
    xlApp.Run("PourcentCmdParFN", 2, intNbFN, intMois + 3)
    L'erreur apparait (toujours la même). La cellule 'A1' affiche "2 : Mouchard0"...

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Points : 110
    Points
    110
    Par défaut
    Me revoilà!

    J'ai trouvé mon erreur !!! Et il était quasiment impossible que vous la trouviez sans avoir TOUT mon code sous les yeux...

    En fait ce qu'il s'est passé, c'est que dans mon prog vb.net j'éxécutais une autre macro avant celle-ci, qui mettait à jour un autre graphique... avec une seule série...

    Forcément, comme je ne sélectionnais pas le nouveau graphique (celui à 2 séries) dans ma macro PourcentCmdParFN(), elle travaillait toujours sur le premier graphique (celui à 1 série)...

    Enfin voilà! c'est résolu!

    Encore merci pour votre aide! Et une trèèès bonne année à vous et à toute l'équipe Developpez.com !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. message d'erreur d'éxecution '1004'
    Par VELO1222 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/01/2011, 15h56
  2. [VBA][export] Erreur d'exécution '1004'
    Par le_niak dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2008, 20h33
  3. [VBA-E] erreur d'execution '1004' sur masquage feuille
    Par Cupoftea dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 18h34
  4. [VBA-E] Erreur d'exécution '1004'
    Par bibi5883 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2007, 14h31
  5. [VBA-E] erreur d'exécution 1004 ?
    Par toy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo