Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM OFFICE FAQs OFFICE TUTORIELS OFFICE LIVRES OFFICE SOURCES VBA ACCESS

Les variables de document

Par Olivier Lebeau (Heureux-oli sur DVP)
 

Dans un document Word, il est possible de stocker des valeurs à un autre endroit que dans le texte. Il existe plusieurs possibilités. Nous allons parcourir quelques solutions.

1. Introduction
2. DocumentProperties
3. CustomProperties
4. Variables
5. Les propriétés des documents avec DSO
5-A. SummaryProperties
5-B. CustomProperties
6. Remerciements


1. Introduction

Word offre la possibilité de stocker des informations qui peuvent être visibles ou cachées. Nous allons parcourir trois moyens de stocker des données à un autre emplacement que dans le texte. Mais si ces données sont cachées, il est tout à fait possible de les afficher dans le document.

Les trois moyens que nous allons parcourir sont :

  • Les DocumentProperties
  • Les CustomProperties
  • Les Variables
Les illustrations sont issues de la version 2007 de Word, mais les méthodes décrites fonctionnent également pour les versions antérieures.

Si vous décidez de faire une gestion numérotée en Word, les propriétés et variables vont vous aider.

idea Si vous voulez faire une gestion numérotée plus efficace, utilisez Access, vous obtiendrez de meilleurs résultats.

2. DocumentProperties

La première solution est l'utilisation des propriétés de document. Le but principal de ces propriétés est de fournir des renseignements sur l'auteur, la taille du document, le titre du document, ...

Certaines de ces propriétés peuvent être directement utilisées dans l'Explorateur Windows. En modifiant l'affichage, on peut obtenir l'affichage de propriétés accessibles en VBA. Nous pouvons utiliser ces propriétés pour faciliter la recherche des documents ou le tri, mais nous pouvons les détourner de leur but initial pour y stocker des données.

warning Les données que vous pouvez stocker dans les propriétés des documents ne peuvent pas être sensibles puisqu'elles sont facilement accessibles.
On accède aux propriétés de document à l'aide de la collection BuiltInDocumentProperties. Cette collection appartient à l'objet Document

ActiveDocument.BuiltInDocumentProperties
Ce code n'est pas suffisant, pour l'utiliser correctement, il faut lui donner un argument qui correspond à la propriété désirée.

Propriété Description
wdPropertyAppName Nom d'application.
wdPropertyAuthor Auteur.
wdPropertyBytes Nombre d'octets.
wdPropertyCategory Catégorie.
wdPropertyCharacters Nombre de caractères.
wdPropertyCharsWSpaces Nombre de caractères, espaces compris.
wdPropertyComments Commentaires.
wdPropertyCompany Société.
wdPropertyKeywords Mots clé.
wdPropertyLastAuthor Dernier auteur.
wdPropertyLines Nombre de lignes.
wdPropertyManager Gestionnaire.
wdPropertyNotes Notes.
wdPropertyPages Nombre de pages.
wdPropertyParas Nombre de paragraphes.
wdPropertyRevision Nombre de révisions.
wdPropertySecurity Paramètre de sécurité.
wdPropertySubject Objet du document.
wdPropertyTemplate Nom du modèle.
wdPropertyTimeCreated Heure de création.
wdPropertyTimeLastPrinted Heure de la dernière impression.
wdPropertyTimeLastSaved Heure du dernier enregistrement.
wdPropertyTitle Titre.
wdPropertyVBATotalEdit Nombre de modifications au projet VBA.
wdPropertyWords Nombre de mots.

Cette liste exhaustive nous apprend que certaines propriétés ne peuvent être utilisées pour stocker des données, Word les utilise déjà.

Les propriétés qui me semblent utilisables sont :

  • wdPropertyAuthor
  • wdPropertyComments
  • wdPropertyCompany
  • wdPropertyLastAuthor
  • wdPropertyNotes
  • wdPropertySubject
  • wdPropertyTitle
Où trouver dans l'interface graphique ces propriétés.

La modification des options du document se fait à l'aide de Textbox

Le simple fait d'écrire dans les Textbox modifie la propriété lors de la sauvegarde du document.

Il existe une boîte de dialogue avancée pour modifier les propriétés du document.

Le résultat obtenu dans l'Explorateur Windows.

Le but poursuivi n'est pas l'utilisation de l'interface graphique, mais l'accès aux propriétés du document en VBA.

Pour accéder aux différentes propriétés de document en VBA, vous devez les passer en argument à la propriété.

ActiveDocument.BuiltInDocumentProperties(wdPropertyAuthor) = "Mes Données"
Ces propriétés n'acceptent que des données simples, il n'est pas possible d'utiliser des tableaux. Heureusement, VBA recèle des ressources qui nous permettent de transformer du texte simple en tableau.
Certains objets utilisés par Word nécessitent l'utilisation de tableau, les listes déroulantes en font partie.
Nous allons utiliser une fonction VBA pour transformer notre ligne en tableau.

La fonction VBA qui permet la transformation de texte en tableau est Split. Si nous utilisons un caractère précis pour séparer les données, nous aurons la possibilité d'utiliser ce caractère en paramètre dans la fonction Split.
Le caractère que je vous conseille d'utiliser est le ";". Il est en règle générale utilisé pour séparer les éléments d'une liste.

Nous allons dans un document insérer un contrôle de formulaire "ListeDéroulante".

Si vous double-cliquez sur le contrôle, vous aurez accès à ses propriétés.

Pour notre test, nous allons travailler en deux phases, la première va servir à remplir la propriété avec un texte de test, la seconde à remplir le contrôle avec les valeurs contenues dans la propriété.

Sub RemplirProp()
Dim stTemp As String

stTemp = "valeur1;valeur2;valeur3;valeur4"
ActiveDocument.BuiltInDocumentProperties(wdPropertyComments) = stTemp


End Sub
Ensuite, nous allons remplir la liste avec nos valeurs issues de notre propriété et transformées en tableau.

Sub RemplirListe()
Dim stTab() As String
Dim i As Integer
stTab = Split(ActiveDocument.BuiltInDocumentProperties(wdPropertyComments), ";")
With ActiveDocument.FormFields(1).DropDown
For i = 0 To UBound(stTab)
    .ListEntries.Add stTab(i)
Next i
End With

End Sub
Détail du code
  • Déclaration de nos variables : Dim StTab() As String et Dim i As Integer
  • Récupération des données contenues dans la propriété et séparée pour en faire un tableau : Split(ActiveDocument.BuiltInProperties(wdPropertyComment),";"
  • Remplissage de la liste déroulante : ActiveDocument.FormFields(1).DropDown.ListEntries.Add et pour chaque élément du tableau dans une boucle.

Le résultat :

Les propriétés avec les éléments de la liste
Il existe une méthode simple pour visualiser dans un document les données contenues dans une propriété de document.
Cette méthode passe par l'utilisation de champs.

{ COMMENTS   \* MERGEFORMAT }

L'inconvénient majeur à l'utilisation des propriétés du document pour assurer la persistance des données est la possibilité d'accéder aux données très facilement. N'importe quel utilisateur peur modifier le données.
Comme vous l'avez vu plus haut, l'utilisateur peut accéder aux propriétés par l'interface graphique et les modifier sans aucune difficulté.


3. CustomProperties

En plus des propriétés du document incluses, Word vous offre la possibilité d'utiliser des propriétés personnelles. Ces propriétés sont contenues dans la collection CustomDocumentProperties. La taille des données autorisée pour ces propriétés est comme pour les propriétés prédéfinies de 255 caractères.

L'utilisation de ces propriétés se fait de la même manière que pour les propriétés incluses avec comme seule différence le nom de la propriété qui est libre.

Sub AjoutPropPerso()
ActiveDocument.CustomDocumentProperties.Add Name:="MonNom", LinkToContent:=False, Value:="Olivier", Type:=msoPropertyTypeString
End Sub
warning Les propriétés personnelles doivent être gérées avec rigueur, Word n'accepte pas la création d'une propriété existante. Si vous exécutez le code ci-dessus deux fois de suite, une erreur est levée.
info Tous les arguments doivent être spécifiés. Si vous omettez un argument, vous lèverez une erreur spécifiant que le nombre d'arguments n'est pas correct. Curieusement, il n'y a pas d'aide à la saisie.
On peut gérer cette erreur de la façon suivante :

Sub TestExistProp()
On Error GoTo Ajout
If Not (IsNull(ActiveDocument.CustomDocumentProperties("MonNom").Value)) Then Exit Sub
Ajout:
If Err.Number = "5" Then
ActiveDocument.CustomDocumentProperties.Add Name:="MonNom", LinkToContent:=False, Value:="Olivier", Type:=msoPropertyTypeString
Else
MsgBox "Erreur non gérée"
End If
End Sub
Ce code gère l'erreur mais n'est pas très performant. Si l'on désire avoir une gestion plus efficace des propriétés personnelles, il est préférable de le faire à l'aide d'une routine séparée.

Sub TestExistProp(MaVar As String)
On Error GoTo Ajout
If Not (IsNull(ActiveDocument.CustomDocumentProperties("MonNom").Value)) Then ActiveDocument.CustomDocumentProperties("MonNom").Value = MaVar
Ajout:
Select Case Err.Number
Case "5"
ActiveDocument.CustomDocumentProperties.Add Name:="MonNom", LinkToContent:=False, Value:=MaVar, Type:=msoPropertyTypeString
Case "0"
Exit Sub
Case Else

MsgBox "Erreur non gérée" & vbCrLf & Err.Number & vbCrLf & Err.Description
End Select


End Sub
Et son appel :

Sub AjoutDonnee()
TestExistProp ("Vive ma chérie")
End Sub
Si vous désirez supprimer votre propriété :

Sub SuppressionPropriete()
ActiveDocument.CustomDocumentProperties("MonNom").Delete

End Sub
Dès son ajout, cette propriété devient disponible dans la liste des propriétés du document. Si vous désirez ajouter un champ contenant une propriété du document, votre propriété s'y trouve.

Notre nouvelle propriété
Lors du passage des arguments à notre méthode, nous avons la possibilité de choisir le type de données qui sera utilisé.

Argument Type
msoPropertyTypeDate Date
msoPropertyTypeBoolean Boolean
msoPropertyTypeFloat Floating point
msoPropertyTypeNumber Integer
msoPropertyTypeString String

En comparaison avec les données prédéfinies de la partie précédente, nous obtenons un avantage supplémentaire, les données ne sont plus modifiables aussi facilement par l'utilisateur.


4. Variables

La dernière façon d'ajouter des données persistantes à un document que nous allons aborder est l'ajout de variables de document. Ces variables sont accessibles par le code et sont affichables par le biais des champs.
Les variables de document se présentent sous la forme suivante :

ActiveDocument.Variables("MaVariable").Value
Une différence marquante existe entre une variable de document et un propriété, la variable n'est pas limitée à 255 caractères.

Pour ajouter une variable, nous utilisons la méthode Add, pour la supprimer, la méthode Delete.

Sub AjoutVriable()
ActiveDocument.Variables.Add Name:="MaVariable", Value:="LaValeur"
End Sub
info Lorsqu'une variable existe et que vous essayer de l'ajouter à nouveau, vous levez une erreur.
Si vous gérez l'erreur, il est possible d'utiliser une routine pour l'ajout des données dans une variable. Si cette variable n'existe pas, elle sera créée, si elle existe, on lui affectera une valeur.

Sub AddVariables(stName As String, stValue As String)
On Error Resume Next
ActiveDocument.Variables.Add Name:=stName, Value:=stValue
Select Case Err.Number
Case "5905"
ActiveDocument.Variables(stName).Value = stValue
Case Else
Exit Sub
End Select


End Sub
L'appel de la routine :

Sub TestAjout()
AddVariables "NouvelleVariable", "NouvelleValeur"
End Sub
Word offre aussi la possibilité d'afficher les variables au travers des champs.

{ DOCVARIABLE  "Test" \* MERGEFORMAT }

5. Les propriétés des documents avec DSO

Pour lire ou modifier les propriétés des documents office, il n'est pas nécessaire de les ouvrir avec l'application concernée.
Microsoft met à notre disposition une bibliothèque permettant de lire et modifier certaines propriétés.


Cette bibliothèque est utilisable en VBA par toutes les applications Office. Pour l'utiliser, vous devez juste la référencer dans votre projet.

Deux Classes nous intéressent dans cette bibliothèque :
CustomProperties
SummaryProperties


5-A. SummaryProperties

La bibliothèque DSO permet la lecture et la modification des propriétés de document. L'avantage des cette bibliothèque, c'est qu'il n'est pas nécessaire d'ouvrir les fichiers avec l'application qui y est associée.
Afficher l'auteur

Sub TestSumProp()
Dim oDso As DSOFile.OleDocumentProperties
Set oDso = New DSOFile.OleDocumentProperties
oDso.Open sfilename:="C:\Documents and Settings\Olivier\Mes documents\Word\wdPropertyAppName.docm"
Debug.Print oDso.SummaryProperties.Author
End Sub

5-B. CustomProperties

Il est possible d'obtenir les propriétés personnelles d'un document par l'utilisation de DSO.
Exemple pour obtenir la liste des propriétés personnelles

Sub ListeCustomPropDSO()
'Déclaration des objets
Dim oDSO As DSOFile.OleDocumentProperties
Dim oCustProp As DSOFile.CustomProperty


'Affectation des Objets
Set oDSO = New DSOFile.OleDocumentProperties
oDSO.Open sfilename:="C:\Documents and Settings\Olivier\Mes documents\Word\wdPropertyAppName.docm"

For Each oCustProp In oDSO.CustomProperties
Debug.Print oCustProp.Name & " - " & oCustProp.Value
Next oCustProp
End Sub
Avec DSO, vous pouvez en plus de la lecture des propriétés personnelles, ajouter des propriétés à votre document.

Pour plus de détails sur le DSO et un apprentissage du FSO (File System Object), je vous conseille vivement les deux liens ci-dessous.



6. Remerciements

Je remercie l'équipe de la rédaction de DVP sans laquelle je n'aurais pu écrire cet article.

Toute ma gratitude à :  
SilkyRoad fr L'espace de SilkyRoad
Morgan Billy Espace Perso de Dolphy
RideKick Joris Crozier


Valid XHTML 1.1!Valid CSS!

Copyright © 2008 Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC. Cette page est déposée à la SACD.

Responsables bénévoles de la rubrique MS-Office : Christophe Warin (MVP) et Maxence HUBICHE (MVP) - Contacter par EMail :
Vos questions techniques : forum d'entraide MS-Office - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.