MSWord Automatisation de macro sur un champ

g0belin Messages postés 155 Date d'inscription jeudi 6 décembre 2001 Statut Membre Dernière intervention 19 avril 2010 - 19 avril 2010 à 09:49
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 19 avril 2010 à 12:44
Bonjour,
Merci déjà à ceux qui me liront et essayeront de m'aider.

Mon problème est le suivant, je souhaiterai remplacer des caractères spéciaux dans les champs d'un formulaire.
J'ai commencé à me renseigner et j'ai trouvé comment remplacer les caractères mais je suis bloqué à plusieurs autre endroit :

(1) J'ai trouvé qu'il est possible d'exécuter une macro à la sortie d'un champs text. Mais j'aimerai savoir comment récupérer le champs texte dans le quel j'étais afin d'automatiser la procedure pour tous les champs avec une unique macro.
Actuellement je fais comme cela :
ActiveDocument.Bookmarks("champs1").Range.Text = chaine
Mais cela me permet uniquement de récupérer la valeur d'un champs en particulier (champs1). Est il possible de faire quelque chose de ce style :
ActiveDocument.ActiveBookmarks.Range.Text = chaine

(2) Une fois que j'ai reussi à editer ma chaine de caractère je souhaiterai effectuer le changement à la sortie du champs avec quelque chose de ce style :

[i]Dim chaine
chaine = ActiveDocument.Bookmarks("champs1").Range.Text
chaine = Replace(chaine, "û", "u")
ActiveDocument.Bookmarks("champs1").Range.Text = chaine/i

Mais quand je teste, le debuggeur m'averti que ce n'est pas possible car le formulaire est protégé, est il possible d'éditer la valeur entrée par l'utilisateur ?

Merci d'avance,
Salutation

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 avril 2010 à 10:52
Salut
(1) Le seul moyen d'uniformiser la macro pour n'importe quel signet, c'est de fournir le not ou l'index de ce signet, genre :
Sub maMacro(ByRef monSignet As Bookmark)
et d'utiliser monSignet comme objet sur lequel travailler.
Cela sous-entend bien sûr que, au moment de lancer la macro, tu connaisses l'identité du signet et de lancer la mcro sous cette forme :
Call maMacro("Champ1")

Pour info, pour lister tous les signets d'un document :
    Dim xxx As Bookmark
    For Each xxx In ActiveDocument.Bookmarks
        Debug.Print xxx.Range.BookmarkID, xxx.Name, xxx.Range.Text
    Next

(2) Non, un document protégé est ... protégé.
Il te faut lever la protection pour pouvoir le modifier.
Extrait de l'aide :
    If ActiveDocument.ProtectionType <> wdNoProtection Then
        ActiveDocument.Unprotect Password:=strPassword
    End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
g0belin Messages postés 155 Date d'inscription jeudi 6 décembre 2001 Statut Membre Dernière intervention 19 avril 2010
19 avril 2010 à 11:09
Hello jack merci pour ta réponse rapide, j'aurai besoin d'un petit complément. Dans mon champs "TextFormField" j'ai la possibilité d'appeler une macro à l'entrée et à la sortie du formulaire. Mais est-il possible d'appeler une macro avec des arguments tel que tu l'as décrit précédemment ?

Par exemple [mrprpopre(ActiveField)].

Car les options du champs ont l'air de me proposer que des macros sans arguments. Ce qui est ennuyant.

Merci d'avance.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 avril 2010 à 12:44
Pas tout compris à ce que représente TextFormField et tes entrées/sorties de formulaire.

Si tu dois créer une macro avec paramètre, c'est à toi de l'écrire/modifier, comme montré dans ma première réponse.

Si tu dois appeler une macro avec paramètre, fais comme je te l'ai montré dans ma première réponse.
0
Rejoignez-nous