
| auteur : Lebeau Olivier | En attribuant un nom particulier à une macro, la macro pourra s'exécuter lors de
certains évènements comme l'ouverture d'un document, la création d'un nouveau document.
Macro |
Evènement |
AutoExec |
Lorsque vous démarrez Word |
AutoNew |
Lors de la création d'un nouveau document basé sur un modèle |
AutoOpen |
Lors de l'ouverture d'un document |
AutoClose |
Lors de la fermeture d'un document |
AutoExit |
Lorsque vous quittez Word |
Document_BuildingBlockInsert |
Cette macro s'exécute lors de l'insertion d'un élément "QuickPart" |
Document_Close |
Cette macro s'exécute lors de la fermeture du document |
Document_ContentControlAfterAdd |
Lors de l'ajout d'un Contrôle de contenu spécifique |
Document_ContentControlBeforeContentUpdate |
Lors de la modification du contenu d'un Contrôle de contenu spécifique |
Document_ContentControlBeforeDelete |
Avant suppression d'un Contrôle de contenu spécifique |
Document_ContentControlBeforeStoreUpdate |
Survient avant que le magasin de données XML du document soit mis à jour avec la valeur d'un contrôle du contenu. |
Document_ContentControlOnExit |
Sur sortie du contrôle |
Document_New |
Sur création d'un nouveau document alors que le document qui contient la procédure est ouvert. |
Document_Open |
Sur ouverture d'un document alors que le document qui contient la procédure est ouvert. |
Document_Sync |
Se produit lorsque la copie locale d'un document faisant partie d'un espace de travail de document est synchronisée avec la copie sur le serveur. |
Document_XMLAfterInsert |
Se produit lorsqu'un utilisateur ajoute un nouvel élément XML à un document. |
Document_XMLBeforeDelete |
Se produit lorsqu'un utilisateur supprime un élément XML d'un document. |
|
| auteur : Lebeau Olivier | Pour faire appel à une boîte de dialogue :
Dialogs (wdDialogFileOpen). Show
|
Je vous conseille de consulter l'aide pour obtenir la liste de toutes les boîtes de dialogue disponibles.
|
| auteur : Lebeau Olivier | Avec ce code, vous pouvez choisir le mode de soulignement d'une sélection.
Selection. Font . Underline = wdUnderlineWavyHeavy
|
Liste des soulignements possibles.
- wdUnderlineDash ++ Tirets.
- wdUnderlineDashHeavy ++ Tirets épais.
- wdUnderlineDashLong ++ Tirets longs.
- wdUnderlineDashLongHeavy ++ Tirets longs épais.
- wdUnderlineDotDash ++ Alternance de points et de tirets.
- wdUnderlineDotDashHeavy ++ Alternance de points gras et de tirets gras.
- wdUnderlineDotDotDash ++ Alternance de points et de points-tirets.
- wdUnderlineDotDotDashHeavy ++ Alternance de points et de points-tirets épais.
- wdUnderlineDotted ++ Points.
- wdUnderlineDottedHeavy ++ Points épais.
- wdUnderlineDouble ++ Double ligne.
- wdUnderlineNone ++ Aucun soulignement.
- wdUnderlineSingle ++ Trait simple. Valeur par défaut.
- wdUnderlineThick ++ Trait épais simple.
- wdUnderlineWavy ++ Trait ondulé simple.
- wdUnderlineWavyDouble ++ Double trait ondulé.
- wdUnderlineWavyHeavy ++ Trait ondulé épais.
- wdUnderlineWords ++ Soulignement des mots individuels.
|
| auteur : Lebeau Olivier |
Comment retrouver le chemin du modèle normal.dot sur mon ordinateur.
Public Sub normalchemin ()
MsgBox Application. NormalTemplate . Path
End Sub
|
|
| auteur : Lebeau Olivier |
Application. ScreenUpdating = False
Application. ScreenUpdating = True
|
|
| auteur : SilkyRoad |
Sub remplacement_Macro_WordDot ()
Dim Debut As Integer, Lignes As Integer, X As Integer
Dim Fichier As String , Direction As String
Dim Doc As Document
Application. ScreenUpdating = False
Direction = " C:\Documents and Settings\michel\dossier "
Fichier = Dir (Direction & " \*.dot " )
Do While Fichier < > " "
Set Doc = Documents. Open (Direction & " \ " & Fichier)
With Doc. VBProject . VBComponents (" Module1 " ). CodeModule
Debut = . ProcStartLine (" essai " , 0 )
Lignes = . ProcCountLines (" essai " , 0 )
. DeleteLines Debut, Lignes
End With
With Doc. VBProject . VBComponents (" Module1 " ). CodeModule
X = . CountOfLines
. InsertLines X + 1 , " Sub MaNouvelleMacro() "
. InsertLines X + 2 , " MsgBox " " Coucou " " ,VBinformation "
. InsertLines X + 3 , " End Sub "
End With
DoEvents
Doc. Close True
Set Doc = Nothing
Fichier = Dir
Loop
Application. ScreenUpdating = True
End Sub
|
|
| auteur : bidou | Oui, il faut par contre demander le calcul pour une statistique
Dim objDoc As Word. Document , msg As String
Set objDoc = Application. Documents . Open (" d:\tuto.doc " )
MsgBox " Le documents contient " & objDoc. ComputeStatistics (wdStatisticPages) & " pages et " & objDoc. ComputeStatistics (wdStatisticWords) & " mots "
|
Vous pouvez obtenir les statistiques pour
- wdStatisticCharacters : nombre de caractères
- wdStatisticCharactersWithSpaces : nombre de caractères avec les espaces
- wdStatisticLines : nombre de lignes
- wdStatisticPages : nombre de pages
- wdStatisticParagraphs : nombre de paragraphes (retour chariot)
- wdStatisticWords : nombre de mots
|
| auteur : SilkyRoad |
Sub Test ()
IsolerPage 4
End Sub
Public Sub IsolerPage (NumPage As Integer)
Dim NbLigne As Long
Dim NombrePage As Integer
NombrePage = _
ActiveDocument. BuiltInDocumentProperties (" Number of Pages " )
If NombrePage < NumPage Then Exit Sub
ActiveDocument. Range . Select
Selection. GoTo What:= wdGoToPage, _
Which:= wdGoToAbsolute, Count:= NumPage + 1
Selection. Move Unit:= wdCharacter, Count:= - 1
If NombrePage = NumPage Then Selection. Move Unit:= wdCharacter, _
Count:= ActiveDocument. Range . Characters . Count
NbLigne = Selection. Information (wdFirstCharacterLineNumber)
If NombrePage = NumPage Then NbLigne = NbLigne - 1
Selection. Move Unit:= wdCharacter, Count:= 1
With Selection
. HomeKey Unit:= wdLine, Extend:= wdMove
. ExtendMode = True
. MoveUp Unit:= wdLine, Count:= NbLigne
. ExtendMode = False
End With
Selection. Copy
Documents. Add
ActiveDocument. Range . Paste
If NumPage < NombrePage Then
Selection. Move Unit:= wdCharacter, _
Count:= ActiveDocument. Range . Characters . Count
Selection. Delete Unit:= wdCharacter, Count:= 1
End If
End Sub
|
|
| auteur : SilkyRoad |
Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
vba |
Dim WordApp As Word. Application
Set WordApp = CreateObject (" Word.Application " )
WordApp. Visible = True
WordApp. Documents . Open (" C:\monDocument.dot " )
WordApp. Run " laMacro "
|
|
| auteur : bidou | Normalement, la sélection ne se fait que si Selection est la cible de la recherche ;
Néanmoins, vous pouvez procéder à la sélection en désignant le parent de l'objet Find.
Le code suivant encadre le texte GNU
Dim objDoc As Document, objRange As Range
Set objDoc = Application. Documents . Open (" c:\jmarc\tuto.doc " )
With objDoc. Content . Find
. ClearFormatting
Do While . Execute (FindText:= " GNU " , Forward:= True , Format:= True ) = True
With . Parent
. StartOf Unit:= wdWord, Extend:= wdExtend
. Borders . Enable = True
End With
Loop
End With
|
|
| auteur : bidou | On utilise pour cela l'objet PageSetup de document. Par exemple
With ActiveDocument. PageSetup
. Orientation = wdOrientLandscape
. FirstPageTray = wdPrinterDefaultBin
. OtherPagesTray = wdPrinterDefaultBin
. SectionStart = wdSectionNewPage
. OddAndEvenPagesHeaderFooter = True
. DifferentFirstPageHeaderFooter = True
. VerticalAlignment = wdAlignVerticalTop
. SuppressEndnotes = False
. MirrorMargins = True
End With
|
|
| auteur : bidou | Elles sont de plusieurs sortes.
Mot de passe d'accès
Ce code doit être passé dans la méthode open pour ouvrir le document par le code.
Protection spécifique
ActiveDocument. Protect Password:= " monpasse " , NoReset:= False , Type:= wdAllowOnlyComments
|
Dans ce cas, seuls les commentaires sont autorisés. Pour ôter la protection, utiliser le type wdNoProtection ou la méthode UnProtect
|
| auteurs : Maxence Hubiche, bidou | On utilise la décomposition du range en Start et End
ActiveDocument. Range (ActiveDocument. . Bookmarks (" sig1 " ). Range . Start , ActiveDocument. . Bookmarks (" sig2 " ). Range . End ). Select
|
|
| auteur : nico-pyright(c) |
L'objet Screen n'existant pas en VBA, on peut retrouver ces valeurs en utilisant les fonctions de l'API Win32 :
vba |
Private Declare Function GetDC Lib " user32 " (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib " user32 " (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetDeviceCaps Lib " gdi32 " (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const HWND_DESKTOP As Long = 0
Private Const LOGPIXELSX As Long = 88
Private Const LOGPIXELSY As Long = 90
Function TwipsPerPixelX () As Single
Dim lngDC As Long
lngDC = GetDC (HWND_DESKTOP)
TwipsPerPixelX = 1440 & / GetDeviceCaps (lngDC, LOGPIXELSX)
ReleaseDC HWND_DESKTOP, lngDC
End Function
Function TwipsPerPixelY () As Single
Dim lngDC As Long
lngDC = GetDC (HWND_DESKTOP)
TwipsPerPixelY = 1440 & / GetDeviceCaps (lngDC, LOGPIXELSY)
ReleaseDC HWND_DESKTOP, lngDC
End Function
|
|
| auteur : rp |
L'objet ClipBoard n'existant pas en VBA, il faut utiliser les fonctions de l'API Windows :
vba |
Private Declare Function OpenClipboard Lib " user32 " (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib " user32 " () As Long
Private Declare Function EmptyClipboard Lib " user32 " () As Long
Private Sub Commande0_Click ()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
|
|
| auteur : ThierryAim |
Lorsque le niveau de sécurité intrinsèque des documents Office est réglé sur moyen ou élevé, il est alors impossible d'activer
automatiquement les macros d'un document.
La première solution consiste à régler le niveau de sécurité sur faible (Menu Outils >> Macros >> Sécurité...), mais n'est pas très recommandée.
L'autre solution consiste à auto-certifier les macros d'un document.
Un certificat local, valable uniquement sur la machine sur laquelle il est installé, va vous permettre d'éviter le désagrément d'avoir à
confirmer l'activation des macros à l'ouverture d'un document, ou pire, la désactivation systématique des macros.
Comment procéder :
- Rechercher dans le répertoire d'installation de Microsoft Office (généralement C:\Program Files\Microsoft Office\OfficeXX) le programme SelCert.exe
- Exécuter SelfCert.exe
- Renseigner le nom du certificat dans la zone de texte et valider
- Fermer SelfCert.exe
- Ouvrir le document Office dont les macros doivent être certifiées
- Dans l'éditeur VBA (Alt-F11), menu Outils >> Signature électronique ...
- Cliquer sur "Choisir..." et sélectionner le certificat précédemment créé
- Enregistrer le document
A la prochaine ouverture du document, une alerte de sécurité va apparaître, cocher alors la case "Toujours faire confiance aux macros provenant de... ".
Pour supprimer un certificat existant :
- Panneau de configuration >> Options Internet
- Onglet Contenu, cliquer sur Certificats...
- Sélectionner le certificat et cliquer sur Supprimer
|
| auteur : SilkyRoad |
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
vba |
Dim WordApp As Word. Application
Dim WordDoc As Word. Document
Set WordApp = CreateObject (" Word.Application " )
Set WordDoc = WordApp. Documents . Add
WordApp. Visible = True
With WordDoc. PageSetup
. LeftMargin = CentimetersToPoints (1 )
. RightMargin = CentimetersToPoints (1 )
. TopMargin = CentimetersToPoints (1 . 5 )
. BottomMargin = CentimetersToPoints (2 )
End With
|
|
| auteur : SilkyRoad |
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dans l'exemple ci-dessous le signet à renseigner doit être nommé "SignetDate"
vba |
Dim WordApp As Word. Application
Dim WordDoc As Word. document
Set WordApp = New Word. Application
WordApp. Visible = True
Set WordDoc = WordApp. Documents . Open (" monDocument.doc " )
WordDoc. Bookmarks (" SignetDate " ). Range . Text = Format (Now , " dd/mm/yyyy " )
|
|
| auteur : bidou | Cela permet de gérer des opérations sur une plage sans modifier l'emplacement du point d'insertion.
Supposons que je veuille insérer deux signets, l'un sur un mot, l'autre sur le point d'insertion, je peux faire :
Selection. TypeText Text:= " Monsieur "
Set objRange = Selection. Words . First . Previous (wdWord)
objRange. Bookmarks . Add " genre "
With ActiveDocument. Bookmarks
. Add Range:= Selection. Range , Name:= " Nom "
. DefaultSorting = wdSortByName
. ShowHidden = True
End With
|
|
| auteur : bidou | Avec la méthode find et les bons paramètres
Set objDoc = Application. Documents . Open (" c:\jmarc\tuto.doc " )
objDoc. Content . Find . Execute FindText:= " GNU " , ReplaceWith:= " GPL " , Replace := wdReplaceAll
|
|
| auteur : bidou | Il y a beaucoup de confusion possible entre range et selection or les deux objets sont différents.
Pour pouvoir basculer facilement de l'un à l'autre il faut utiliser une variable Range.
Prenons un exemple
Dim objDoc As Document
Set objDoc = Application. Documents . Open (" c:\jmarc\tuto.doc " )
objDoc. Paragraphs (3 ). Range . Select
objDoc. Paragraphs (3 ). Range . EndOf wdWord, wdMove
|
Là, malgré le EndOf, le paragraphe est encore selectionné
Dim objDoc As Document, objRange As Range
Set objDoc = Application. Documents . Open (" c:\jmarc\tuto.doc " )
objDoc. Paragraphs (3 ). Range . Words (objDoc. Paragraphs (3 ). Range . Words . Count - 2 ). Select
Set objRange = objDoc. Paragraphs (3 ). Range
objRange. EndOf wdWord, wdMove
objRange. Select
|
Place le point d'insertion après le troisième paragraphe
|
| auteur : bidou | Quelques exemples standards.
Sélectionner tout le document
objDoc. Range (0 , 0 ). Select
Selection. MoveEnd wdStory
|
Aller au début du document
Selection. HomeKey Unit:= wdStory
|
Aller à la fin du document
Selection. EndKey Unit:= wdStory
|
Sélectionner une ligne
Selection. EndKey Unit:= wdLine, Extend:= wdExtend
|
Sélectionner le troisième paragraphe
objDoc. Paragraphs (3 ). Range . Select
|
|
| auteur : bidou | Sentences est une collection renvoyant les "phrases" de son conteneur (document, paragraphe ...).
Par phrase on entend tout ce qui est compris entre des points et/ou des retours chariots.
Notez que c
Dim objDoc As Document, Phrase As Range
Set objDoc = Application. Documents . Open (" D:\tuto.doc " )
MsgBox objDoc. Sentences . Count & vbCrLf & objDoc. BuiltInDocumentProperties (wdPropertyLines)
For Each Phrase In objDoc. Sentences
Phrase. Select
MsgBox " suite "
Next
|
|
| auteur : bidou | C'est normal, elle n'existe pas.
Pour gérer un document invisible dans word 97, on utilise :
Set objDoc = GetObject (" d:\user\tuto.doc " )
|
|
| auteur : bidou | C'est assez facile.
L'exemple suivant affecte la mise en exposant à CTRL+MAJ+E
CustomizationContext = NormalTemplate
KeyBindings. Add KeyCode:= BuildKeyCode (wdKeyE, wdKeyControl, wdKeyShift), KeyCategory:= wdKeyCategoryCommand, Command:= " Superscript "
|
|
| auteur : Lebeau Olivier |
Il faut utiliser deux codes, l'un sur l'ouverture et l'autre sur la fermeture du document.
Sur l'ouverture, pour atteindre un signet et le supprimer.
Sur la fermeture, pour ajouter un signet à l'endroit de la dernière édition.
|
Sub AutoOpen ()
ActiveDocument. Bookmarks (" ICI " ). Select
ActiveDocument. Bookmarks (" ICI " ). Delete
End Sub
|
|
Sub AutoClose ()
With Selection
. Bookmarks . Add " ICI "
End With
End Sub
|
|
| auteur : Lebeau Olivier |
Pour récupérer les fautes d'un document, il faut faire appel à la collection SpellingErrors.
Nous allons parcourir les membres ce cette collection, les ajouter à une variable et ensuite, insérer la variable
dans un nouveau document qui sera sauvegardé au format texte.
Sub Fautes ()
Dim mesFotes
Dim toutesmesfotes
For Each mesFotes In ActiveDocument. SpellingErrors
mesFotes. Select
toutesmesfotes = toutesmesfotes & vbCrLf & Selection
Next mesFotes
Application. Documents . Add
ActiveDocument. Content . InsertAfter toutesmesfotes
ActiveDocument. SaveAs FileName:= " c:\temp\mesftes.txt " , FileFormat:= wdFormatText
ActiveDocument. Close
End Sub
|
|
| auteur : Lebeau Olivier |
Pour changer l'imprimante par défaut en Word, c'est n'est pas sur la collection documents qu'il faut agir mais sur
l'objet application.
Sub printPDF ()
Dim oldprint
oldprint = Application. ActivePrinter
Application. ActivePrinter = " PDFCreator "
ActiveDocument. PrintOut
Application. ActivePrinter = oldprint
End Sub
|
Le code ci-dessus permet de changer l'imprimante par défaut en activant PDFCreator et après l'impression, change de nouveau l'imprimante par défaut
en reprenant l'imprimante du départ.
|
| auteur : Lebeau Olivier |
Lors de l'appel en VBA d'une application autre que l'application hôte, il est impératif d'ajouter la bibliothèque de cette application à votre projet.
Ne pas ajouter cette référence, revient à utiliser des types de données qui sont inconnus.
On ajoute ces références par le menu "Outils" "Références" de l'éditeur VBE. La boîte de dialogue contient la liste des bibliothèques disponibles.
|
| auteur : Lebeau Olivier |
En principe, une fonction ne peut renvoyer qu'une seule variable.
Partant de là, il est possible d'utiliser une variable de type utilisateur.
Type MyVar
IntA As Integer
IntB As Integer
End Type
|
Voilà un type de donnée défini par l'utilisateur.
Sub MaProc ()
Dim MyData As MyVar
With MyData
. IntA = 10
. IntB = 20
End With
MyData = monCalcul (MyData)
Debug. Print MyData. IntA , MyData. IntB
End Sub
|
Voilà un procédure qui va faire appel à une fonction et passer en paramètre une variable qui contient 2 valeurs.
Public Function monCalcul (MyDt As MyVar) As MyVar
monCalcul. IntA = MyDt. IntA * 2
monCalcul. IntB = MyDt. IntB / 4
End Function
|
Notre fonction renvoie bien deux résultats
|
| auteur : Lebeau Olivier |
Deux méthodes pour changer le répertoire par défaut de Word.
La première est permanente
Application. Options . DefaultFilePath (wdDocumentsPath) = " c:\temp "
|
La seconde n'est valable que pour la session Word en cours, si vous fermez Word, ce paramètre disparaît.
Application. ChangeFileOpenDirectory " C:\temp "
|
|
| auteur : Lebeau Olivier |
Que ce soit pour un signet ou pour un autre objet, vous devez travailler avec l'objet sélection pour pouvoir mettre du texte en gras.
ActiveDocument. Bookmarks (1 ). range . Select
With Selection
. text = " Mon Texte "
. Font . Bold = True
End With
|
Dans le code ci-avant, en plus de mettre du texte dans le signet, on le met en gras.
|
| auteur : Lebeau Olivier |
Il est possible d'utiliser une macro se trouvant dans un autre document. Il faut pour cela que le document contenant la procédure soit ouvert.
Documents (" MonDocument.docm " ). MaRoutine
|
Avec "MaRoutine" le nom de la macro située dans l'autre document.
|
| auteur : Lebeau Olivier |
Dans le déroulement d'un code, il est parfois intéressant de connaître le type de variable utilisée.
Les résultats renvoyés sont sous la forme d'un entier.
Type de donnée |
Valeur renvoyée |
Description |
vbEmpty |
0 |
Empty (non initialisée) |
vbNull |
1 |
Null (aucune donnée valide) |
vbInteger |
2 |
Entier |
vbLong |
3 |
Entier long |
vbSingle |
4 |
Nombre à virgule flottante en simple précision |
vbDouble |
5 |
Nombre à virgule flottante en double précision |
vbCurrency |
6 |
Valeur monétaire |
vbDate |
7 |
Valeur de date |
vbString |
8 |
Chaîne |
vbObject |
9 |
Objet |
vbError |
10 |
Valeur d'erreur |
vbBoolean |
11 |
Valeur booléenne |
vbVariant |
12 |
Variant (utilisée seulement avec des tableaux de variants) |
vbDataObject |
13 |
Objet d'accès aux données |
vbDecimal |
14 |
Valeur décimale |
vbByte |
17 |
Octet |
vbUserDefinedType |
36 |
Variant contenant des types définis par l'utilisateur |
vbArray |
8192 |
Tableau |
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|