VBA : faire référence à une feuille dont le nom change

Bonjour,

Je suis nouveau dans la programmation en VBA et je voudrais savoir où se trouve l'erreur de syntaxe dans le bout de code suivant:

ActiveChart.SetSourceData Source:=Sheets("Pareto_" & Cells(5, 6)).Range("E7:E185,K7:K185"), PlotBy:=xlColumns

Lors de l'exécution de la macro qui conient le bout de code ci-dessus, l'erreur suivante est retournée :

Erreur d'exécution '1004':

La méthode 'Cells' de l'objet '_Global' a échoué

En fait, en écrivant ActiveChart.SetSourceData Source:=Sheets("Pareto_" & Cells(5, 6)).Range("E7:E185,K7:K185"), je voulais que mon graphique fasse référence à la feuille qui a pour nom "Pareto_"+le contenu de la cellule F5 de cette même feuille.

En espérant que vous ayez compris mon problème, est-il possible de le résoudre?

vue forum nom

Bonjour

Peut tu mettre un fichier exemple avec ta macro?

Re

tu peux tester cela?

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 13/05/2009 par pro_brun
toto = [H2].Value ' nom de la feuille en H2
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets(toto).Range("A2:E14"), PlotBy _
        :=xlColumns

    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
End Sub

Merci pour ta réponse.

J'ai essayé de mettre le fichier mais il fait plus de 100 Ko!

J'essaie le code que tu m'as donné et je te redirai

Salut désolé pour le délai de réponse, j'ai un petit problème avec internet.

Merci pour le bout de code que tu m'as passé mais en fait je sais pas du tout comment l'appliquer à mon cas!!

J'avais pas vu que l'on pouvait compresser le fichier excel pour qu'il prenne 3 fois moins de place!!

Donc je te mets le fichier (je l'ai réduit) en pièce jointe.

https://www.excel-pratique.com/~files/doc2/Macro_analyse_cout_services_2008.zip

Bonjour,

Normal que cela ne fonctionne pas. Fais ceci :

1. En dessous de

SUB GRAPHE 

mets

Dim ref As String
ref = ActiveSheet.Cells(5, 6)

2. A la place de

Sheets("Pareto_" & Cells(5, 6))

mets

Sheets("Pareto_" & ref)

Amicalement

Dan

PS: SI ton pb est terminé, n'oublie pas de mettre RESOLU sur le fil. Explication par ici -> https://forum.excel-pratique.com/viewtopic.php?t=13

Merci pour l'aide. Ca avance! Mon problème pour le nom de feuille semble résolu.

Mais en lançant la macro Graphe, j'ai l'erreur suivante qui s'affiche :

Erreur d'exécution '1004':

Impossible de définir la propriété XValues de la classe Series

sur le bout de code suivant :

ActiveChart.SeriesCollection(1).XValues = _
        "='Pareto_ & Cells(5, 6)'!R7C5:R14C5"

J'ai essayé de remplacer

Cells(5, 6)

par

ref

(le nom de la variable) mais j'ai toujours l'erreur ci-dessus!

D'où vient l'erreur?

Re,

Je ne comprends ce que tu veux faire exactment car dans le code, tu crées un graphique avec les données en colonne E et K puis tu supprimes la courbe venant de E pour ne laisser que celle de K. Dès lors pourquoi ne fais tu pas ceci :

Sub graphe()
Dim ref As String
ref = ActiveSheet.Cells(5, 6)
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Pareto_" & ref).Range("K7:K14"), PlotBy:=xlColumns
With ActiveChart
        .HasTitle = True
.....

Sinon montre comment dois être le graphique une fois terminé, on te fera le code approprié.

Amicalement

Dan

Ah bah oui en effet ça revient au même!! Je me compliquais la vie pour rien!!

Je te remercie beaucoup dan!!

En fait je me demandais juste par curiosité pourquoi le code que j'ai mis dans mon précédent message ne marcherait pas :

ActiveChart.SeriesCollection(1).XValues = _ 
        "='Pareto_ & ref'!R7C5:R14C5"

Est-ce que tu peux me répondre?

re,

Cela ne fonctionnait pas parce que tu travailles dans une formule et la variable REF ne peut être utilisée dans ce cas.

Avec ce code cela aurait pu fonctionner

ActiveChart.SeriesCollection(1).XValues = "" = " & " & "'Pareto_" & ref & "'" & "!R7C5: R14C5"

N'oublie pas le RESOLU

Amicalement

Dan

Merci pour la rapidité de la réponse!!

J'ai essayé de remplacer ça

ActiveChart.SeriesCollection(1).XValues = _ 
        "='Pareto_ & ref'!R7C5:R14C5"

Par ça

ActiveChart.SeriesCollection(1).XValues = "" = " & " & "'Pareto_" & ref & "'" & "!R7C5: R14C5"

Mais ça semble ne pas marcher.

J'aurais voulu que les données sources de l'axe des abscisses correspondent à la colonne E de la feuille "Pareto_" & ref mais pour une raison que j'ignore l'axe des abscisses du graphique ne contient qu'un 0 à l'origine.

Est-ce grave?

(Je n'oublie pas le RESOLU ne t'inquiètes pas dan. Je commence à voir que les problèmes que je rencontre s'éloignent du problème initial pour lequel j'ai posté!!)

re,

Il y a certainement encore des choses à modifier mais essaie comme ceci :

Sub graphe()
Dim ref As String
ref = ActiveSheet.Cells(5, 6)
Charts.Add
With ActiveChart
    .ChartType = xlLine
    .SetSourceData Source:=Sheets("Pareto_" & ref).Range("K7:K14")
    .SeriesCollection(1).XValues = Worksheets("Pareto_" & ref).Range("E7:E14")
    .HasTitle = True
    .ChartTitle.Characters.Text = "Graphique ABC - " & Sheets("Pareto_Quantités").Cells(1, 1).Value & " - toutes fournitures de bureau"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Pourcentage de fournitures"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Pourcentage coût"

    With .Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScale = 1
        .MinorUnitIsAuto = True
        .MajorUnit = 0.05
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With

    Selection.TickLabels.NumberFormat = "0%"

    With .Axes(xlCategory)
        .CrossesAt = 1
        .TickLabelSpacing = 6
        .TickMarkSpacing = 6
        .AxisBetweenCategories = False
        .ReversePlotOrder = False
    End With
End With
End Sub

Tu peux aussi supprimer toutes les instructions qui renvoient FALSE dans ton code. Elles ne servent pas.

Vérifie avec ton fichier car là je n'ai pas le tout et notamment la feuille Pareto_Quantités

Dan

Salut dan merci pour ta réponse.

J'ai fait les changements qu'il faut et ça a l'air de marcher nickel!

J'aurais une dernière (?) requête à te demander.

Peux-tu me dire s'il existe un site qui permet d'en apprendre plus sur comment utiliser la syntaxe du langage VBA dans excel? Qui t'apprends comment savoir que certaines instructions FALSE ne servent pas? De quoi tu t'es aidé pour en savoir autant! Qui permet d'apprendre la VBA en gros!!

Cordialement

re,

Pour répondre à ta demande, je t'invite à consulter ce lien qui devrait répondre à ton souhait --> https://www.excel-pratique.com/forum/viewtopic.php?t=8069.

Si pb n'hésite pas.

Amicalement

Dan

C'est exactement ce qu'il me fallait dan!! Merci!

J'avais pas du tout pensé à l'aide excel!! Suis-je bête

Je viens de jeter un oeil sur l'aide d'excel et en effet elle est très complète!!

Merci encore dan

Rechercher des sujets similaires à "vba reference feuille nom change"