Supprimer la fenêtre d'un champ ASK

Résolu
whatsup -  
 whatsup -
Bonjour,

J'ai créé un modèle type (Word 2007) dans lequel je souhaite insérer plusieurs variables. C'est chose faite avec des champs ASK et une insertion du signet REF.
Mais en voulant modifier l'intitulé des questions dans la fenêtre ASK, je me retrouve avec une duplication de tous mes champs... Ainsi, chaque alerte apparait 2 fois. Je ne trouve pas comment supprimer ces champs.

J'ai déjà testé la suppression de toutes les insertions des champs et donc de me retrouver un document sans variable mais dès l'exécution de ma macro (qui actualise tous les champs, notamment la table des matières), les fenêtres / pop-up de mes champs ASK reviennent de plus belle !

Auriez-vous une solution pour supprimer tous mes champs ASK afin de pouvoir les re-créer proprement ?

Merci d'avance de vos lumières

7 réponses

  1. whatsup
     
    Quand je dis "Ainsi, chaque alerte apparait 2 fois. Je ne trouve pas comment supprimer ces champs.", il s'agit des invites ASK mises en place.
    0
  2. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonsoir,

    S'ils se manifestent 2 fois, c'est qu'ils sont mis deux fois.

    Affiche les codes de champ (Alt+F9) pour y voir plus clair.

    m@rina
    0
    1. whatsup
       
      Merci merci merci !!! Le problème est résolu grâce au Alt+F9 miracle ! Merci mille fois m@rina !
      0
    2. whatsup
       
      Je me permets d'abuser des vos connaissances encore un petit peu :-)

      Je cherche à faire une macro qui puisse mettre à jour automatiquement ma table des matières à l'enregistrement du document word... (Est-ce possible ? Existe-t-il une macro type "autosave" ?) ; seulement, j'aimerais que cette macro ne mette à jour que la table des matières et non mes champs ASK / REF.

      Actuellement, la macro mise en place pour mettre à jour ma table des matières lance également mes invites ASK (alors que celles-ci font partie d'une première macro en autonew car je ne souhaite qu'elles ne s'affichent qu'à la création d'un document à partir de mon modèle). Aussi, je n'ai pas trouvé d'automatisation permettant de lancer la macro à l'enregistrement du doc.
      Alors comment faire pour isoler ces champs ASK / REF et ne pas les inclure dans la macro mise à jour de table des matières ? (Une précision : je n'ai aucune connaissance en vba)

      Merci d'avance de vos lumières

      --------------------------------------------------------------------------------------------------------------
      Pour info, ma macro actuelle pour la MAJ du sommaire :

      Sub majSommaire()

      ActiveDocument.Fields.Update
      Dim oField As Field
      Dim oSection As Section
      Dim oHeader As HeaderFooter
      Dim oFooter As HeaderFooter
      For Each oSection In ActiveDocument.Sections
      For Each oFooter In oSection.Footers
      If oFooter.Exists Then
      For Each oField In oFooter.Range.Fields
      oField.Update
      Next oField
      End If
      Next oFooter
      For Each oHeader In oSection.Headers
      If oHeader.Exists Then
      For Each oField In oHeader.Range.Fields
      oField.Update
      Next oField
      End If
      Next oHeader
      Next oSection
      ActiveDocument.PrintPreview
      ActiveDocument.ClosePrintPreview

      --------------------------------------------------------------------------------------------------------------
      0
  3. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonsoir,

    Je suppose que tu as repiqué ce code sur mon site... Ce code permet de mettre à jour TOUS les champs d'un documents situés en en-tête ou pied de page...

    Le code dont tu as besoin n'a rien à voir avec ça !

    Essaie plutôt ceci :

    sub maj_tm()
    ActiveDocument.TablesOfContents(1).Update
    End Sub

    Si tu as plusieurs tables des matières, il faudra faire une boucle.

    m@rina
    0
    1. whatsup
       
      Effectivement j'avais piqué ça sur ton site pour (réellement) mettre à jour en-têtes et pieds de page puis entre temps, j'ai modifié pas mal de choses et je me suis emmêlée !
      Encore mille mercis en tt cas car ça fonctionne à merveille !!

      Juste une précision : est-ce possible de déclencher cette macro automatiquement à l'enregistrement du document ? et si oui... comment ?
      0
  4. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonjour,

    Avec Word, il y a très peu de macros événementielles, contrairement à Excel.
    Il n'y en a pas pour l'enregistrement, par contre on peut faire une macro qui s'active à la fermeture du document. Il suffit de nommer la macro AutoClose.

    Si tu tiens à ce que la macro s'active à l'eregistrement, il faut créer un module de classe. Procécure ici :
    https://faqword.com/index.php/faq/vba-solutions/673-comment-definir-une-imprimante-par-defaut-pour-un-document-particulier-.html

    m@rina
    0
    1. whatsup
       
      Bonjour Marina,

      Merci de réponse ;-) J'ai lu ton tuto et ai cherché un peu quel était le but d'un module de classe mais je ne comprends pas bien comment créer un module qui puisse réagir à l'enregistrement du doc
      Dans ton exemple, on détermine l'imprimante par défaut à l'ouverture du doc...
      Sub AutoOpen()
      Application.ActivePrinter = "HP Deskjet local on LPT1:"
      end Sub

      S'agit-il d'une ligne de commande à entrer dans un Sub AutoOpen () qui préciserait qu''à l'enregistrement, on doit enclencher la procédure de mise à jour de la table des matières ?
      Et si la logique est bonne, comment écrire une ligne de commande qui réagisse à l'enregistrement ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonour

    Et 1000 excuses !!!
    Je ne comprenais pas ta question... Normal, le lien que je t'ai donné n'a rien à voir avec ça !! ;)

    Voici le bon :
    https://faqword.com/index.php/word-tutoriels/toutes-versions/87-levenement-ce-sontles-evenements.html

    et tu verras que ce n'est pas aussi simple.

    m@rina
    0
    1. whatsup
       
      Bonjour ;-)

      Merci pour ce lien, je comprends mieux mais effectivement, ce n'est pas évident, d'autant plus en tant que super novice en VBA

      J'ai bien créé mon module de classe mais ça fonctionne pas....

      Voici le module en question :
      ------------------------------------------------------------------------------------------------------------------------
      Option Explicit
      Public WithEvents appWord As Word.Application

      Private Sub appWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)

      SaveAsUI = False
      If ActiveDocument.TablesOfContents(1).Update Then SaveAsUI = True
      End If
      Else
      ActiveDocument.TablesOfContents(1).Update
      SaveAsUI = True
      End If

      End Sub
      ------------------------------------------------------------------------------------------------------------------------

      Aurais-je fait une erreur qq part?
      Faut-il ajouter un Dim Save As Boolean pour reprendre après Save = True ou Save = False à la place de SaveAsUI ?

      Si tu as des conseils, des pistes, je suis preneuse ;-)
      0
  7. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonjour,

    Tu crées un module de classe qui s'appelle A_table (dans mon exemple) :

    Option Explicit
    
    Public WithEvents Appword As Application
    Public WithEvents Doc As Document
    
    
    Private Sub Appword_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    ActiveDocument.TablesOfContents(1).Update
    End Sub


    Ensuite, dans ThisDocument, tu colles la macro suivante :

    Option Explicit
    Dim T As New A_table
    
    Private Sub Document_Open()
    Set T.Appword = Word.Application
    End Sub


    Pour que ça fonctionne, la macro dans ThisDocument devra être lancée. C'est pourquoi il s'agit d'un événement Open. La macro se lancera à l'ouverture du document. Ensuite, ta TM se mettre à jour à chaque enregistrement.

    m@rina
    0
    1. whatsup
       
      Bonjour marina et merci pour ce code et surtout, pour ta patience !!!!
      Je comprends un peu mieux la mécanique... mais ça ne fonctionne toujours pas :'-(
      J'ai dû faire une mauvaise manip !

      Pour récapituler, dans "Macro" (côté Word et pas côté VB) j'ai une seule macro qui apparaît : ma macro autoNew

      Sub autoNew()
      '
      ' autoNew Macro
      '
      '
      ActiveDocument.Fields.Update
      End Sub

      que j'utilise pour que mes fenêtres de champs ASK apparaissent à la création d'un nouveau doc utilisant ce modèle.

      Ensuite côté VB, j'ai dans l'onglet Projet - TemplateProject :
      + Normal
      + TemplateProject (lenomdemonmodele)
      A_Table
      NewMacros
      ThisDocument

      NewMacros contient ma macro autoNew citée au-dessus, pour créer A_Table, j'ai fait clic droit sur le dossier TemplateProject (lenomdemonmodele) puis Insertion > Module de classe et j'ai copié le code que tu m'as donné :
      Option Explicit

      Public WithEvents Appword As Application
      Public WithEvents Doc As Document


      Private Sub Appword_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
      ActiveDocument.TablesOfContents(1).Update
      End Sub

      J'ai ensuite renommé ce module en A_Table au lieu de Classe1.

      Dernière étape, clic droit sur ThisDocument puis Code et j'ai copié ton autre code :
      Option Explicit
      Dim T As New A_table

      Private Sub Document_Open()
      Set T.Appword = Word.Application
      End Sub


      J'ai réessayé cette manip 3 fois... du coup, c'est peut-être ma manip qui n'est pas bonne :-( Ma macro autoNew fonctionne bien puisque mes fenêtres de champs ASK apparaissent bien au moment de la création du fichier mais à l'enregistrement du doc, ma table des matières ne se met pas à jour !
      0
  8. m@rina Messages postés 27507 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    La macro Sub Document_Open va fonctionner si la macro est dans le doc en question. Si la macro est dans un modèle, il faut la mettre avec l'autoNew pour qu'elle se déclenche à la création d'un nouveau document.

    m@rina
    0
    1. whatsup
       
      Fabuleux !!! Ca marche impeccable !! Merci beaucoup pour cette aide précieuse !
      0