Bloquer écriture dans TextBox (pbl Enabled, Locked...)

vbadudule - 19 avril 2013 à 14:43
 vbadudule - 24 avril 2013 à 10:52
Bonjour,
En train de faire passer un logiciel d'Excel 2000 sous la version 2010 sur un code que je n'ai pas écrit, je rencontre un problème: j'ai de nombreuses TextBox sur l'écran mais et j'ai beau passer ce que je trouve sur les forums (c'est-à-dire les propriétés Enabled et/ou Locked), lorsque je charge un projet sous le logiciel, je peux quand même modifier les données.
Je précise que:
> Je ne suis pas un professionnel de VBA
> Lorsqu'on change ce qu'il y a écrit dans la TextBox, le texte à l'écran change (ce que je veux rendre impossible) mais les tableaux de valeurs du code ne sont pas modifiés
> Je n'arrive pas à passer la propriété Enabled bien que j'ai le mode d'emploi (j'ai un message d'erreur)
> J'ai un problème peut-être similaire avec les shapes : j'ai des shapes formées de plusieurs shapes que je traite d'une certaine manière puis que je groupe. Cependant, en cliquant droit sur l'image finale, on peut modifier indépendamment les "sous"-shapes !

Merci d'avance pour votre aide.

Le code: (simplement on crée une TextBox à laquelle on donne un nom et d'autres propriétés puis on veut la bloquer)

Public Sub CreerNomTxtBox()
Set NomTxtBox = Feuil_Schema.Shapes.AddTextbox(msoTextOrientationHorizontal, Eq_Image.Left, Eq_Image.Top + Eq_Image.Height, 0, 0)
With NomTxtBox
.Fill.Visible = msoFalse
.Fill.ForeColor.RGB = RGB(255, 140, 120) 'sera visible, après calculs, si l'équipement a été à l'origine d'errreur
.Line.Visible = msoFalse

With .TextFrame
.AutoSize = True
.MarginTop 0: NomTxtBox.TextFrame.MarginBottom 0
.MarginLeft 0: NomTxtBox.TextFrame.MarginRight 0
.Characters.Font.Size = 10 '8
.Characters.Font.FontStyle = "Arial" 'test nfa
.Characters.Text = Glob_Index & "- " & Eq_Nom

End With
.name = "TxBx" & Mid(Eq_Image.name, 5) 'prend le meme nom que l'image, en remplaçant "Im_D" par "TxBx"
.OnAction = "'Dialog_Ouvre_Toi" & Chr(34) & NomTxtBox.name & "'"

'.ControlFormat.LockedText = True
'.Enabled = False
'.Locked = True
End With

End Sub

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 avril 2013 à 14:50
Bonjour,
Je précise que:
> Je ne suis pas un professionnel de VBA

Moi non plus .
Ce qui nous importe ici, c'est de savoir :
- si tu es ou non, tout simplement, développeur sous VBA. Ce forum est un forum de développeurs, professionnels ou non, mais développeurs.
- il se trouve que tu n'as pas là affaire à une textbox.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Je suis en stage de 6 mois sur un logiciel codé en VBA.
Dans un premier temps je dois faire passer le logiciel sous Excel 2010 (en ce moment), puis juste après augmenter les fonctionnalités.
En conclusion, mon poste de stagiaire est bien de développer ce logiciel et donc le code. Peut-on dire que je suis un développeur?

En espérant avoir un réponse ;)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 avril 2013 à 15:17
Ces 2 propriétés passent correctement
'.ControlFormat.LockedText = True
'.Locked = True

Par contre, ça demeure des textbox (shapes) sur une feuille.
Si on se met en mode Création, on peut facilement modifier le texte...

Peut-être pourrais-tu simplement protéger la feuille ?

Bien sûr, il te faut déprotéger la feuille avant de rouler la macro, donc, au début
Activesheet.UnProtect "Mot de passe"

et à la fin de la procédure,
Activesheet. Protect "Mot de passe"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Bonjour!
Tout d'abord merci de la réponse!

En fait, le logiciel est à destination d'utilisateurs qui ne doivent pas, lorsqu'ils l'utilisent, pouvoir modifier les données des textbox (shapes). Je ne peux donc pas leur demander de rentrer un mot de passe par exemple lorsqu'on ouvre le logiciel...

J'ai essayé de protéger la feuille manuellement, en bloquant l'écriture dans la textbox, mais rien n'y fait: si je fais clic droit puis clic gauche sur cette textbox, je peux changer le texte à l'intérieur.
D'après quelques forums que j'ai parcouru (notamment avec ton lien (merci =) ), cela vient du mode création d'Excel. Seulement, tous ont l'air de dire que ce n'est pas possible de le désactiver.

Mon but est d'empêcher l'écriture dans les textbox sur l'écran, j'ai pensé mettre un rectangle transparent mais ça comporte de nombreux désavantages...

Une idée?

Merci !
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 avril 2013 à 17:49
Qu'est-ce que les utilisateurs ont à écrire/modifier dans cette feuille ?
Est-ce que ça ne pourrait pas provenir d'un Userform, disons ?


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Bonjour!
L'application est composée de nombreux équipements (shapes) chacun lié à une boîte de dialogue.
Quand on a créé un système complet et remplit chaque boîte de dialogue (userforms) avec les données nécessaire à faire un calcul.
Quand le calcul est lancé puis terminé, il affiche les résultats dans des TextBox sur le schémas.
Je voudrais que ces résultats soient non modifiables par l'utilisateur (logique ^^). L'utilisateur remplit uniquement les boîtes de dialogue.

Par exemple j'ai rajouté pour un équipement spécifique :
Private Sub Chk_AffichNom_Click()
'pour afficher/masquer le nom de l'équipement sur le schéma
Liste_Equipements.item(IndexEq).NomTxtBox.Visible = Chk_AffichNom.value
[u]Liste_Equipements.item(IndexEq).NomTxtBox.ControlFormat.LockedText = True
Liste_Equipements.item(IndexEq).Locked = True/u
End Sub
(les deux lignes doivent d'ailleurs être une redite)

Et ça ne fonctionne toujours pas.. Si je fais clic droit puis clic gauche, je peux toujours remplacer le texte ou les valeurs..
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
23 avril 2013 à 11:46
Il ne te reste, a mon avis, qu'à mettre une protection sur la feuille.
Lorsque tu débutes la macro reliée à un bouton, tu enlèves la rpotection, puis la remets à la fin de la procédure.

Ça demeurera transparent pour l'utilisateur, mais il ne pourra pas modifier quoique ce soit.


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Merci du conseil, je vais essayer en espérant que ça fonctionne !

VBAdudule
0
Rejoignez-nous