[VBA] Données Graphique

Bonjour à tous,

Explication du fichier :

J'ai un fichier de maintenance d'accus, il me créer une fiche de maintenance par équipement.

Sur ma page d'accueil j'ai un menu qui me permet d'ajouter un équipement grâce a son numéro de série et de créer une feuille avec le nom de celui-ci.Ces feuilles de maintenance sont une copie d'une autre feuille qui s'appelle Modèle.

NomFeuil = Range("P1").Value
Sheets("Résultats").Select
    ActiveSheet.ChartObjects("Chart 2").Activate
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Name = "=NomFeuil!$E$3"
    ActiveChart.SeriesCollection(1).Values = "=NomFeuil!$C$10:$C$18"

But :

Chaque feuille à son graphique, mais je souhaite que chaque page crée vienne s'ajouter au Graphique Résultats, pour faire une comparaison globale.

Problèmes :

1) Ma variable de page NomFeuil ne fonctionne pas, car si je regarde les options de données dans mon graphique il m'écrit "=NomFeuil!$C$10:$C$18" j'ai essayer avec "='NomFeuil'!$C$10:$C$18" ne fonctionne pas non plus...

2) Le chiffre 1 dans ActiveChart.SeriesCollection(1).Name et Values devrait changer pour augmenter le nombre de courbes. J'ai essayer de récupéré le nombre d'onglet en attribuant ce code à une case :

Public Function nb_onglets()
    nb_onglets = Sheets.Count
End Function

Afin d'incrémenter en fonction du nombre de feuille.

Je reconnais que c'est vachement tordu ! Mais je suis débutant, je me débrouille comme je peux.

Si quelqu'un à une idée merci d'avance

Bonne journée

NOTE : C'est dernière ligne de ma macro dupliquer.

Salut,

J'ai fais 2 modifications dans ton code :

1 - il faut faire attention au reference:

Quand tu dupliques la feuilles modèles elle a pour titre la cellule A1 de la feuille données et donc de la textbox de saisie dans accueil (tu fais mal au crâne )

Et tu te sers de cette reference pour élaborer ton nom de séries :

ActiveChart.SeriesCollection(1).Name = "=NomFeuil!$E$3"

Donc a la prochaine saisie toutes les séries auront le même nom (le n° que tu viens de saisir)

Pour palier a ce problème, ajoute la ligne suivante (on enleve la reference et on écrit en dur)

....
Range("A1").Select
Sheets("Modèle").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Range("a1").Value
Range("a1").Value = ActiveSheet.Name  'On ecrit en dur, la valeur de la reference va changer lors de prochaine saisie
Sheets("Accueil").Select
........

2 - Cf utilisation des variables dans une chaine de caractère

Quand on écrit

"=NomFeuil!$E$3" cela renvoi une chaine de caractère : =NomFeuil!$E$3

Comme Nomfeuil est une variable, il ne faut pas la mettre entre ". Tu veux récuperer sa valeur.

Donc on se sert du & pour concatener la valeur de la variable et le reste de la chaine de caractère:

 ActiveSheet.ChartObjects("Chart 2").Activate
    ActiveChart.SeriesCollection.NewSeries
    t = ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(t).Name = "=" & NomFeuil & "!$E$3"
    ActiveChart.SeriesCollection(t).Values = "=" & NomFeuil & "!$C$10:$C$18"

Pour les numéro, ActiveChart.SeriesCollection.Count te renvoi le nombre de collection.

PS : NomFeuil = Range("P1").Value

Le nom de la feuille ne peut être vide, et je n'ai pas vu de valeur dans P1...... je dirais A1 non ?

A tester.

En esperant t'avoir aidé.

Bon courage

Damien

Salut Damien,

Merci d'avoir répondu !

Pour reprendre ta citation :

Bigdams a écrit :

tu fais mal au crâne

Moi aussi je me suis fais mal au crâne pour en arrivé là, je débute le VBA depuis quelques jours, donc pas facile. ^^

(Quand on passe d'un language à l'autre c'est pas évident)

Merci pour les modifications que tu m'a apporter, pour ce qui est de la duplication de la page ça marche nickel.

En revanche pour ce qui est de la variable ça ne fonctionne pas, ça me fais une erreur 1004 à la ligne :

ActiveChart.SeriesCollection(t).Name = "=" & NomFeuil & "!$E$3"

ça m'ajoute bien une nouvelle courbe mais elle change de nom à chaque ajout de matériel. (Normal car P1 change)

La cellule P1 de "Résultats" est lier à A1 de "Données", je pense qu'il faudrait que je récupéré le A1 de chaque feuille créer afin de garder les noms de courbes.

J'ai refais le fichier avec tes modifications, il est joint au sujet.

Merci à toi de t'être pencher sur le sujet et surtout d'avoir pris le temps de déchiffrer !

Bonne après-midi

Merci de m'avoir mis sur la voie, le problème est résolue.

Voici le code modifier.

TextBox = Sheets("Accueil").Range("A1").Value
NomVariable = Sheets(TextBox).Range("G14").Value

Sheets("Résultats").Select
 ActiveSheet.ChartObjects("Chart 2").Activate
     ActiveChart.SeriesCollection.NewSeries
    t = ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(t).Name = "=" & NomVariable & "!$E$3"
    ActiveChart.SeriesCollection(t).Values = "=" & NomVariable & "!$C$10:$C$18"

Un peu du bourrage de crâne mais ça fonctionne.

Merci de ton aide @+

Ca fonctionne bien sur excel 2007 mais sur le 2003 il y'a un bug a la ligne citée ci-dessous (malgres que j'ai enregistrer en compatibiliter)

ActiveChart.SeriesCollection(t).Name = «=» & NomVariable & «!$E$3

Pour .Values je pense que ca serra pareil. Car pour moi c'est un probleme de liaison car il trouve bien t=1 et NomVariable=(valeur textbox)

Si quelqu'un a deja eu ce probleme.

Merci d'avance

Re,

il y'a un bug a la ligne citée ci-dessous : C'est quoi le message d'erreur ?

Damien

Re,

Erreur d'execution '1004':

Impossible de définir la propriété Name de la classe Series.

ActiveChart.SerieCollection(t).Name = «=» & NomVariable & «!$E$3»

Ca doit etre la compatibilité avec 2003

Merci d'avance

Re,

Bizarre ca marche bien aussi sur 2010

Sinon essaye de rajouter des simples cotes : '

    ActiveChart.SeriesCollection(t).Name = "='" & NomVariable & "'!$E$3"
    ActiveChart.SeriesCollection(t).Values = "='" & NomVariable & "'!$C$10:$C$18"

J'essaye sur 2003 demain et je te dis.

Damien

Rechercher des sujets similaires à "vba donnees graphique"