Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Graphique

3 réponses
Avatar
bcar
Bonjour,

je cherche à mettre à jour un graphique à partir d'une macro.
mon graphique est déjà créé.
Je supprime la série de mon graphique
Je supprime les données vers lesquelles pointaient la série
Je met de nouvelles données
Je recrée la série.

Jusqu'ici tout va bien ça marche plutôt bien.

Mais à la sauvegarde du fichier Excel j'ai maintenant le message :
"une des formules de cette feuille de calcul contient une ou plusieurs
références externes non valides \n Vérifiez que le chemin d'accès, le
classeur, le nom de la plage et les références de cellules de toutes les
formules sont corrects."

Sauriez vous comment éviter ce message.

En code ça donne grosso modo :
Call ThisWorkbook.Worksheets("F1").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection(1).Delete ' Suppression de la série

sh = ThisWorkbook.Worksheets("F2")
sh.Range(sh.Cells(i, 1), sh.Cells(i, x) ' effacement des données

call fillData ' remplissage des données (pas forcément le même nombre
qu'auparavant)

Call ThisWorkbook.Worksheets("F").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection.NewSeries ' Création de la nouvelle série

' Paramétrage de la nouvelle série
str = "=F2!$A$3:$A$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).XValues = str
str = "=F2!$B$3:$B$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).Values = str

Merci

3 réponses

Avatar
Misange
Bonjour
à la main ou par VBA, excel déteste qu'on supprime des données qui sont
reliées à un graphique.
Pourquoi ne pas tout simplement enregistrer le premier graphique comme
modèle (pour garder le bon format) et détruire le graphique pour le
recréer ?

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

bcar a écrit :
Bonjour,

je cherche à mettre à jour un graphique à partir d'une macro.
mon graphique est déjà créé.
Je supprime la série de mon graphique
Je supprime les données vers lesquelles pointaient la série
Je met de nouvelles données
Je recrée la série.

Jusqu'ici tout va bien ça marche plutôt bien.

Mais à la sauvegarde du fichier Excel j'ai maintenant le message :
"une des formules de cette feuille de calcul contient une ou plusieurs
références externes non valides n Vérifiez que le chemin d'accès, le
classeur, le nom de la plage et les références de cellules de toutes les
formules sont corrects."

Sauriez vous comment éviter ce message.

En code ça donne grosso modo :
Call ThisWorkbook.Worksheets("F1").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection(1).Delete ' Suppression de la série

sh = ThisWorkbook.Worksheets("F2")
sh.Range(sh.Cells(i, 1), sh.Cells(i, x) ' effacement des données

call fillData ' remplissage des données (pas forcément le même nombre
qu'auparavant)

Call ThisWorkbook.Worksheets("F").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection.NewSeries ' Création de la nouvelle série

' Paramétrage de la nouvelle série
str = "ò!$A$3:$A$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).XValues = str
str = "ò!$B$3:$B$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).Values = str

Merci



Avatar
michdenis
Je n'ai pas vu ton application... mais tu semble prendre pour acquis
que ce message est relié à la mise à jour de ton graphe ! En es-tu certain ?

Concernant la mise à jour de ton graphe, Pourquoi n'utilise pas des plages
nommées définies au niveau de la feuille pour définir tes séries de données ?
Pour mettre à jour ton graphe, tu n'auras qu'à redéfinir tes "Plages nommées"
En vba, il y a une façon simple de réaffecter une plage à un nom. voici un exemple

Redéfinir le nom "Feuil1!toto" après la mise à jour
With Feuil1
.range("A2:A" & .Range("A65536").End(xlup).row).Name = .name & "!Toto"
End With

Pour ce qui est du message, sans voir l'application, il est plus difficile
de "deviner" ce qui pourrait clocher !


"bcar" a écrit dans le message de groupe de discussion :
gnbiae$r4u$
Bonjour,

je cherche à mettre à jour un graphique à partir d'une macro.
mon graphique est déjà créé.
Je supprime la série de mon graphique
Je supprime les données vers lesquelles pointaient la série
Je met de nouvelles données
Je recrée la série.

Jusqu'ici tout va bien ça marche plutôt bien.

Mais à la sauvegarde du fichier Excel j'ai maintenant le message :
"une des formules de cette feuille de calcul contient une ou plusieurs
références externes non valides n Vérifiez que le chemin d'accès, le
classeur, le nom de la plage et les références de cellules de toutes les
formules sont corrects."

Sauriez vous comment éviter ce message.

En code ça donne grosso modo :
Call ThisWorkbook.Worksheets("F1").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection(1).Delete ' Suppression de la série

sh = ThisWorkbook.Worksheets("F2")
sh.Range(sh.Cells(i, 1), sh.Cells(i, x) ' effacement des données

call fillData ' remplissage des données (pas forcément le même nombre
qu'auparavant)

Call ThisWorkbook.Worksheets("F").ChartObjects("Graph_1").Activate
Call ActiveChart.SeriesCollection.NewSeries ' Création de la nouvelle série

' Paramétrage de la nouvelle série
str = "ò!$A$3:$A$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).XValues = str
str = "ò!$B$3:$B$" & sh.Cells(2, 1).End(xlDown).Row
ActiveChart.SeriesCollection(1).Values = str

Merci
Avatar
bcar
Merci pour votre soutien,

Alors effectivement michdenis, c'est la solution que j'avais essayé au
début mais j'avais malheureusement oublié de spécifier le nom de la
feuille ou se trouvaient les données donc j'avais abandonné.
J'emploie donc maintenant cette méthode.

Par contre pour information, le problème venait bien de la destruction
reconstruction de la série. En fait si je supprime la série à la main et
que je met la "plage de données du graphique" à vide la reconstruction
de la série se passe très bien. Le problème c'est que je ne sais pas en
vba mettre cette "plage de données du graphique" à vide. (en passant par
l'enregistreur de macro, l'on obtient juste la sélection du controle,
pas sa mise à jour). Je trouve pas tout ça très normal a première vue.

pour ce qui est de la solution de misange cela ne me convient pas trop
car je ne désire pas avoir des dizaines de modèles a trimballer avec mon
fichier.

Merci encore à vous.

michdenis a écrit :
Je n'ai pas vu ton application... mais tu semble prendre pour acquis
que ce message est relié à la mise à jour de ton graphe ! En es-tu certain ?

Concernant la mise à jour de ton graphe, Pourquoi n'utilise pas des plages
nommées définies au niveau de la feuille pour définir tes séries de données ?
Pour mettre à jour ton graphe, tu n'auras qu'à redéfinir tes "Plages nommées"
En vba, il y a une façon simple de réaffecter une plage à un nom. voici un exemple

Redéfinir le nom "Feuil1!toto" après la mise à jour
With Feuil1
.range("A2:A" & .Range("A65536").End(xlup).row).Name = .name & "!Toto"
End With

Pour ce qui est du message, sans voir l'application, il est plus difficile
de "deviner" ce qui pourrait clocher !


"bcar" a écrit dans le message de groupe de discussion :
gnbiae$r4u$
Bonjour,