IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Copie d'une collection de Fields [WD-2007]


Sujet :

VBA Word

  1. #1
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    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.

    @+

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  4. #4
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?).

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  6. #6
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    Par défaut
    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?

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  8. #8
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    Par défaut
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie d'une collection dans un tableau
    Par hlbnet dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 11/03/2011, 14h07
  2. [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 30/03/2004, 11h04
  3. [VB6] Sauvegarder une collection d'objets
    Par Sayagh dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2003, 11h58
  4. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo