Bloquer cellules d'une liste déroulante par formules

Bonjour,

Dans l'exemple suivant je voudrais pouvoir bloquer mes cellules dans un cas précis :

Si la cellule par liste déroulante est sélectionné sur SYS. La cellule doit être vérouillé et donc empécher l'utilisateur de le Passer en CDTL.

Au contraire si CDTL est sélectionné, permettre la modification de la Liste pour le passer en SYS doit être possible.

Malheureusement sauf erreur de ma part il est impossible en passer par permettre la modification des plages d'incorporer une formule..

Une idée ?

Cordialement

Bonjour,

un essai par macro:

Sub test()
Dim var As Long
For var = 4 To 8
If Cells(var, 2) = "SYS" Then
   Sheets("feuil1").Unprotect
    Cells(var, 2).Select
    Selection.Locked = True
    Selection.FormulaHidden = False

    Else
    Cells(var, 2).Select
    Selection.Locked = False
    End If
Next
Sheets("feuil1").Protect
End Sub

Bonjour,

L'essai est fonctionnel en effet
J'y suis aussi arrivé à l'instant par le résultat suivant :

Private sub worksheet_change(Byval as target as range)

Activesheet.unprotect

If not intersect(target , Range("B4:B8")) is nothing then

Dim CEL as Range

For Each CEL in Cells.Specialcells(xlcelltypeConstants)

If Ucase(CEL.value) = "CDTL" Then CEL.Locked = False

If Ucase(CEL.value) = "SYS" Then CEL.Locked = True

Next CEL

Activesheet.protect

End if

End Sub

La question que je me pose maintenant c'est est ce qu'il est possible de bloquer la selection des cellules "SYS" pour ne pas arriver jusqu'au msg d'erreur d'excel ?

Cordialement

Re,

tu parle de ce message ?

image

Je pensais avoir trouver la solution de mon côté avec le code montré mais apparemment non...

Donc je vais partir du tien, mais il ne verouille pas. Etant une sub, comment est elle appelé dans ton exemple ?

Et oui je parle de ce message. le mieux serait de pouvoir empecher la selection de la liste déroulante lorsque l'on a "SYS" avec le code :

EnableSelection = xlUnlockedCells

mais je n'arrive pas à l'intégrer..

Merci de ton temps :)

exacte c'est la procédure la plus simple, normalement il ne devrait pas y avoir de difficulté:

Sub test()
Dim var As Long
For var = 4 To 8
If Cells(var, 2) = "SYS" Then
   Sheets("feuil1").Unprotect
    Cells(var, 2).Select
    Selection.Locked = True
    Selection.FormulaHidden = False

    Else
    Cells(var, 2).Select
    Selection.Locked = False
    End If
Next
Sheets("feuil1").Protect
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Je passe en manuel pour faire l'appel vu que c'était juste un test, ou par alt+F8

D'accord Merci,

Alors pour l'adaptation j'ai un soucis.

Dans l'idée j'aurais deux petites idées. ce code sert à un outil bien plus gros.

Il faudrait donc le cibler sur une feuil spécifique. je corrige ici pour que tu me dises ou je fais une erreur :

On doit selectionner la feuil avant.

Si je veuyx le passer en private spécifique à une feuil quel est la méthode ?

Aussi j'ai l'impression d'avoir des erreurs au niveau du déblocage avec mdp je dois bien rajouter ci dessous ?

Sub test()
Dim var As Long
For var = 4 To 8
Sheets("feuil1").Unprotect Password:= "Mdp"
If sheets("feuil1").Cells(var, 2) = "SYS" Then
       Cells(var, 2).Select
    Selection.Locked = True
    Selection.FormulaHidden = False

    Else
    Cells(var, 2).Select
    Selection.Locked = False
    End If
Next
Sheets("feuil1").Protect Password:= "Mdp"
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Bon j'ai une erreur sur le

    Else
    Cells(var, 2).Select
    Selection.Locked = False
    End If

elle rentre en conflit lorsque je lance mon outil sur la commande suivante pour une autre tache:

.rows("2:" & max_operation).entirerow.hidden = false

Malheureusement je n'ai pas le droit de distribuer mon fichier type pour raisons de sécurité.

J'ai tenté en passant par un enableevents afin d'empêcher la macro évènementiel lors de cette initialisation mais elle est quand même pris en compte.

la seule solution est de bloquer la macro avec un " ' " pour pouvoir faire l'initialisation.

Donc soit je trouve un moyen d'adapter la macro évènementielle soit je devrais passer par autre chose..

Oui normalement c'est ok pour le mot de passe

Pour le private sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B4:B8")) Is Nothing Then Exit Sub
Dim var As Long
For var = 4 To 8
If Cells(var, 2) = "SYS" Then
   Sheets("feuil1").Unprotect Password:="mdp"
    Cells(var, 2).Select
    Selection.Locked = True
    Selection.FormulaHidden = False

    Else
    Cells(var, 2).Select
    Selection.Locked = False
    End If
Next
Sheets("feuil1").Protect Password:="mdp"
ActiveSheet.EnableSelection = xlUnlockedCells

End Sub

La macro sera appelé lors de chaque changement dans les cellules "B4:B8", je suppose que c'est ce qu'il y a de mieux a faire... après quand tu travail dessus, si il y a beaucoup de données à changer, ça va très vite être problématique, sinon on peut aussi mettre un bouton

Pour l'erreur, dur à dire sans l'avoir sous les yeux, soit mettre un fichier similaire avec des données bidons, sinon il me faudrait au moins l'autre code complet

Essaye déjà de faire un essai en adaptant ce nouveau code, bon courage

Bonjour,

Bon impossible de débloquer le conflit, et comme je l'ai dis ça va être compliqué de transmettre l'outil.

J'ai au final trouvé ma solution sans passer par du vba pour bloquer ma liste déroulante en ne proposant seulement SYS lorsque la cellule est déjà SYS.

Merci tout de même pour le code qui me sera peut être utile à moi ou à d'autres plus tard :)

Bonne journée

Rechercher des sujets similaires à "bloquer liste deroulante formules"