Vous pouvez utilisez la méthode OnTime prévue pour faire démarrer la macro à une heure donnée.
Cette méthode va permettre également de faire une pause dans une macro, en définissant un laps de temps avant la reprise..
La syntaxe est la suivante :
Application.OnTime(When, Name, Tolerance)
L'argument When détermine l'heure à laquelle la macro va reprendre. On va donc utiliser la fonction Now à laquelle on va ajouter le laps de temps souhaité.
L'agument Name demande le nom de la macro à exécuter. Ce qui signifie qu'il faudra donc deux macros, l'une pour le début du code et l'autre pour la fin du code après la pause.
L'argument Tolérance permet d'annuler la macro. C'est la durée maximale (en secondes) pouvant s'écouler avant l'annulation de la seconde macro tant qu'elle n'a pas été exécutée.
L'exemple ci-dessous montre affiche un message, puis attend 20 secondes avant d'afficher le seconde message compris dans la seconde macro.
Sub Macro1()
MsgBox "Ceci est le début de la macro, lorsque vous appuierez sur OK," & _
" vous attendrez 20 secondes que la macro reprenne"
' Pause de 20 seconds.
Application.OnTime When:=Now + TimeValue("00:00:20"), _
Name:="Macro2"
End Sub
Public Sub Macro2()
MsgBox "la seconde macro reprend : Ce message s'affiche 20 secondes après le premier"
End Sub
]]>
Dans l'éditeur VBA, vous avez deux possibilités :

Voici trois macros automatiques à mettre dans un module ordinaire. Elles doivent se nommer :
Exemples :
La macro suivante va afficher un message "Hello" à l'ouverture d'un document.
Sub AutoOpen
msgbox "Hello"
End Sub
La macro suivante va afficher un message "Hello" à la création d'un nouveau document basé sur le document où se trouve la macro.
Sub AutoNew
msgbox "Hello"
End Sub
La macro suivante, stockée dans le Normal.dotm, va afficher un message "Hello" au lancement de Word.
Sub AutoNew
msgbox "Hello"
End Sub
Les macros stockées ThisDocument, appelées événementielles parce qu'elles vont être lancées suite à un événement (Ouvrir, Nouveau, etc.).
Dans la fenêtre du projet VBE, ouvrez le projet (modèle ou document en cours) puis cliquez sur le module ThisDocument (voir capture d'écran ci-avant). En haut de la partie droite, vous disposez de deux listes déroulantes :

La macro sera automatiquement créée, par exemple la macro suivante se lancera lorsqu'un nouveau document sera créé sur la base du modèle dans lequel se trouve la macro.
Private Sub Document_New()
End Sub
L'événement Open lancera la macro à l'ouverture du document, et l'événement Close lancera la macro à la fermeture du document.
Pour tout savoir sur les macros événementielles prédéfinie , voyez cet article de Geo.
Application.DisplayAlerts = wdAlertsNone
NB : pour info, c'est différent en VBA Excel et Access ! Pour mémoire :
Avec Access :
Docmd.Setwarnings False
Avec Excel :
Application.displayAlerts = false
Il reste conseillé de rétablir les avertissements dès qu’il n’est plus souhaitable de les inhiber…
]]>
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As
String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) As Long
Public Sub test()
Dim Prog As String, Chemin As String, Ret As Long
Chemin = "E:Program FilesMicrosoft OfficeOffice"
Prog = "Cgmimp32.hlp"
Ret = ShellExecute(Ret, "open", Prog, "", Chemin, 1)
'Pour fermer : remplacer Open par close
End Sub
Avec une autre macro !
La désormais très célèbre BatchMacro permet d'éviter d’avoir à écrire une macro qui boucle sur une série de fichiers. Il suffit de disposer d’une macro simple pour un seul fichier et la BatchMacro fera les reste. Elle vous demandera de choisir les fichiers à traiter ainsi que la macro à lancer.
Lisez bien le fichier "lisez-moi" avant de commencer.
]]>Si cette macro ne doit être disponible que pour un document en particulier, sélectionnez le nom du document dans la liste en haut à droite.
]]>
C'est le principe de la *surcharge* :
Toute macro portant le *même nom* qu'une commnande Word sera exécutée en lieu et place de cette commande.
Il faut parfois surcharger plusieurs commandes (menu/bouton).
Exemple : FichierImprimer et FichierImprimerDéfaut
Word facilite la surcharge :
- Alt-F8 : Outils/Macro/Macros
- Macros disponibles dans : Commandes Word
- Sélectionner la commande à surcharger (la liste complète peut être placée dans un tableau en exécutant ListerCommandes - toutes commandes )
- Modifier de nouveau Macros disponibles dans : sélectionner un modèle ou document pour y placer la macro de surchage par exemple Normal.dot pour surcharger globalement
- Bouton Créer
Dans l'éditeur VBE notez que Word dans ses commentaires sait déjà qu'il s'agit d'une surcharge !
Plus fort encore :
Reprendre cette manip mais au lieu de surcharger la commande française FichierImprimer utilisez le nom de commande originale en anglais : FilePrint (ou FilePrintDefault)
- Bouton Créer
Cette fois non seulement Word place les commentaires de surcharge mais inscrit aussi le code de la commande elle-même. Dans bien des cas en effet on souhaitera conserver l'action de la commande : il suffira d'y ajouter son propre code.
]]>
Il y a deux solutions :
C'est la solution par défaut. Si vous utilisez l'enregistreur de macros, par exemple, la macro est par défaut stockée dans le Normal.dot(m).
C'est cependant la plus mauvaise des solutions : un normal.dot(m) surchargé est plus propice à la corruption. Donc, à moins qu'il ne s'agisse d'une toute petite macro, la seconde solution est préférable.
]]>