Le document actuellement actif a un nom : ThisDocument. En VB, il est dès lors possible d'accéder à ses propriétés. Par exemple, il y a une propriété Saved qui se met automatiquement à True lorsqu'on a sauvé le document actuel. Pour changer l'état de cette propriété, il suffit d'écrire :
ThisDocument.Saved = True
Il n'est pas possible de changer la police de caractère dans la macros elle-même. Il faut :
Il est possible d'aller changer un paramètre seulement dans une boîte de dialogue. Par exemple, il s'agit de changer la taille d'un ou plusieurs caractères sélectionnés dans un texte. Il est donc nécessaire d'aller dans la boîte de dialogue FORMAT/CARACTERES. La plupart du temps, la macro permettant d'accéder à une certaine boîte de dialogue est nommée par le nom du menu suivi du nom du sous-menu. Dans notre exemple, la macro s'appelle FormatCaracteres. Pour connaître la manière d'accéder au paramètre taille de cette boîte de dialogue, il faut écrire dans la macro FormatCaracteres et F1. Là on constate que le paramètre s'appelle Points. On écrit donc ceci : FormatCaracteres.Points = 80 par exemple.
Il est possible de lier des événements aux documents. Voici les 3 événements possibles :
Close |
Se produit lorsqu'on ferme un document |
New |
Se produit lorsqu'on crée un document basé sur le modèle dans lequel cet événement New est implémenté. Il ne sert donc apparemment à rien d'utiliser cet événement dans un .DOC standard |
Open |
Se produit à l'ouverture du fichier |
Dim UneVariable As Excel.Workbook
Set UneVariable = Workbooks.Open(FileName:="d:\atelier\zebre.xls")
MsgBox UneVariable.Worksheets(1).Range("A10") ' Ne marche pas… Pourquoi ? pourtant ça marche avec A1….
Set UneVariable = Nothing
Application.Documents("Test.doc").Paragraphs(3).Range.Words(2).Characters(1).Bold = True
Selection.TypeText Text:="a"
Selection.TypeParagraph
Selection.InsertFile FileName:="D:\Atelier\Texte à importer.DOC"
Cet exemple met en gras depuis le début du 2ème mot jusqu'à la fin du 4ème mot du document actif :
ActiveDocument.Range(Start:=ActiveDocument.Words(2).End, End:=ActiveDocument.Words(4).End).Bold = True
Dim Police
For Each Police In FontNames
Selection.TypeText "éèàêôâûäöü - " & Police
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Name = Police
Selection.EndKey Unit:=wdLine
Selection.TypeParagraph
Next Police
AutoCorrect.Entries.Add Name:="ms", Value:="Marielle Schwartz"
For Each anEntry In AutoCorrect.Entries
Selection.TypeText anEntry.Name
Next anEntry
Pour ce faire, on doit avoir une icône personnalisée qui fait apparaître un UserForm dans laquelle il y a une seule liste déroulante. Le code qui doit être affecté à ce bouton est le suivant :
Il ouvre la base Access, et remplit la liste déroulante Word grâce à Additem avec les données Access.
En dernier lieu, il affiche cette boîte de dialogue personnalisée :
Sub RemplirChamp()
' Préparation et initialisation des variables :
Dim BaseAccess As Database
Dim TableClient As Recordset
Set BaseAccess = DBEngine.Workspaces(0).OpenDatabase("d:\atelier\AccessDB.mdb")
Set TableClient = BaseAccess.OpenRecordset("T_Client", dbOpenDynaset)
TableClient.MoveFirst
TableClient.MoveFirst
While Not TableClient.EOF
WordForm.LIMClient.AddItem (TableClient("NomClient"))
TableClient.MoveNext
Wend
WordForm.Show
TableClient.Close
BaseAccess.Close
Set BaseAccess = Nothing
Set TableClient = Nothing
End Sub
Ensuite, une fois que la boîte de dialogue personnalisée est à l'écran, voici le code à installer sur l'événement change de la liste déroulante :
Private Sub LIMClient_Change()
' Préparation et initialisation des variables :
Dim BaseAccess As Database
Dim TableClient As Recordset
Set BaseAccess = DBEngine.Workspaces(0).OpenDatabase("d:\atelier\AccessDB.mdb")
Set TableClient = BaseAccess.OpenRecordset("T_Client", dbOpenDynaset)
' Recherche du client se trouvant dans la liste déroulante
TableClient.MoveFirst
TableClient.FindFirst ("[NomClient]='" & LIMClient & "'")
' Remplissage des champs avec les champs Access : activeDocument.FormFields("WordID").Result = TableClient("IDClient")
ActiveDocument.FormFields("WordNom").Result = TableClient("NomClient")
ActiveDocument.FormFields("WordPrenom").Result = TableClient("Prenom")
' Fermetture et libération de la mémoire
TableClient.Close
BaseAccess.Close
Set BaseAccess = Nothing
Set TableClient = Nothing
End Sub
Cette astuce permet, ou qu'on soit dans un document, de se placer en fin de document, y écrire "CA MARCHE", et de revenir ensuite au point initial :
Dim Origine As Range
Set Origine = Selection.Range
Selection.EndKey wdStory
Selection.TypeText "CA MARCHE"
Origine.Select
Voici la marche à suivre :
L'astuce consiste donc à créer une macro du même nom que la commande.