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 :

Comment remplacer des images dans des entêtes non reliées [WD-2003]


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut Comment remplacer des images dans des entêtes non reliées
    Bonjour,

    J'ai un document qui contient des coupures de sections avec des entêtes non reliées et je dois changer le logo qui se trouve dans toutes les entêtes. Que dois-je ajouter à mon code pour que ça fonctionne. Je ne sais jamais combien de sections il y aura, donc il faut une répétition jusqu'à la fin.

    Voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Selection.HomeKey Unit:=wdStory
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
        Selection.Delete Unit:=wdCharacter, Count:=1
        Dialogs(wdDialogInsertPicture).Show
        Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
        Selection.Copy
        ActiveDocument.ActiveWindow.ActivePane.View.NextHeaderFooter
        Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
        Selection.PasteAndFormat (wdPasteDefault)
    Merci.

  2. #2
    Expert confirmé
    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 : 62
    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
    Par défaut
    Bonjour Francine222,

    Ton code est une bonne base mais tu dois le compléter avec 2 choses :
    1. Tu dois prendre en compte que chaque section de Word peut avoir potentiellement 3 "sous-sections"
      • wdHeaderFooterPrimary pour la "sous-section" standard
      • wdHeaderFooterEvenPages pour la "sous-section" des pages impaires (en cas de définition d'un entête différent pour les pages paires/impaires)
      • wdHeaderFooterFirstPage pour la "sous-section" de la 1ere page (en cas de définition d'un entête différent pour la 1ere page)
    2. La boucle sur toutes les sections dont le nombre est dans
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ActiveDocument.Sections.Count


    Si tu as besoin de plus d'infos, n'hésite pas.

    @+

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    J'ai continué à travailler sur mon code hier et j'ai réussi à faire en sorte que tous les logos se modifient avec le nouveau choisi. Parcontre, lorsque le code a effectué la dernière modification il donne un message d'erreur sur la ligne 12.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    1   Selection.HomeKey Unit:=wdStory
    2   ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    3   Selection.Delete Unit:=wdCharacter, Count:=1
    4   Dialogs(wdDialogInsertPicture).Show
    5   Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    6   Selection.Copy
    7   ActiveWindow.ActivePane.View.NextHeaderFooter
    8  
    9   Do
    10     Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    11     Selection.PasteAndFormat (wdPasteDefault)
    12     ActiveWindow.ActivePane.View.NextHeaderFooter
    13  Loop
    14   
    15  ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Comment fait-on pour lui dire que s'il n'y a plus d'entête de passer à la ligne 15. Je ne sais pas comment écrire un code en cas d'erreur OU comment faire pour un Loop Until (Loop Until NextSection = False ???)

    Merci pour ton aide.

  4. #4
    Expert confirmé
    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 : 62
    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
    Par défaut
    Salut Francine222,

    Oui, un truc comme ça (Loop Until NextSection = False ???), ce serait bien mais Word ne permet pas de tester mais en revanche Word sait calculer le nombre de sections : ActiveDocument.Sections.Count, donc il suffit de vérifier que ton compteur n'est pas le dernier pour appeler l'instruction nextHeader...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
       Selection.HomeKey Unit:=wdStory
       ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
       Selection.Delete Unit:=wdCharacter, Count:=1
       Dialogs(wdDialogInsertPicture).Show
       Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
       Selection.Copy
     
       For aI = 1 to ActiveDocument.Sections.Count
           Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
           Selection.PasteAndFormat (wdPasteDefault)
           if aI < ActiveDocument.Sections.Count Then
               ActiveWindow.ActivePane.View.NextHeaderFooter
           End If
      Next
     
      ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    @+

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    Bonjour Sepia

    J'ai ajusté mon code, il ne me reste plus que la partie des sous-sections, je ne sais pas comment le faire, peux-tu me donner un coup de main. J'ai aussi remarqué que lorsque je clique sur OK pour fermer le userform ça prend maintenant un temps fou, je dois même parfois cliquer une deuxième fois pour qu'il continue et ferme.

    Merci.

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

Discussions similaires

  1. [Débutant] Comment afficher plusieurs images dans des axes differents
    Par DOUBLE_H dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 07/06/2011, 23h22
  2. Réponses: 21
    Dernier message: 16/01/2008, 09h07
  3. Afficher des images avec des espaces dans le nom
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/03/2007, 07h18
  4. Réponses: 11
    Dernier message: 09/06/2006, 15h44
  5. Insertion des boutons et des images dans une JTable
    Par anouar dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 20h23

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