Verouillage cellule sous condition avec macros

Fermé
lazaz - 20 févr. 2015 à 17:03
 lazaz - 26 févr. 2015 à 09:51
Bonjour,

Suite à de l'aide (précieuse) sur ce forum j'ai un fichier de ce type :

http://cjoint.com/?3Bum4dmRv0U

Si en plus de mon fichier je souhaite avoir une condition.
Du type : "si la case B23 est remplie alors rendre innaccessible la case B24", comment faire ??

Merci !!

13 réponses

Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
20 févr. 2015 à 17:10
Bonjour,

Cette condition concerne B23 ou toutes les lignes de la colonne B
0
Juste une case;
Si la personne a rempli la case B23 alors il ne peut pas aussi remplir la B24.
Sachant qu'il se trouve dans le cas où il a déjà choisi l'option A et que donc il n'a que les cellules de la colonne B accessibles.

J'espère etre claire ?
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
20 févr. 2015 à 17:46
Re,

essaye comme cela, code à coller dans les propriétés de ta feuille, mais au départ les cellules doivent être déverrouillées et la feuille protégée

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B23]) Is Nothing Then
ActiveSheet.Unprotect
If Target <> "" Then Target.Offset(1, 0).Locked = True
ActiveSheet.Protect
End If
End Sub
0
Merci Mike.
J'ai essayé mais cela ne semble pas fonctionner.
J'ai ajouté ce que tu m'as dis en fin de page. Je pense que j'oublie qqch mais je ne suis pas au top des macros !
ca me donne ca :
----
Sub OptionA()
With ActiveSheet
.Unprotect Password:="essaiFAA"
.Cells.Locked = True
.Range("B27:B53").Locked = False
.Protect Password:="essaiFAA"
End With
End Sub

Sub OptionB()
With ActiveSheet
.Unprotect Password:="essaiFAA"
.Cells.Locked = True
.Range("D27:D53").Locked = False
.Protect Password:="essaiFAA"
End With
End Sub

Sub OptionC()
With ActiveSheet
.Unprotect Password:="essaiFAA"
.Cells.Locked = True
.Range("F27:F53").Locked = False
.Protect Password:="essaiFAA"
End With
End Sub

Sub test()
Nlig = Range("A" & Rows.Count).End(xlUp).Row - 3
With ActiveSheet
.Unprotect Password:="essaiFAA"
.Cells.Locked = True
.Range("B27:B" & Nlig).Locked = False
.Protect Password:="essaiFAA"
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [E52]) Is Nothing Then
ActiveSheet.Unprotect
If Target <> "" Then Target.Offset(1, 0).Locked = True
ActiveSheet.Protect
End If
End Sub
---

Mais je ne comprends pas bien ce que tu as programmé. En gros si l'utilisateur écrit en E52 il ne peut plus écrire en E53. et s'il écrit en E53 alors il ne peut pas écrire en E52.
De meme pour C52 et C53 et pour G52 et G 53.
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
Modifié par Mike-31 le 25/02/2015 à 10:03
Re,

normal, regarde ton code, la protection comme la déprotection est avec mot de passe

Unprotect Password:="essaiFAA"

mon code est sans
ActiveSheet.Unprotect

ensuite tes codes sont certainement dans un module alors que mon code doit se trouver dans les propriétés de ta feuille

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0

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

Posez votre question
Pour le mot de passe, j'aurais pu y penser ^^
J'ai mis ton code dans la propriété de la feuille (enfin je crois..); mais cela ne semble pas fonctionner non plus.
En fait j'ai l'impression que cela bloque la cellule D52 mais sans lien avec le fait que j'ai rempli ou non la 53.

http://cjoint.com/?EBzlmXaqdQE : ca va peut-être t'aider...
0
Bon j'ai essayé de mettre des boutons à cocher pour contourner le problème mais je n'y arrive pas non plus :(
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 15:46
RE,

encore normal, tu ne peux utiliser qu'une fois la syntaxe Worksheet_Change


il faut donc empiler les actions sous la seule syntaxe Worksheet_Change

explique exactement ce que tu veux faire, si D52 est renseignée on verrouille D53
idem si tu renseignes F52 et F53

as tu d'autres cellules concernées que D52, D53, F52 et F53
0
ça m'a l'air simple quand tu le dis mais je n'y arrive pas du tout.
Ce que je veux :
-si on choisi une motorisation 90 ch on ne peut pas en choisir une 110 ch (la question ne se pose qu'en Niveau 2 ou 3 car en 1). : pbmatique des cases D52 et D53 ou F52 et F53.
- plus tard la question se posera pour par exemple (je dis n'importe quoi pour illustrer selon le fichier que je t transmis) : on ne peut avoir que soit la prise 12V soit le spot de lecture soit la tablette. Donc si on rempli qqch en 44, 45 ou 46 (B, D ou F selon le cas), alors les autres lignes sont verrouillées.
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 16:01
Re,

Remplace tes codes par

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D52:F52")) Is Nothing Then
ActiveSheet.Unprotect Password:="essaiFAA"
If Target <> "" Then Target.Offset(1, 0).Locked = True
ActiveSheet.Protect Password:="essaiFAA"
End If
If Not Intersect(Target, Range("D53:F53")) Is Nothing Then
ActiveSheet.Unprotect Password:="essaiFAA"
If Target <> "" Then Target.Offset(-1, 0).Locked = True
ActiveSheet.Protect Password:="essaiFAA"
End If
End Sub
0
Ca marche merci !

Par contre (oui je t'embete encore un peu!). Si on est en Niveau 3 et que l'on met 1 en F52. On fait entrée.
Finalement on s'est trompé et on veut mettre 0 en F52 mais 1 en F53 alors là ca ne fonctionne pas.
Il ne repart pas du début et reste sur le fait qu'on a bloqué.
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 16:27
Re,
Je pense à une chose, si tu saisis une valeur en D52, D53 se verrouille mais pas D52, c'est ce que tu veux ou on verrouille les deux cellules.

de plus ajoute au code que je t'ai donné une gestion d'erreur
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("D52:F52")) Is Nothing Then
ActiveSheet.Unprotect Password:="essaiFAA"
If Target <> "" Then Target.Offset(1, 0).Locked = True
ActiveSheet.Protect Password:="essaiFAA"
End If
If Not Intersect(Target, Range("D53:F53")) Is Nothing Then
ActiveSheet.Unprotect Password:="essaiFAA"
If Target <> "" Then Target.Offset(-1, 0).Locked = True
ActiveSheet.Protect Password:="essaiFAA"
End If
End Sub

pour accéder sur les cellules D52, D53, F52 ou F53 après qu'elles se soient verrouillées, tu peux ajouter un mot de passe sur ces cellules

onglet Révision/module Modification/Permettre la modification des plages/Nouvelle/clic dans la zone Fait référence aux cellules, sélectionne les cellules D52:D53 et F52:F53
saisir le mot de passe qui permettra la modification et OK

ce qui te permettra de revenir sur ces cellules qui viennent de se verrouiller
0
Pour ta première question oui c'est bien ce que je veux.

je ne evux pas y accéder après qu'elles soient verrouillées. Je veux que si quelqu'un change d'avis il puisse effacer son choix en D52 et que l'on soit à nouveau dns la situation initiale où il peut écrire en D53 OU D52.
Là quand je mets ton code, ca fonctionne parfaitement sauf dans le cas où il a saisi qqch en D52 par ex, puis l'efface et veut écrire en D53 finalement.
Car une fois D52 rempli, cela bloque D53. Et meme s'il efface D52 après, D53 reste verrouillée!
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 16:39
Re,

justement, si tu t'ai trompé entre D52 et D53, il est évident que suivant la cellule renseignée, l'autre s'est verrouillée. Le plus simple est de faire ce que je t'ai dit

onglet Révision/module Modification/Permettre la modification des plages/Nouvelle/clic dans la zone Fait référence aux cellules, sélectionne les cellules D52:D53 et F52:F53
saisir le mot de passe qui permettra la modification et OK

Plus compliqué mais il y aura de toute façon un mot de passe pour déverrouiller ces cellules, sinon a quoi servirait le code précédent
0
ouio mais je ne veux pas que les utilisateurs puissent deverrouiller quoi que ce soit.
0
Bonjour
tu peux faire ce que tu veux mais les macro dans ton module reactive la colonne
et la je ne voie pas
A+
Maurice
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 17:02
Re,

mais il n'est pas question de déprotéger ton fichier ni de donner le mot de passe de protection de ta feuille "essaiFAA"

tu donnes uniquement la possibilité d'intervenir sur ces 4 cellules avec un mot de passe différent de celui de la protection feuille, Excel ne peut pas deviner que tu t'es trompé
0
Ok.
Merci je vais voir ca plus en détail alors !

Merci beaucoup pour ton aide Mike !
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 17:09
Re,

Oui teste avec un mot basique
et tiens moi au courant
0
J'ai étudié la proposition qu'on m'a faite ici en parallèle : https://forums.commentcamarche.net/forum/affich-31620254-verouillage-cellule-sous-condition-avec-macros#p31620804
Et j'arrive un peu mieux à la mettre en place (il me reste quand meme des questions comme tu peux voir en fin du sujet).
Une fois que ce sera résolu je vais voir ce qui me semble le mieux et valider avec mes collègues :)
0
Mike-31 Messages postés 18347 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 25 novembre 2024 5 104
25 févr. 2015 à 18:04
Re,

Pas mal comme procédé, mais avec ce procédé tes cellules ne sont pas inaccessibles, il suffit de cocher une case d'option pour intervenir dans tes cellules autant de fois que tu le souhaites et n'importe qui peut intervenir
0
Re !

Je ne savais pas qu'avec cette technique n'importe qui pouvait y accéder. Mais bon il faut quand même chercher pour contourner non ?
Je n'arrive pas à faire ce que je souhaite comme document, ça m'agace :(
0