Supprimer la fenêtre d'un champ ASK

Résolu/Fermé
whatsup - 16 juin 2010 à 16:38
 whatsup - 1 juil. 2010 à 09:35
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
A voir également:

7 réponses

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
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
17 juin 2010 à 23:29
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
Merci merci merci !!! Le problème est résolu grâce au Alt+F9 miracle ! Merci mille fois m@rina !
0
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
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
18 juin 2010 à 20:29
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
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
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
23 juin 2010 à 23:10
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
25 juin 2010 à 13:53
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
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
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
30 juin 2010 à 13:02
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
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
m@rina Messages postés 20042 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 avril 2024 11 269
30 juin 2010 à 17:13
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
Fabuleux !!! Ca marche impeccable !! Merci beaucoup pour cette aide précieuse !
0