VBADiverseAstuce

ThisDocument

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

Changer la police de caractère des textes de macros

Il n'est pas possible de changer la police de caractère dans la macros elle-même. Il faut :

  1. Aller dans un nouveau document vierge
  2. Aller dans la liste déroulante des styles
  3. Taper "Texte de macro" et enter
  4. Taper du texte
  5. Le sélectionner
  6. Aller dans la liste déroulante des styles
  7. Choisir "Texte de Macro"
  8. Faire Enter Enter

Changement de paramètres automatique dans les boîtes de dialogues

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

Accès à une cellule d'un document Excel

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

Accéder à un endroit précis d'un document Word

Application.Documents("Test.doc").Paragraphs(3).Range.Words(2).Characters(1).Bold = True

Ecrire du texte

Selection.TypeText Text:="a"

Frapper sur ENTER

Selection.TypeParagraph

Importer un document Word, ou TXT

Selection.InsertFile FileName:="D:\Atelier\Texte à importer.DOC"

Sélection de texte particulier

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

Lister les polices

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

Ajouter une correction automatique

AutoCorrect.Entries.Add Name:="ms", Value:="Marielle Schwartz"

Lister les corrections automatiques

For Each anEntry In AutoCorrect.Entries
Selection.TypeText anEntry.Name
Next anEntry

Remplissage de champs depuis une base de données Access

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

Revenir au point de départ

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 :

  1. Aller dans OUTILS/MACROS
  2. Demander la liste des Commandes Word
  3. Choisir la commande que l'on veut modifier
  4. Choisir dans la liste déroulante "Tous les modèles actifs" ou un modèle dans lequel on veut que la commande prédéfinie soit remplacée par une macro
  5. Cliquer sur MODIFIER
  6. Voilà le code correspondant à la commande qui apparaît

L'astuce consiste donc à créer une macro du même nom que la commande.