[Déplacé VB6 --> VBA] Probleme de récuperation dynamique de nom sur des signets

Résolu
thiefr Messages postés 3 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 5 mai 2010 - 5 mai 2010 à 11:20
thiefr Messages postés 3 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 5 mai 2010 - 5 mai 2010 à 18:38
Bonjour,

Je suis en train de faire une macro qui est appelée après chaque passage dans une liste déroulante d'un formulaire et qui vérifie si l'on a choisi un certain champ dans la liste déroulante.

Pour accéder au nom du formulaire courant et/ou sa valeur, j'utilise :

ActiveDocument.FormFields(nom du formulaire).Result ( ou .Name )

Le problème est que la macro ne fonctionne du coup que pour un seul formulaire, vu que le nom est écrit en dur.
Sauriez-vous me dire comment récupérer dynamiquement le nom du signet courant qui appelle la macro ?

Merci

5 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 mai 2010 à 17:51
Re,

Voici une methode :

Sub Demo()
Dim MonObjet As FormField, TheType As String
    'pour chaque objet de type FormField de la collection "FormFields"
    For Each MonObjet In ActiveDocument.FormFields
        'si la selection est dans la zone "Range" de mon objet
        If Selection.InRange(MonObjet.Range) = True Then
            'si le nom est vide
            If MonObjet.Name = "" Then
                Select Case MonObjet.Type
                    Case wdFieldFormTextInput
                        TheType = "TextBox"
                    Case wdFieldFormDropDown
                        TheType = "DropDown"
                    Case wdFieldFormCheckBox
                        TheType = "CheckBox"
                End Select
                MsgBox "ce formulaire de type: " & TheType & " n'a pas de nom !"
            Else 'comme tout est ok(le nom n'est pas vide, c'est bon objet) le nom de l'objet est renvoyé ici
                MsgBox MonObjet.Name
            End If
        End If
    Next
End Sub


je n'ai pas trouvé plus simple... mais je ne dit pas qu'il n'y a pas plus simple.

A+
3
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
5 mai 2010 à 11:44
Salut
L'énigme du jour : Sous quel logiciel Office travailles-tu ?
Excel, Word, Access, ... ?

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
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 mai 2010 à 12:25
Salut,

ActiveDocument.FormFields est du VBA word donc cela doit être word

Mais même en sachant cela je n'ai rien compris à la question

Y aurait-il plusieurs formulaire ?

quel rapport y a t'il entre un signet et un formulaire ?

Ta macro est-elle classifiée TOP SECRET !

Une boule de cristal sa coute la peau du Q c'est pour cela que sur CS y en a qu'une et la elle pas dispo car en réparation
Ben ouai elle est vachement mise à contribution ici

A+
0
thiefr Messages postés 3 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 5 mai 2010
5 mai 2010 à 13:04
Je vais essayer d'être plus clair
Il s'agit en effet de Word 2000

Mon document contient des options de champ : liste déroulante.

Donc quand le document est verrouillé et que je clique sur mon champ, j'ai donc mes divers choix. Après ce choix, j'appelle une macro qui vérifie quel champ a été sélectionné. Si un certain champ est appelé je veux qu'un message d'alerte apparaisse dans un MsgBox.

exemple de message : "Dans le formulaire X, votre choix n'est pas valide"

Mon problème est que ce X, je n'arrive pas à le récupérer de façon dynamique pour que la macro fonctionne avec n'importe quel formulaire. En gros je voudrais récupérer le nom du formulaire qui appelle la macro.

Est-ce plus clair ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thiefr Messages postés 3 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 5 mai 2010
5 mai 2010 à 18:38
Effectivement, cela m'aide à récupérer le nom. Merci bigfish_le_vrai tu m'as bien mis sur la piste. J'ai même trouvé plus simple du coup :

Pour récupérer le nom : Selection.FormFields(1).Name

Par contre, pour l'accès à la valeur, je ne peux pas effectuer de test.
Voici le code de la macro :

If Selection.FormFields(1).Range = "(par défaut)" Then
MsgBox "Attention la valeur choisie est incohérente"
End If

Lors de l'exécution j'obtiens le message d'erreur :

Erreur d'exécution '4605' Cette méthode ou propriété n'est pas accessible car l'objet fait référence à une zone protégée d'un document.

Étrange que je puisse accéder au nom du champ mais pas à sa valeur...
0
Rejoignez-nous