OVH Cloud OVH Cloud

synchroniser graphes excel + xml

3 réponses
Avatar
v1nce
'lo

J'ai des tableaux excel dont certaines cellules sont bindées sur des
fichiers xml (dynamiques).
Ces tableaux sont ensuite réutilisés sous la forme de graphe/tableaux dans
un document Word.

Mon problème c'est de "synchroniser" les graphes dans le Word sur le contenu
effectif des xml.

J'ai essayé :
. les tableaux excel incorporés (le xls est "dans" le Word), mais dans ce
cas, je n'arrive pas
(via VBA) à transformer les ActiveDocument.InlineShapes en des objets excel
utilisables ;

. les tableaux excel liés (le xls est dans un fichier externe), dans ce cas
là, les graphes excel sont bien
synchronisés sur le (dernier) contenu des xls, mais je ne sais pas où
trouver la collection des objets liés
et comment en faire des objets excel.

Bref je galère et toute aide sera la bienvenue,
D'avance merci,

PS: une fois que j'aurai mon objet excel je sais comment rafraichir les
données XML, il faut faire un
ActiveWorkbook.XmlMaps("NewDataSet_Mappage").DataBinding.Refresh

3 réponses

Avatar
Anacoluthe
Bonjour !

'v1nce' nous a écrit ...
Mon problème c'est de "synchroniser" les graphes dans le Word sur le contenu
effectif des xml.
PS: une fois que j'aurai mon objet excel je sais comment rafraichir les
données XML, il faut faire un
ActiveWorkbook.XmlMaps("NewDataSet_Mappage").DataBinding.Refresh


Pour récupérer votre objet Excel utilisez l'objet OleFormat
de votre objet Word. N'oubliez pas de référencer Excel dans VBE :

Dim maFeuille As Excel.Workbook
With ActiveDocument.InlineShapes(1).OLEFormat
If .ClassType = "Excel.Sheet.8" Then
' il faut d'ABORD activer !!
.Activate
Set maFeuille = .Object
maFeuille.XmlMaps("NewDataSet_Mappage").DataBinding.Refresh
End If
End With

Est-ce que ça vous fait avancer un peu ?

Anacoluthe
« C'est encore en méditant l'objet
que le sujet a le plus de chance de s'approfondir. »
- Gaston BACHELARD

Avatar
v1nce
Bonjour,

Merci, merci, merci.
.Activate fallait le savoir.

2 questions supplémentaires si vous voulez bien :
1) Lorsque j'insère un objet Excel et que je le lie à des données XML, il
stocke le chemin complet dans
maFeuille.XmlMaps("NewDataSet_Mappage").DataBinding.SourceURL. Est-il
possible de forcer un chmin relatif ? Sinon comment modifier le chemin a
posteriori ? (maFeuille.XmlMaps("NewDataSet_Mappage").DataBinding.SourceURL =
"XML/MY151.xml" ne fonctionne pas : erreur 450 affectation de propriété
incorrecte)

2) Si le DataBinding.refresh fonctionne bien sur les graphes, il n'est pas
satisfaisant pour les tableaux car le nombre de lignes affichées ne s'adapte
à la "nouvelle taille" (suite au refresh).
Dans mon tableau excel, j'ai 2 lignes "d'en-tête", n lignes de données XML,
1 ligne vide,1 ligne de formule (moyenne de la colonne). J'aimerai que quel
que soit n, l'intégralité des données soient visibles.




Bonjour !

'v1nce' nous a écrit ...
Mon problème c'est de "synchroniser" les graphes dans le Word sur le contenu
effectif des xml.
PS: une fois que j'aurai mon objet excel je sais comment rafraichir les
données XML, il faut faire un
ActiveWorkbook.XmlMaps("NewDataSet_Mappage").DataBinding.Refresh


Pour récupérer votre objet Excel utilisez l'objet OleFormat
de votre objet Word. N'oubliez pas de référencer Excel dans VBE :

Dim maFeuille As Excel.Workbook
With ActiveDocument.InlineShapes(1).OLEFormat
If .ClassType = "Excel.Sheet.8" Then
' il faut d'ABORD activer !!
.Activate
Set maFeuille = .Object
maFeuille.XmlMaps("NewDataSet_Mappage").DataBinding.Refresh
End If
End With

Est-ce que ça vous fait avancer un peu ?

Anacoluthe
« C'est encore en méditant l'objet
que le sujet a le plus de chance de s'approfondir. »
- Gaston BACHELARD




Avatar
Anacoluthe
Bonjour !

'v1nce' nous a écrit ...
maFeuille.XmlMaps("NewDataSet_Mappage").DataBinding.SourceURL =
"XML/MY151.xml" ne fonctionne pas : erreur 450 affectation de propriété incorrecte


Vous devez faire un nouveau Import si l'URL change...

2) Si le DataBinding.refresh fonctionne bien sur les graphes, il n'est pas
satisfaisant pour les tableaux car le nombre de lignes affichées ne s'adapte
à la "nouvelle taille" (suite au refresh).


Refresh n'actualise que les données d'une même source...
Je pense que vous devez réinitialiser l'XmlMap ou son DataBinding
Il s'agit ici de fonctions vba XL.
Voyez plutôt le forum frère avec leurs petites cases :-)

Anacoluthe
« C'est encore en méditant l'objet
que le sujet a le plus de chance de s'approfondir. »
- Gaston BACHELARD