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 :

Erreur 1004: Impossible de définir la propriété


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Erreur 1004: Impossible de définir la propriété
    Bonjour à tous,
    Je poste finalement mon premier message n'ayant pas réussi à trouver une solution à mon problème sur les différents forums

    Je travaille actuellement à partir de fichiers VBA qui ont été faits par un ancien stagiaire.
    Je rencontre un problème à un endroit dans le code (comme vous pouvez vous en douter) lorsque je dois créer un nouveau graphique et lui attribué ses différentes propriétées.
    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
    Charts.Add
        ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
        ActiveChart.Location Where:=xlLocationAsObject, Name:=feuille
        With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Courbe conventionnelle zoom"
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Allongement, %"
            .Axes(xlCategory).MaximumScale = 0.014
            .Axes(xlCategory).MinimumScale = 0
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Contrainte conventionnelle, MPa"
            .SeriesCollection(1).XValues = "='" + ActiveSheet.Name + "'!R" & K & "C" & m + manque_cell & ":R" & L & "C" & m + manque_cell & ""
            .SeriesCollection(1).Values = "='" + ActiveSheet.Name + "'!R" & K & "C" & m + manque_cell + 1 & ":R" & L & "C" & m + manque_cell + 1 & ""
            .SeriesCollection.NewSeries
            .SeriesCollection.NewSeries
            .SeriesCollection(2).XValues = "='" + ActiveSheet.Name + "'!R3C6:R4C6"
            .SeriesCollection(2).Values = "='" + ActiveSheet.Name + "'!R3C7:R4C7"
            .SeriesCollection(3).XValues = "='" + ActiveSheet.Name + "'!R6C6:R7C6"
            .SeriesCollection(3).Values = "='" + ActiveSheet.Name + "'!R3C7:R4C7"
    Cette ligne en rouge me donne l'erreur 1004: Impossible de définir la propriété Values de la classe Series.
    Le code en lui même est beaucoup plus grand si vous pensez que l'erreur provient d'ailleurs je le rajouterais mais j'ai essayé plusieurs solutions sans succès..

    Merci d'avance,

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        With .SeriesCollection.NeActivesheeteries
            .XValues = "='" & Activesheet.Name & "'!" & Activesheet.Cells(m + Manque_Cell, K).Address & ":" & Activesheet.Cells(m + Manque_Cell, L).Address
            .Values = "='" & Activesheet.Name & "'!" & Activesheet.Cells(m + Manque_Cell + 1, K).Address & ":" & Activesheet.Cells(m + Manque_Cell + 1, L).Address
        End With
        With .SeriesCollection.NeActivesheeteries
            .XValues = "='" & Activesheet.Name & "'!F3:F4"
            .Values = "='" & Activesheet.Name & "'!G3:G4"
        End With
        With .SeriesCollection.NeActivesheeteries
            .XValues = "='" & Activesheet.Name & "'!F6:F7"
            .Values = "='" & Activesheet.Name & "'!G3:G4"
        End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    J'ai essayé ton code mais lorsque je compile le programme il y a une erreur à la première ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .SeriesCollection.NeActivesheeteries
    Un message apparaît: Erreur de compilation Référence incorrecte ou non qualifiée.

    L'aide d'excel me dit:
    Un identificateur commençant par un point n'est valide qu'au sein d'un bloc With.
    Pourtant je suis bien dans un bloc with..

    Cordialement

    D'ailleurs le code que tu as écris vient en remplacement de la ligne en rouge de mon premier message ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Vraiment désolé pour ce désagrément que j'avais causé hâtivement

    Je voulais dire ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With .SeriesCollection.NewSeries
        .XValues = "='" & ActiveSheet.Name & "'!" & ActiveSheet.Cells(m + Manque_Cell, K).Address & ":" & ActiveSheet.Cells(m + Manque_Cell, L).Address
        .Values = "='" & ActiveSheet.Name & "'!" & ActiveSheet.Cells(m + Manque_Cell + 1, K).Address & ":" & ActiveSheet.Cells(m + Manque_Cell + 1, L).Address
    End With
    With .SeriesCollection.NewSeries
        .XValues = "='" & ActiveSheet.Name & "'!F3:F4"
        .Values = "='" & ActiveSheet.Name & "'!G3:G4"
    End With
    With .SeriesCollection.NewSeries
        .XValues = "='" & ActiveSheet.Name & "'!F6:F7"
        .Values = "='" & ActiveSheet.Name & "'!G3:G4"
    End With
    PS. en fait au lieu de Activesheet, j'avais utilisé une variable Wprksheet: Ws. Mais pour ne pas t'embrouiller j'avais fais Remplacer Ws par ActiveSheet et de ce fait NewSeries est devenue le charabia cause de l'erreur. Encore je m'en excuse de ce manque d'attention

    Code en entier. bien sur les variables sont déclarés et affectés de leur valeurs
    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
    26
    27
    28
    29
    30
    Dim Ws As Worksheet
     
    Set Ws = ActiveSheet
    With ThisWorkbook.Charts.Add
        .ChartArea.ClearContents
        .ChartType = xlXYScatterSmoothNoMarkers
        .Name = Feuille
        .HasTitle = True
        .ChartTitle.Characters.Text = "Courbe conventionnelle zoom"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Allongement, %"
        .Axes(xlCategory).MaximumScale = 0.014
        .Axes(xlCategory).MinimumScale = 0
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Contrainte conventionnelle, MPa"
     
        With .SeriesCollection.NewSeries
            .XValues = "='" & Ws.Name & "'!" & Ws.Cells(m + Manque_Cell, K).Address & ":" & Ws.Cells(m + Manque_Cell, L).Address
            .Values = "='" & Ws.Name & "'!" & Ws.Cells(m + Manque_Cell + 1, K).Address & ":" & Ws.Cells(m + Manque_Cell + 1, L).Address
        End With
        With .SeriesCollection.NewSeries
            .XValues = "='" & Ws.Name & "'!F3:F4"
            .Values = "='" & Ws.Name & "'!G3:G4"
        End With
        With .SeriesCollection.NewSeries
            .XValues = "='" & Ws.Name & "'!F6:F7"
            .Values = "='" & Ws.Name & "'!G3:G4"
        End With
    End With
    Set Ws = Nothing
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup Mercatog c'est beaucoup plus clair.
    Cependant une erreur persiste !
    Lorsque je compile mon programme la ligne: me donne l'erreur 1004: Impossible de renommer une feuille comme une autre feuille, une bibliothèque d'objets référencée ou un classeur référencé par visual basic.
    Je ne comprend vu que la je cherche à attribuer un nom à un graphique et pas à une feuille
    J'ai essayer de remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Name = ActiveWorksheet
    mais malheureusement sans succès..
    Merci pour tes précieuses réponses !
    Cordialement,

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    effectivement tu ne peux pas renommer 2 feuilles avec le même nom. Il faudra au préalable supprimer l'ancienne feuille et insérer la nouvelle
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous,
    Je rencontre cette fois ci un problème semblable sur un code différent:
    Voici le code de l'ancien stagiaire (je précise que son code fonctionne lorsqu'il est dans son fichier originel mais qu'une fois dans le mien j'obtient l'erreur 1004: impossible de définir la classe de XValues)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'trace courbes conv et vraies
    Set Xratio = Range(Cells(6, 8), Cells(d - 53, 8))
    Set Yratio = Range(Cells(6, 9), Cells(d - 53, 9))
    Sheets("Courbe Conv.").Select
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(w).XValues = "='CM-3D'!R6C6:R3500C6"
    ActiveChart.SeriesCollection(w).Values = "='CM-3D'!R6C7:R3500C7"
    ActiveChart.SeriesCollection(w).Name = Sheets("CM-3D").Range("F1").Value & " (" & Sheets("CM-3D").Range("H2").Value & ")"
    OngletAF.ListBox2.AddItem (Sheets("CM-3D").Range("F1").Value & " (" & Sheets("CM-3D").Range("H2").Value & ")")
    ActiveChart.Axes(xlCategory).MinimumScale = 0
    ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
    ActiveChart.Axes(xlValue).MinimumScale = 0
    ActiveChart.Axes(xlValue).MaximumScaleIsAuto = True
    J'ai donc décider de modifier son code et après plusieurs tentatives j'obtient enfin un code qui est exécutable, l'erreur 1004 n'apparaît plus :

    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
     
    'trace courbes conv et vraies
    Set Xratio = Range(Cells(6, 8), Cells(d - 53, 8))
    Set Yratio = Range(Cells(6, 9), Cells(d - 53, 9))
    Sheets("Courbe Conv.").Select
     With ActiveChart.SeriesCollection.NewSeries
            .Name = Sheets("CM-3D").Range("F1").Value & " (" & Sheets("CM-3D").Range("H2").Value & ")"
            .XValues = "='CM-3D'!R6C6:R3500C6"
            .Values = "='CM-3D'!R6C7:R3500C7"
            OngletAF.ListBox2.AddItem (Sheets("CM-3D").Range("F1").Value & " (" & Sheets("CM-3D").Range("H2").Value & ")")
        With ActiveChart.Axes(xlCategory)
            .MinimumScale = 0
            .MaximumScaleIsAuto = True
        With ActiveChart.Axes(xlValue)
            .MinimumScale = 0
            .MaximumScaleIsAuto = True
     
        End With
        End With
        End With
    Le problème est que le résultat attendu :
    Nom : attendu.JPG
Affichages : 1644
Taille : 30,8 Ko
    N'est pas le bon:
    Nom : obtenu.JPG
Affichages : 1612
Taille : 21,2 Ko

    Du coup j'ai pensé que j'avais du faire une erreur quelque part qui affectait les données séléctionnées, j'ai éssayé de modifier un peu le code initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Rmax As Long
    Rmax = Sheets("CM-3D").Range("R65536").End(xlUp).Row
     
    ActiveChart.SeriesCollection(w).XValues = Sheets("CM-3D").Range("R6C6" & "RmaxC6")
    Sans grand succès..
    Voyez vous un endroit entre les deux codes ou j'aurais fais une erreur ( je n'ai plus l'index (w) de SerieCollection par exemple..)
    Je ne comprend pas trop d'ailleurs quelle valeur il affecte a w :
    (ce code vient juste avant la partie sur les graphiques)
    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
    Dim w as integer
    Sheets(1).Cells(1, 35).Value = Sheets(1).Cells(1, 35).Value + 1
    w = Sheets(1).Cells(1, 35).Value
    'MsgBox w
    menu.ListBox1.Selected(w - 1) = True
    source = ActiveWorkbook.Name
    'test sur valeur angle
    If CheckBox1 = False And CheckBox2 = False And CheckBox3 = False And CheckBox4 = False Then
    MsgBox "Sélectionnez un sens"
    Sheets(1).Cells(1, 35).Value = Sheets(1).Cells(1, 35).Value - 1
    w = Sheets(1).Cells(1, 35).Value
    Else
    Sheets(w).Select
    Nuance = Range("B28").Value
    repere = Range("B2").Value
    eprouvette = Range("B1").Value

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/02/2015, 16h54
  2. Réponses: 3
    Dernier message: 27/08/2014, 18h04
  3. Réponses: 2
    Dernier message: 17/07/2014, 10h52
  4. [XL-2007] Erreur 1004: Impossible de lire la propriété Vlookup
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2012, 17h46
  5. Réponses: 16
    Dernier message: 13/03/2008, 21h51

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