Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 18h58   #1
Membre du Club
 
Avatar de yaraco
 
Kévin
Etudiant en apprentissage
Inscription : septembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Kévin
Localisation : France

Informations professionnelles :
Activité : Etudiant en apprentissage
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 60
Points : 65
Points : 65
Par défaut Copie d'une collection de Fields

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 :
1
2
3
4
5
  Dim taille As Integer
  taille = FieldList.Count
  For i = 1 To taille
        myFields.Add (FieldList.Item(i))
  Next i
Ce que je souhaiterais maintenant faire, c'est parcourir ma collection myFieds et sur tous ces éléments, appeler la méthode Update qui est une méthode de Field.

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!
yaraco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 19h36   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
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.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h31   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h04   #4
Membre du Club
 
Avatar de yaraco
 
Kévin
Etudiant en apprentissage
Inscription : septembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Kévin
Localisation : France

Informations professionnelles :
Activité : Etudiant en apprentissage
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 60
Points : 65
Points : 65
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 :
1
2
3
4
 
For Each currentField In FieldList
   currentField.Update
Next currentField
J'essayais donc de copier chaque objet de cette première collection pour avoir une collection que j'ai entièrement créée moi même et hypothétiquement tenter de résoudre le bug (la première collection vient d'un "ThisDocument.Fields").

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?).
yaraco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h04   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h13   #6
Membre du Club
 
Avatar de yaraco
 
Kévin
Etudiant en apprentissage
Inscription : septembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Kévin
Localisation : France

Informations professionnelles :
Activité : Etudiant en apprentissage
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 60
Points : 65
Points : 65
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?
yaraco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h24   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 10h10   #8
Membre du Club
 
Avatar de yaraco
 
Kévin
Etudiant en apprentissage
Inscription : septembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Kévin
Localisation : France

Informations professionnelles :
Activité : Etudiant en apprentissage
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 60
Points : 65
Points : 65
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!
yaraco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h14.


 
 
 
 
Partenaires

Hébergement Web