Petit code boucle VBA qui ne fonctionne pas

Résolu/Fermé
santadrix - Modifié par santadrix le 28/03/2012 à 14:51
 santadrix - 30 mars 2012 à 16:58
Bonjour,

Pourriez vous m'aider à résoudre ce problème! J'ai un code VBA que j'ai un peu adapté mais il ne veut fonctionner, j'obtiens le code erreur : erreur de compilation sur "Me.controls"

Dim ctl As Control 
  
 'Pour chaque contrôle du formulaire 
For Each ctl In Me.Controls 
  
    ' On verifie que le contrôle soit bien une zone de texte 
    If TypeOf ctl Is textBox Then 
  
            ctl.Locked = True 
  
    End If 
Next ctl 


Je suis sous word 2007. Merci d'avance!

A voir également:

9 réponses

Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
28 mars 2012 à 23:15
Bonjour,
Est-il possible de savoir ou se trouve cette procédure ?
1
Elle se trouve dans Project->Microsoft Word Objets->ThisDocument et elle s'intitule "Private Sub essai(). Je la teste donc il n'y a que ce code.

Et tout ça dans un doc Word 2007.

Est ce cela qu'il te fallait?

Merci pour le coup de main ;)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 mars 2012 à 15:35
Bonjour,

essaie avec :
If TypeOf ctl Is MSForms.TextBox Then

eric
0
Bonjour Eric,


J'ai remplacé "If TypeOf ctl Is textBox Then " par "If TypeOf ctl Is MSForms.TextBox Then "

Il me renvoie toujours à l'erreur "erreur de compilation : Membre de méthode ou de données introuvable" avec ".Controls" de surligné...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 28/03/2012 à 23:57
et en remplaçant Me par le nom réel du formulaire ?
En haut, le pingou a posé une question interessante aussi...

eric
0
rien y fait, par contre petite remarque qui pourrait aider. Dans les exemples de boucles similaire, au niveau de "Me.controls" le "Me" est en bleu comme "Dim" ou "As". Par contre, sur ma macro il reste en noir...A vous de voir si c'est significatif.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 29/03/2012 à 10:19
Il n'est sans doute pas reconnu comme mot clé.
Pour confirmer tu peux l'écrire en minuscule. S'il reste en minuscule c'est sûr qu'il ne le reconnait pas.
Il faudrait compléter le chemin du formulaire pour que vba le retrouve car ta procédure n'est pas dans le code du formulaire.
Je ne connais pas suffisamment vba word pour t'aider plus.
Sur excel ça donnerait :
Sub test() 
    Dim ctl As Control 
    'Pour chaque contrôle du formulaire 
    For Each ctl In UserForm1.Controls 
        ' On verifie que le contrôle soit bien une zone de texte 
        If TypeOf ctl Is MSForms.TextBox Then 
            ctl.Locked = True 
        End If 
    Next ctl 
End Sub


Tu devrais déposer un fichier exemple sur cjoint.com et coller ici le lien fourni, ça permettra de travailler sur du concret

eric

PS : testé sur word 2003, pas d'erreur
0
Alors, après l'avoir écrit en minuscule, les premières lettres reviennent en majuscules.

Concernant ton code il me met erreur "424 objet requis"

Et voici le lien de mon fichier :

http://cjoint.com/?0CDkEk0MKBq
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
29 mars 2012 à 11:32
Bonjour santadrix,
Merci pour les informations.
Eh oui la procédure d'eriiic (salutations) est basée sur l'utilisation d'un formulaire (UserForm) et en ouvrant votre fichier je constate que ce n'est pas le cas.
Pour l'instant je n'ai pas la solution ... !
0

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

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
29 mars 2012 à 12:09
Oui, je pensais à un formulaire qui s'ouvre, pas sur la page.

Déjà une chose de sûr, c'est que tu n'as pas mis les bons type d'objet. Il faut des contrôles activeX (sur 2003 : menu 'affichage / barre d'outils / 'boite à outils controles') si tu veux les contrôler avec vba.
Tu as utilisé les objets de la boite 'Formulaire'...

Je ne connais pas suffisament les objets de vba word pour t'aider plus.
Tu peux te rendre sur le site de m@rina où tu trouveras plein d'infos :
https://www.faqword.com/

Une fois que tu auras dégrossis tu pourras poser une nouvelle question ici, si tu précises bien word vba dans l'objet tu auras sûrement la chance qu'elle intervienne (ou d'autres connaissant le sujet)

eric
0
Et tiens ce ne sont des controls mais des objets...on vient de me le faire remarquer!!! Pardon ;)

Mais bon lorsque je change la macro et que j'utilise "Dim obj As OLEObject", j'ai le message erreur de compilation : Type défini par l'utilisateur non défini"

De nouvelles idées....?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
29 mars 2012 à 17:48
Relis tranquillement mon dernier post...
eric
0
Oui je l'ai bien relu ;), j'avais déjà été sur ce lien.
Apparemment mon problème vient du fait qu'il me faut réaliser des boucles sur des "inlineshapes"...il va falloir que je me renseigne...je vous tiens au courant ou si vous avez des conseils n'hésitez pas!!
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
29 mars 2012 à 21:45
Bonjour santadrix,
C'est très bien, j'espère seulement que mon code va vous servir ...!
Pas trop sympa votre répnse à eriiic.
Salutations.
0
Pardon pour ma réponse vis à vis d'Eric, ce n'était en rien négatif ou ironique ou tout effet de style similaire...je suis un peu pressé par le tps donc j'écris mes messages rapidement sans me relire. Je ferai attention les prochaines fois.
Merci de me l'avoir fait remarquer, toutes mes excuses Eric.
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
29 mars 2012 à 18:11
Bonjour santadrix,
Essayez cette procédure pour voir ..
Sub testlepingou()
Dim mesctl As InlineShape
For Each mesctl In ActiveDocument.InlineShapes
        ' contrôle du passage
        MsgBox ctl.OLEFormat.Object.Name
Next mesctl
End Sub
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
29 mars 2012 à 23:59
Bonjour,
Désolé il faut lire :
MsgBox mesctl.OLEFormat.Object.Name

Salutations
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
30 mars 2012 à 09:58
Bonjour,
Si vous voulez perdre moins de temps, alors utilisez ma procédure qui fonctionne correctement sur votre propre document. Il faut juste insérer la condition de votre choix.
0
Salut,

Oui il marche très bien!Merci

Mais je ne suis pas encore un habitué donc je ne trouve pas la condition, j'étais en train de la chercher.
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
30 mars 2012 à 11:10
Bonjour,
Eh bien, la condition c'est le [If .... Else ... Then] que vous devez introduire à la place de la [Msgbox....]
Salutations.
0
Oui il me manque juste la bonne façon de le dire, je vais chercher et si je rame trop je reviendrait sûrement essayer d'avoir un peu d'aide ;)
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
30 mars 2012 à 14:52
Bonjour,
Dommage, pourquoi ne pas préciser ce que vous voulez dire ?
Salutations.
0
Et bien je cherche la condition :

If le mesctl Is une TextBox then
Mettre le statut "Locked = True"
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
30 mars 2012 à 15:23
Bonjour,
Comme ceci :
If Left(mesctl.OLEFormat.Object.Name, 7) = "TextBox" Then
      mesctl.OLEFormat.Object.Locked = True
End If
0
Et bien monsieur un grand merci!!!

J'avais utilisé le code à ceci près que j'avais comme chiffre "8" au lieu du "7"...j'avais repris ceci d'un exemple. Juste histoire de m'endormir moins con, a quoi correspond le 8 ou le 7??
0
Le Pingou Messages postés 12044 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
Modifié par Le Pingou le 30/03/2012 à 15:50
Bonjour,
La fonction [Left] renvoie une valeur contenant le nombre indiqué de caractères d'une chaîne en partant de la gauche.
Comme la chaine est : TextBox1, les 7 premiers donnent : TextBox
Note : un petit regard sur l'aide (dans le code, sélectionner la fonction et ensuite [F1] et.... !
A une prochaine.
Salutations.
Le Pingou
0
tout s'explique!! Tu as raison pour l'aide mais ce problème a bcp duré et je ne faisais plus l'effort de la rubrique aide. De plus, pour certains cas elle n'est pas efficace mais dans ce cas, oui!

Merci à toi bon Week end!
0