Supprimer la fenêtre d'un champ ASK
Résolu/Fermé
A voir également:
- Supprimer la fenêtre d'un champ ASK
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer pub youtube - Accueil - Streaming
- Comment recuperer un message supprimé sur whatsapp - Guide
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.
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
17 juin 2010 à 23:29
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
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
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
--------------------------------------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------------------------------------
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
18 juin 2010 à 20:29
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 :
Si tu as plusieurs tables des matières, il faudra faire une boucle.
m@rina
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
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 ?
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 ?
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
23 juin 2010 à 23:10
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
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
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
25 juin 2010 à 13:53
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
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
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 ;-)
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 ;-)
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
30 juin 2010 à 13:02
30 juin 2010 à 13:02
Bonjour,
Tu crées un module de classe qui s'appelle A_table (dans mon exemple) :
Ensuite, dans ThisDocument, tu colles la macro suivante :
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
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
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 !
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 !
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
30 juin 2010 à 17:13
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
m@rina