VBA Excel Bloquer écriture cellule, zdTextes [Résolu/Fermé]

Signaler
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
-
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
-
Bonjour,
J'aimerais bloquer l'écriture dans les cellules, zones de textes, ComboBox, etc... lorsque l'on est pas en mode création.
L'utilisateur ne doit pouvoir interagir que avec les boutons, les ComboBox (mais pas l'écriture), les liens hypertextes, etc...
Merci d'avance pour votre aide.
Salutations



22 réponses

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Protéger ta feuille et laisser l'accès au Combo..
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True



Pour exécuter une macro sur une feuille protégée il faut d'abord la déprotéger en entrée de macro et la reprotéger en sortie.

Sub MyMacro()
    ActiveSheet.Unprotect

'... Le code de la macro
'.......................
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
End Sub

5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
256
Bien,
Moi je trouves que tu es patient, je dirai qu'hier tu étais plus pris, tes codes sont toujours très clairs et précis on ne peut que féliciter l'Artiste.
Bonne journée.
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
256
Tu dis

J'aimerais bloquer l'écriture dans les cellules, zones de textes, ComboBox, etc... lorsque l'on est pas en mode création.

donc c'est avec les mméthodes .Protect et .unprotect
sub test()
Sheets("feuil1").Protect MotDePasse = "toto"
Sheets("feuil1").Unprotect MotDePasse = "toto"
end sub

et pour les textbox, combobox ...etc il faut utiliser la propriété textbox1.enable=true
ou
textbox1.enable=false


L'utilisateur ne doit pouvoir interagir que avec les boutons, les ComboBox (mais pas l'écriture), les liens hypertextes, etc...

Ce qui signifie qu'il faut que tu autorises le programme à le faire
c'est donc à toi de gérer tout ça.

Voici comment tu peux simplifier les choses.

1) quelles sont les feuilles que tu dois vérouiller?
réponse : Feuille 1,2,3,4
action faire une sub qui vérouillera les dîtes feuilles et une autre qui les déverouillera.

pour les combobox, textbox....
tu en fais une autre
comme ça!
sub rendInactif()
Userform1.combobox1.enable=False
Userform1.textbox1.enable=false
End sub

mais je crois que c'est à toi d'en faire un peu
A+
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Bonjour Bidouilleu_R
Merci d'avoir préciser ce que je n'ai pas eu la patience de faire.
A+
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
merci
j'avais déjà essayé de nommer la feuille! Je ne suis si désespérant que ça finalement ^^
J'ai également essayé Sheets("Feuil2").select avant mais rien n'y fait.
Abandon un peu trop rapide à mon goût.
Merci quand même!!
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Bonjour,
Pour les feuilles voir Protect / UnProtect
Pour les contrôles voir Enabled.True/false
A+
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
Merci de me consacrer un peu de votre temps.
J'ai déjà fait tout ça mais comme je l'ai préciser plus haut, lorsque que je protège les feuilles, je ne peux plus utiliser mes Listes déroulantes.
Et je ne veux pas protéger par mot de passe mais juste empêcher les modifications (écriture dans les cellules).
Merci bonne soirée
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
J'ai essayé le "ActiveSheet.Unprotect" mais les macro ne peuvent quand même pas s'exécuter ... à cause de la protection!

Pour ce qui est de "ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True", mes listes déroulantes ne se remplissent pas avec ce code.

Bonne soirée
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Là... tu commence à me désespérer... si la feuille active n'est pas la feuille protégée tu dois NOMMER le feuille.
Sub MyMacro()
Sheets("MachinChouette").Unprotect

'... Le code de la macro
'.......................
Sheets("MachinChouette").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
End Sub
Et essaye quand même de faire Un tout petit peu faire fonctionner tes neurones.
A++
Abandon du suivi.
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
256
Si je puis me permettre..... :- ) < Merci>

Le problème vient sans doute que tu as protégé toute la feuille.

il faut laissé certaines cellules dévérouillées ( celles que tu veux modifier)
Tu fais un click droit /format de cellule/onglet protection.

Le code que te donne lermite222 est correct et explicite mais il ne donneras pas un bon résultat si tu as tout vérouillé ( genre crise de paranoïa aigue).

si tu veux en savoir plus sur la protection.... voici un lien (les bases en fait)
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-21
bonne journée
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
bonjour,
Je viens d'essayer certaines formules se trouvant que la page que vous m'avez fait parvenir.
Le problème est que quand je déverrouille une cellule, la macro peu écrire dedans (ça c'est bien), mais l'utilisateur peu écrire dedans également (beaucoup moins bien).
J'ai essayé le code pour protèger la feuille et autoriser toutes les modifications effectuées par macro.
"Worksheets("Feuil1").Protect UserInterfaceOnly:=True"
Je ne vois pas la différence avec une protection normale, mes macro ne peuvent quand même pas modifier mes cellules verrouillées.
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
256
"Worksheets("Feuil1").Protect UserInterfaceOnly:=True"
Je ne vois pas la différence avec une protection normale, mes macro ne peuvent quand même pas modifier mes cellules verrouillées.



Ce qui signifie que tu n'as pas compris comment cela fonctionne.
C'est comme si tu nous racontais que tu as fermé ton garage à clef mais que tu peux toujours rentrer dans la maison.

Il te faut un cours de base et peut-être un peu moins de paranoïa.
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
256
Je ne vois pas la différence avec une protection normale, mes macro ne peuvent quand même pas modifier mes cellules verrouillées.

Cette phrase montre que tu n'as pas compris.
le principe est le suivant.

je protège certaines cellules ( elles le sont toutes par défaut si tu vérouilles tu peux plus rien faire)
je lance le module vba qui va :
- 1 déprotéger la feuille, les contrôles etx.. ( parce que sinon ton programme ne pourra pas fonctionner)
- 2 il va executer certaines choses, lire, écrire,...
- 3 en fin de travail ( retour sur la feuille / déchargement du userform) tu vérouilles à nouveau ( rétablissement de la protection).

A mon sens tu confonds beaucoup de choses. il faudra se réserver du temps pour la lecture et quelques petits test.

Personnellement Je trouve la phrase "Abandon un peu trop rapide à mon goût." agaçante,répétitive,déplacée,inapropriée.
Il est évident que tu ne sais pas à qui tu parles. Alors soit sage.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Bon, je vais un peu déroger à mon premier avis...
Voir ce classeur
A+
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
Bonjour,
Merci pour ton classeur lermite222.
Je vais faire en sorte que le mien fonctionne aussi bien.
Cependant je voudrais ne pas pouvoir modifier les données de la liste déroulante.
Comment est-ce possible?

Bidouilleu_R
Lorsque j'ai dit "abandon un peu trop rapide à mon goût", il n'y avait rien méchant là dedans. J'ai juste trouvé la réaction de Lermite un peu trop radicale, voilà tout (il est vrai que je ne l'avait pas informé de tout ce que j'avais essayé, je comprend donc qu'il ai pu croire que je n'avais pas cherché). Je pense qu'il faut toujours dire ce que l'on pense lorsqu'il y a désaccord. Et sache que je sais que Lermite222 est d'une grande aide à beaucoup de monde sur ce forum, qu'il m'a beaucoup aidé, et que je lui en suis extrêmement reconnaissant.
Maintenant, si par ce que j'ai dit, j'ai blessé, énervé ou agacé quelqu'un, je m'en excuse. Mais on ne peut pas se permettre d'être susceptible sur un forum car on ne peut jamais savoir quel est le ton de la phrase.

En tout cas merci à vous deux de m'avoir apporté votre aide jusqu'à présent.
Bonne soirée
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
C'est pas possible de modifier le combo, si tu veux reprendre une sélection d'un combo sur lequel ont aurait éventuellement changer la partie texte de la fenêtre visible, emploi ComboBox1.list(ComboBox1.listIndex) à la place de ComboBox1.text
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
Excuse moi je ne comprend pas ce que tu dit.
Je ne veut pas modifier le Combo. Au contraire, je veut ne pas pouvoir le faire.
Lorsque je clique dans la fenêtre de la liste déroulante, je peux effacer le texte s'y trouvant... et je ne veux pas!
Peut on le verrouiller?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Avec le ComboBox ce n'est pas possible d'interdire la modification du texte bien qu'il est possible que les données ne puissent êtres modifiées.
Pour faire ce que tu veux il faut tricher un peu, (plus qu'un peu).. en employant un TextBox, un bouton et une listeBox.
Voir exemple 2
A+
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
D'accord merci je pense que je vais laisser comme ça.
Par contre, même en verrouillant ma feuille (tel que vous l'avez fait dans le premier classeur), je peux toujours écrire dans ma TexteBox.
J'ai essayer les commande Enabled et ReadOnly mais l'une me grise le texte (Enabled) et je n'arrive pas à mettre en place l'autre.
J'ai vu que vous n'aviez fait ni l'un ni l'autre.
Le remplissage de ma TextBox est commandé par l'appui sur un bouton, je n'ai donc pas dans mon code la procédure de cette TextBox (Private Sub TextBox1_Change()...etc)
Cela peut il poser problème pour la verrouiller?
Bonne soirée
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Évidemment... faut mettre le code qui va avec, pour le voir clic droit sur le nom de l'onglet >> Visualiser le code.

Poste ton classeur sur CiJoint.fr, j'adapterais pour que ça fonctionne.

Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
Bonjour,
Je ne vous envoies pas le lien de mon classeur car trop imposant, pas toujours très clair dans la macro et surtout fait appel à des fichier extérieurs.
Je vous envoies donc un classeur sur lequel un Bouton fait apparaître du texte dans une TextBox. Je voudrais que le texte ne sois pas modifiable mais n'apparaisse pas en gris flouté.
http://www.cijoint.fr/cjlink.php?file=cj201102/cijRxzdTDT.xlsm

Merci d'avance.
Bonne soirée
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Pourquoi utiliser une zone de texte si ce n'est pas pour saisir du texte...
Remplace ton Texte par une étiquette et le tour est jouer.
A+
Messages postés
437
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
4 avril 2020
69
Bonjour,
J'ai en faite simplifié au maximum et je n'ai pas été assez explicite dsl.
En réalité, on vient choisir un terme dans un ComboBox, ce qui va chercher un texte dans une feuille Word et vient le mettre dans la TextBox.
Voila Merci à toi.
Bonne journée

PS : C'est quoi une étiquette ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 137
Autrement dit, c'est un Label, il est comme un TextBox mais ont ne peu écrire dedans que par le code.
Pour avoir une étiquette.
Ruban Développeur >> Insérer >> Dans les contrôles ActiveX l'icône avec A
A+