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

Word Discussion :

Interface demande renseigner un texte qui se place automatiquement dans l'en-tête [WD-2010]


Sujet :

Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Interface demande renseigner un texte qui se place automatiquement dans l'en-tête
    Bonsoir à toutes et à tous,

    Nouveau dans le coin, je cherche une solution à mon problème.

    J'ai un document qui comporte dans l'en-tête de chaque page un tableau (1 ligne et 3 colonnes). Mon document est composé aussi bien de pages en mode portrait et en mode paysage (je ne peux donc pas lier toutes mes en-têtes entre elles). Jusque là pas de problème.
    Maintenant je souhaite renseigner dans la troisième colonne de mon tableau la référence du document (qui est différente du nom du fichier). Cependant afin de ne pas oublier de renseigner ce champ je souhaite qu'à l'ouverture de mon fichier une boite d'interface s'ouvre et me demande de renseigner la référence du document.

    J'ai réussi à faire cela en utilisant le champ "Remplir". Cependant, lorsque je lance l'impression du document la boite s'affiche de nouveau. Si on ne fait pas attention et que l'on clique sur OK l'impression se lance avec la valeur par défaut.

    Je recherche donc :
    • soit à désactiver l'ouverture de la boite lors de l'impression (mais je pense que cela n'est pas possible),
    • soit à définir comme valeur par défaut la valeur rentrée précédemment (autrement dit dès que je rentre une valeur elle serait de suite convertie en valeur par défaut et lors de l'impression la boîte s’ouvrirait avec la bonne valeur),
    • soit une autre méthode (probablement VBA ?).



    La contrainte supplémentaire est que toutes les en-têtes ne sont pas liées (dû au fait des orientations portrait et paysage) et j'aimerais n'avoir besoin de renseigner qu'une seule fois la référence du document.

    Vous trouverez en PJ un exemple de la structure du document.

    Si l'un s'entre vous a une idée de solution, je suis preneur.
    Pour info je n'ai jamais effectué de macro VBA sous Word, si c'est la seule solution je risque d'avoir besoin de votre aide.

    N'hésitez pas à demander des explications si je n'ai pas été clair.

    Bonne soirée.
    Fichiers attachés Fichiers attachés

  2. #2
    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,


    La méthode qui me semble la plus simple et la plus évolutive (je pense que tu ne vas pas en rester là pour les automatismes).

    On récupère en VBA le contenu de la cellule pour l'afficher dans un UserForm.
    Soit on modifie cette valeur, soit on la laisse.

    Voilà un exemple.

    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
    18
    19
    Sub document_open()
    Dim oTbl As Table
    Dim strTemp
     
    Set otlb = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1)
     
    strTemp = NetText(oTbl.Cell(1, 3).Range.Text)
     
    oTbl.Cell(1, 3).Range.Text = InputBox("Vérifiez le texte", "votre attention est requise !", strTemp)
     
    Set oTbl = Nothing
     
     
    End Sub
     
    Public Function NetText(strNet As String) As String
    NetText = Left(strNet, Len(strNet) - 2)
     
    End Function
    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 !

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Heureux-oli,

    Je te remercie c'est exactement le genre d'interface que je souhaitais mettre en place.
    En mettant en place la macro cela fonctionne.
    Cependant j'aimerais développer 2 points :
    • le code fonctionne sur toutes les pages tant qu'il n'y a pas de saut de section. Si c'est le cas cela ne marche plus après le premier saut de section. J'imagine qu'il faut écrire quelque chose après ActiveDocument.Sections(1) mais je n'ai aucune idée de ce que cela peut être
    • quel code faut-il taper pour que la macro se lance automatiquement lors de l'ouverture du document ?



    Encore merci Heureux-oli !

  4. #4
    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,

    Ce code simplement mis dans le module ThisDocument sera lancé lors de chaque ouverture.

    Un copier coller avec liaison ou encore un champ STYLEREF ou un champ faisant référence à un signet positionné dans la première cellule (plus complexe, il arrive que le signet soit détruit).

    Ou alors, une boucle sur toutes les sections du document.
    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 !

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous,

    Je m'excuse de ne pas vous avoir donné la solution que j'ai utilisée pour résoudre mon problème. En fait, j'ai demandé à la macro de sélectionner le texte dans la case du tableau dans l'en-tête, de le copier puis d'activer l'une après l'autre les sections suivantes puis de coller dans la même case du tableau la valeur.

    Voici mon code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub document_open()
    Dim oTbl As Table
    Dim srtTemp
     
    Set oTbl = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1)
     
    strTemp = NetText(oTbl.Cell(1, 3).Range.Text)
     
    oTbl.Cell(1, 3).Range.Text = InputBox("Renseignez la référence du document", "Votre attention est requise !", strTemp)
     
    Set oTbl = Nothing
     
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 3).Select
    Selection.Copy
     
    Dim sec As Section
     
    For Each sec In ActiveDocument.Sections
        sec.Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 3).Select
        Selection.Paste
     
    Next sec
     
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
     
    End Sub
     
    Public Function NetText(strNet As String) As String
    NetText = Left(strNet, Len(strNet) - 2)
    End Function
    Je clôture donc le sujet. Merci pour votre aide précieuse !

    A bientôt !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/02/2011, 10h55
  2. Afficher une partie de texte qui est préalablement stockée dans la base
    Par sooprano dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/02/2010, 20h55
  3. Réponses: 4
    Dernier message: 05/06/2009, 13h48
  4. [JComboBox] Afficher du text qui n'est pas dans la liste
    Par metaska dans le forum Composants
    Réponses: 3
    Dernier message: 10/09/2008, 13h30
  5. Texte qui se centre automatiquement lors d'un petit paragraphe
    Par fredvince dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/09/2007, 23h42

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