|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Bonjour à tous et bonne année!
Dans un document word je possède un grand nombre de liaison excel créer par copier collage spéciale avec liaison sur des tableaux excel. Je souhiaterais pouvoir modifier le chemin de la source excel par code vba afin de ne pas avoir a répéter l'opération, modifier la source et aller pointé le bon fichier. J'ai chercher sur le forum et sur nénette mais je ne trouve pas mon bonheur. J'ai quelques piste avec "Fields" "Fields.Index" ou ".Text" et ".code" mais je ne parviens pas à modifier le chemin et mettre à jour. Merci d'avance |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Tu es sur la bonne piste je pense.
En bouclant sur les Fields, il faut tester le Type, vérifier qu'il soit bien wdFieldLink. Si c'est le cas, tu peux modifier la propriété LinkFormat.SourceFullName. Je n'ai pas fait de test, mais essaie déjà avec ça. PS : C'est du VBA Word et non Excel... Voici un bout de code que j'ai testé. Ca à l'air de marcher, je n'ai pas préparé de documents pour faire des tests plus importants. Il faut juste se méfier car j'ai l'impression que quand tu changes le SourceFullName, il créé un autre Field. Après, j'ai mis un fichier bidon, mais il faut adapter en fonction de ce que tu veux faire (le même fichier pour tous les liens, juste le chemin qui change pour chaque fichier...) Il y a aussi des propriétés pour modifier les plages concernées et tout. Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Je te remercie pour ce bout de code qui est plus propre et plus net que le miens, mais nous sommes sur le meme fonctionnement.
Il semblerait pourtant que cela ne fonctionne pas parfaitement, du moins avec mon code, a savoir que sur d'ancien document la modification ne se fait pas, alors que si je créer un nouveau doc et un nouvel objet le code fonctionne parfaitement. Je re teste avec ton code et reviens vers toi pour je l'espere cloturer ce sujet et te remercier... Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Il faut se méfier du For ... Each, car comme je te le disais, j'ai l'impression qu'il créé un nouveau Field quand on modifie le chemin, du coup, ça risque de tourner en boucle.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#5 | ||
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Bon avec ton code j'ai bien avancé voila ou j'en suis :
Code :
Tout fonctionne bien, sauf le problème des graphiques, il plante sur la liaison des graphiques. Dans le label du "Field" il ne trouve de correspondance de cellule (cellule vide) Je pense que le type du Field pour les graphique est différent et qu'il doit etre testé, mais je ne trouve pas quel est le type OLE pour les graphiques. Avez vous une idée pour ce problème? Merci |
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
J'avais trouvé celui pour les plages de cellules en jouant avec le débuggeur, tu dois pouvoir faire pareil non ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Justement c'est ce que j'ai charger a faire, mias je ne vois pas...
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Après un petit test, c'est le même type.
Par contre, il faut peut-être également modifié le OleFormat.Label qui a l'air de contenir le nom du classeur.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Désolé mais je ne comprend pas ce que tu veux dire par modifié le OLEFormat label. Effectivement le type est identique c'est ce que j'avais vu.
Dans le OLE format label l'index du graphique est contenu donc je ne vois pas pourquoi le modifier. Le nom étant le même il devrait pouvoir faire la mise à jour uniquement du chemin? |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
En fait, de mon coté, j'avais l'impression quand dans ce label, il y avait à la fois le chemin du fichier et le nom du graphique.
Mes tests étaient peut-être un peu trop rapide, je ne sais pas.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
c'est bien ca dans le cas d'un tableau tu as le nom de l'onglet et les références du tableau et d'un graphique le nom de l'onglet et l'index du graphique.
La solution serait de pouvoir identifier quand l'objet est un graphique ou un tableau. De pouvoir obtenir la liste des graphiques contenu dans l'onglet permettrais aussi de stocké ce nom et de le comparé. Mais je n'arrive pas à obtenir cette liste... |
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Bon, je me suis créé 2 fichiers excel pour faire le test. En fait ça marche très bien pour les plages de cellules et pour les graphiques "onglet", mais pas pour les graphiques intégrés à une feuille.
Parce que leur propriété .OleFormat.Label est de la forme Feuil1![nomFichier.xls]Feuil1 Graphique 1 et que cette propriété est en lecture seule je n'arrive donc pas à la modifier avec le code suivant : Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Avant tout je te remercie de toutes ces investigations...
J'en suis arriver depuis ce matin à la même conclusion que toi je chercher justement à renomer la propriété "OLEFormat.Label" qui contient justement l'onglet et le nom du graphique mais ce n'est effectivement pas possible apparement. Ta solution semble etre viable, le couack pour moi est que j'ai une floppé de graphique, ce qui me ferais autant d'onglet. De plus vu ma quantité de doc du meme type il faudrait que je commence par repositionner les graphs sur des onglets, pas glop! Je vais faire une derniere tentative en détectant le mot "graphique" dans ce fameux label et en fonction rompre le lien et le refaire, mais je n' ycrois pas trop. Je ne ferme pas la discusion pour le moment juste au cas ou qq d'autres aurait une idée "lumineuse"... |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Oui, je pensais à ça en dernier recours, effacer et recréer la liaison. C'est possible mais un peu lourd...
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#15 | ||
|
Membre habitué
![]() Webplanneur Inscription : avril 2009 Messages : 141 ![]() |
Bon finalement l'idée lumineuse elle sera pour moi, mais je dois quand meme rendre un grand merci à Zebreloup pour son active participation
![]() Je vous donne mon code finale... Code :
Si vous le souhaitez vous pouvez toujours noter la discution... |
||
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Bien joué, je n'avais pas fouillé dans le .Code
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com