|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Kévin Etudiant en apprentissage Inscription : septembre 2010 Messages : 60 ![]() |
Bonjour,
Voici mon problème: Je suis dans une fonction reçoit une collection de Fields: Sub maFonction(FieldList As Fields) Je souhaiterai pouvoir copier les objets de cette collection dans une autre collection de fields puis pouvoir appeler sur tous les éléments de cette nouvelle collection les méthodes inhérentes à l'objet Field. Je déclare donc une collection: Dim myFields As New Collection Et j'y insère mes objets: Code :
Quand je parcours cette collection avec un itérateur: "For Each currentField In myFields" ==> mon currentField n'est pas un objet de type Field mais de type Variant si j'en crois la doc et Range si j'en crois ce débug: "MsgBox "Type " & TypeName(currentField)" Si j'essaye ça "For Each currentField As Field In myFields", ça crie à l'erreur de syntaxe. Si j'essaye "Dim currentField As Field" puis "For Each currentField In myFields", ça crie aussi ==> currentField = Nothing. J'ai également le parcours avec un indice essayé le casting avec CType() or DirectCast() mais là l'erreur semble m'indiquer que la fonction n'existe pas. Bref, je n'y connais pas grand chose en VB et plus j'essaye, moins j'ai l'impression de comprendre ce langage. Y-aurait-il une bonne âme qui semble avoir compris mon désarroi et serait à même de donner une réponse à mon problème? Merci d'avance! |
||
|
|
00
|
|
|
#2 |
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut Yaraco,
Un objet Collection utilise des Variants. Vérifie dans ton VBA, en mode debug, tu peux voir que ActiveDocument.Fields.Item(i) est de type Field mais que ton myFields est de type Variant Utilise directement ta liste fournie en paramètre de l'appel à ta fonction "maFonction" (donc ici "FieldList") sans passer par une copie intermédiaire. @+ |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 343 ![]() |
Salut,
Que souhaites-tu faire ? Copier les champs, oui, mais pourquoi ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Kévin Etudiant en apprentissage Inscription : septembre 2010 Messages : 60 ![]() |
En fait je souhaiterais passer par une copie intermédiaire suite à un bug rencontré sur un document.
Initialement, ma fonction prend la liste initiale, et fait des updates sur tous les fields. Sauf que dans un document, la boucle ne se termine jamais, elle part en boucle infinie. On peut le constater car nous avons une barre de progression qui indique visuellement l'avancée de la macro. Et là le pourcentage s'incrémente de manière infinie jusqu'au plantage. En cernant un peu plus le problème, il vient de la méthode update sur une partie précise de mon document : la table des matières. Je ne sais pas pourquoi tout d'un coup cette table des matière dans ce document provoque cet effet, mais je dois corriger ça (Et étant donné que je n'y connait rien en VBA, je ne peux même pas savoir si c'est ma volonté de départ qui est erronée). L'idée serait donc que peut-être mon itérateur de ma liste source change et repasse toujours sur la même itération? Code :
Bref, cela vous dit-il quelque chose? Et puis-je quand même en VBA recréer une collection d'objets qui soient correctement typés en objets initiaux (ici Field?). |
||
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 343 ![]() |
Salut,
As-tu essayé un simple copier coller du contenu du document ? Ça prend tout, les champs, les noms...
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Kévin Etudiant en apprentissage Inscription : septembre 2010 Messages : 60 ![]() |
Hum, je ne comprends pas trop où vous souhaitez en venir.
Quel serait le but d'un copier-coller? A l'intérieur d'une macro ou en dehors? Dans mon cas, nous nous trouvons avec des documents word générés à partir d'un logiciel mais qui sont non finalisés. La macro permet donc d'effectuer des actions qui ne sont pas réalisées par le programme, comme par exemple le redimensionnement d'images et la mises à jour de divers champs (numéros de pages sur la table de matière par exemple). Et cela doit rester automatique pour l'utilisateur final. Pouvez-vous préciser votre idée? |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 343 ![]() |
Salut,
Je pense que c'est moi qui ne comprend pas. Tu as un document où les champs posent problèmes. Est-ce un document basé sur un modèle et que c'est le modèle qui pose problème ? Est-ce le document qui est généré par un logiciel tiers qui n'est pas bien construit ? si c'est juste un document, ça vaut la peine d'essayer de sélectionner le contenu du document, le copier et le coller dans nouveau document, tous les champs sont copiés d'un document à l'autre. Même si cette copie se fait par macro, ça vaut peut-être la peine d'essayer. Une table des matières n'est jamais qu'une succession d'entrées qui peuvent être des styles.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Kévin Etudiant en apprentissage Inscription : septembre 2010 Messages : 60 ![]() |
Bonjour,
Hop, un petit temps de latence avec mon post précédent mais je vais quand même prendre le temps de solder tout ça. J'ai fini par corriger mon problème et je vais essayer d'expliquer un peu mieux de quoi il s'agissait. Je suis en présence d'un logiciel développé par ma société qui permet entre beaucoup d'autres choses de générer de manière automatique des documents Word. Pour se faire on se base sur un modèle de document, qui lui est créé à la main en observant la structure d'un document Word référence au format html. Puis au premier lancement du document, une macro se lance qui fait les finitions. Sauf que lors de la génération d'un document avec une nouvelle feuille de style qui avait été créé, la macro en question bouclait sur l'update de la table des matières et plus précisément sur l'update des hyperlink la constituant, chose qui ne se produisait pas avant. Donc problème résolu, j’exclus les hyperlien de mon update (à priori pourquoi mettre à jour ce type de champs?). Plus précisément, la nouvelle feuille de style avait été créée à partir d'un Word 2007 contrairement aux précédentes, et apparemment la représentation de la table des matières a changé. Bref, merci en tout cas pour votre aide et bonne journée! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com