Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
bonjour,
il faut protéger la feuille et verrouiller la cellule :
pour la feuille : ActiveSheet.protect (et unprotect pour déprotéger) et mot de passe éventuellement
pour la cellule :
Cells(1, 1).Locked = True
Cells(1, 1).Locked = False
bye
A juste titre, Dixit t'a donné la principale manière d'empêcher une saisie dans une cellule. En protégeant ta feuille, tu es tranquille, l'accès sera refusé.
Toutefois, il est parfois embêtant d'avoir à protéger et déprotéger une feuille surtout si des macros viennent ensuite travailler dans la feuille protégée.
Donc, je te propose un petit code VBA, qui empêche la modification de la cellule C2 sans que la feuille ne soit protégée (cf. fichier joint).
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Immuable As Variant
Dim PasTouche As Range
Set PasTouche = Cells(2, 3)
Immuable = PasTouche.Value
If Not Application.Intersect(Target, PasTouche) Is Nothing Then: PasTouche.Value = Immuable: Cells(1, 1).Select
Set PasTouche = Nothing
End Sub
Le principe :
- la valeur de la cellule C2 (PasTouche) est mémorisée dans la variable Immuable
- à chaque fois que l'utilisateur clique dans la cellule C2, la cellule C2 conserve la valeur mémorisée et l'utilisateur se trouve renvoyé en A1 (cells(1,1))
- l'utilisateur peut écrire dans n'importe quelle autre cellule de la feuille
C'est une macro juste pour le fun, dans 99,99% des cas, il vaut mieux utiliser la protection.
@Kotok
petite erreur qui c'est glissée, utiliser l'événement "Change" plutôt que l'événement "selectionchange", 🙂 Agacant cet événement par défaut...Bravo et merci pour cette astuce.
Bonjour Pierrot, comment vas-tu?
Je suis ravi de te croiser sur ce fil.
Je ne suis pas certain que Worksheet_SelectionChange soit une erreur par rapport à Worksheet_Change
dans le 1er cas, la macro est lancée à chaque nouvelle sélection de cellule
dans le 2nd cas, elle est lancée à chaque changement de valeur dans une cellule
Je préfère utiliser Worksheet_SelectionChange plutôt que Worksheet_Change quand j'ai des macros qui modifient de nombreuses cellules. J'évite ainsi de lancer la macro à chaque changement de valeur.
Mais ca se discute, et peut être qu'il existe des raisons que j'ignore pour préférer Worksheet_Change.
Je suis tout ouïe ! 😉
Vu le nombre de macros que j'ai pris (avec ton accord) sur ton blog, c'est bien la moindre des choses que tu mettes celle-çi dans ta besace.
Si j'avais sû, je l'aurais même enveloppée et j'aurais ajouté un joli noeud au paquet-cadeau ! 😉
Quand à l'utilisation de Application.EnableEvents = False, c'est vrai que ça règle de nombreux problèmes (à condition de ne pas oublier de le remettre à True)
Toutefois, un petit moyen de la contourner :
en sélectionnant un ensemble de cellule dont l'adresse (0,0) est plus "haut" que C2 (dans l'exemple de mon fichier). On peut ainsi modifier la valeur C2.
bien vu kotov, alors comme ceci avec une boucle sur target....🙂
Code:
Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim c As Range
For Each c In Target
If c.Address(0, 0) = "C2" Then Range("A1").Select
Next c
End Sub
Avec ta boucle sur Target, on élimine des éventualités pour modifier la cellule C2 mais il reste des trous dans le filet ! : Le Drag and Drop et l'Autofill qui permettent quand même d'effacer la cellule C2 (et c'est pareil dans ma macro)
Donc il faut les désactiver (et ne pas oublier de les réactiver à la fermeture du classeur) : Application.CellDragAndDrop = False
Bon, j'arrête la dessus, sinon je vais passer la nuit à tester les moyens de contourner.
Bonsoir le forum
Une autre solution sans Macro pour empecher l'écriture dans 1 cellule ou une plage de cellules.
1- Sélectionner la ou les cellules
2- Données
3- Validation
4- Liste déroulante choisir : personnaliser
5- dans formule mettre: ""
OK
Merci pour vos réactions.
Je me rend bien compte qu'il n'existe pas UNE fonction permettant de jouer avec l'autorisation ou non d'écrire dans une cellule...
Toutes vos petites remarques sont bien pertinententes.
Aussi, comme j'ai besoin d'utiliser cela en fonction du statut d'une checkbox, je resterai sur la solution de Kotov.
Bonjour
je trouve plein de choses intéressante sur ce site .
Je ne sais pas si j 'aurais une réponse après 6 ans mais j'essaye.
J'ai utilisé les codes ci dessous en utilisant vos propositions pour empêcher les écritures dans les cellules de la ligne 2 conditionné à des dates dans la ligne 3 , (en A2 j'ai la date du jour) interdiction d'écriture une fois la date du jour passée :
Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim c As Range
For Each c In Target
If Range("c3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "C2" Then Range("A1").Select
If Range("d3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "D2" Then Range("A1").Select
If Range("e3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "E2" Then Range("A1").Select
If Range("f3") > Range("a2") Then Exit Sub
If c.Address(0, 0) = "F2" Then Range("A1").Select
'.......
Next c
End Sub
Çà fonctionne mais comment faire pour avoir un code moins ' bricolé' et plus pro !
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD