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

thiefr 3 Messages postés mercredi 5 mai 2010Date d'inscription 5 mai 2010 Dernière intervention - 5 mai 2010 à 11:20 - Dernière réponse : thiefr 3 Messages postés mercredi 5 mai 2010Date d'inscription 5 mai 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 5 mai 2010 à 17:51
3
Merci
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+

Merci bigfish_le vrai 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 5 mai 2010 à 11:44
0
Merci
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)
Commenter la réponse de cs_Jack
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 5 mai 2010 à 12:25
0
Merci
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+
Commenter la réponse de bigfish_le vrai
thiefr 3 Messages postés mercredi 5 mai 2010Date d'inscription 5 mai 2010 Dernière intervention - 5 mai 2010 à 13:04
0
Merci
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 ?
Commenter la réponse de thiefr
thiefr 3 Messages postés mercredi 5 mai 2010Date d'inscription 5 mai 2010 Dernière intervention - 5 mai 2010 à 18:38
0
Merci
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...
Commenter la réponse de thiefr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.