user_mobilelogo

 

S'il n'y a qu'un contrôle ou bien si le modèle ne risque pas d'être modifé, on peut utiliser le numéro d'index du contrôle :

La propriété Item(1) indique qu'on utilise le premier contrôle du modèle. Remplacer le numéro 1 par le numéro souhaité si nécessaire.


Dim controle As ContentControl
Set controle = ActiveDocument.ContentControls.Item(1)

On peut également utiliser le titre du contrôle ou encore mieux, la balise. C'est plus sûr que le numéro d'item. Pour cela, affichez les propriétés du contrôle, et dans la boîte de dialogue, donnez un titre et un nom de balise.

La macro suivante teste tous les contrôles de contenu du document et, si elle trouve le contrôle dont la balise est "mon_tag", elle donne le numéro du type de contrôle. Si vous préférez le titre, remplacez Tag par Title.

Sub test()
Dim controle As ContentControl
For Each controle In ActiveDocument.ContentControls
If controle.Tag = "mon_tag" Then
MsgBox "le contrôle est de type " & controle.Type
End If
Next
End Sub

 

On peut également utiliser le titre et la balise avec les méthodes SelectContentControlsByTitle et SelectContentControlsByTag. Ces deux méthodes renvoient une collection des contrôles de contenu selon leur titre ou leur balise.

Ces deux méthodes sont les seules à ne pas obliger à créer une boucle sur tous les contrôles pour trouver celui qui nous intéresse, puisqu'elles renvoient elles-mêmes la collection.

La macro suivante "test2" affiche une boîte de message qui donne la valeur d'un contrôle de contenu (choix dans un contrôle de liste déroulante, saisie dans contrôle de texte, etc.) pour le premier contrôle de contenu dans le titre est "Mon titre".

Et la macro "test3" vérifie si une case à cocher dont la balise est "case" est cochée. Si oui, un message sera affiché.

Notez que le numéro est le numéro de l'ordre d'entrée du contrôle, et non pas sa place dans le document. Pour utiliser ces méthodes, il est donc conseillé de ne pas multiplier les mêmes noms de titre et/ou de balise, ce qui compliquerait la chose.

Sub test2()
MsgBox ActiveDocument.SelectContentControlsByTitle("Mon titre")(1).Range.Text
End Sub

Sub test3()
If ActiveDocument.SelectContentControlsByTag("case")(1).Checked = True Then
MsgBox "la case est cochée"
End If
End Sub
  

 Sinon, on peut utiliser le numéro d'identification (ID) qui, lui, ne change jamais, quelles que soient les modifs qui seront faites dans le document et quel que soit l'emplacement du contrôle. Pour cela, on lance la macro suivante une fois afin de récupérer le numéro d'ID :

Sub test()
MsgBox ActiveDocument.ContentControls(1).ID
End Sub

 

Muni de ce numéro d'ID, on l'insère dans la macro, à la place des 0000000 de cet exemple.
Par exemple la macro suivante ajoute dans le nom du document la date du jour  :

Sub enregistre()
'macro écrite par m@rina
Dim controle As ContentControl
Dim mondoc, madate
For Each controle In ActiveDocument.ContentControls
If controle.ID = 0000000# Then
nomdoc = controle.Range
End If
Next
madate = Format(Now, "yyyy-MM-")
ActiveDocument.SaveAs FileName:="C:...\" & madate & nomdoc & ".docx"
End Sub


Statistiques

Aujourd'hui2375
Hier3221
Total depuis 200411494289

38
visiteurs actuellement en ligne

18 février 2020