Verrouillage conditionnel de cellule

Bonjour à tous,

j'ai une petite problématique de verrouillage conditionnel de cellule.

J'ai en ligne 2 une série de liste déroulantes (B2:G2) pointant sur une plage nommée d'une autre page.

En ligne 3 et 4 des infos à saisir.

Ce que je voudrais faire:

  • que par defaut toutes les cellules de la page soit verrouillées sauf la case B2 pour permettre la première sélection.
  • quand B2 est vide, les cellules B3 et B4 sont verrouillées
  • quand une selection est effective en B2, déverrouiller B3, B4 mais également C2.

- répéter le même processus pour C2

et ainsi de suite jusqu'en F2

Je pense qu'il faut faire cela avec du vba mais je ne vois pas comment aborder le problème...

Ci-joint un exemple de fichier.

Salut,

Voici un code qui te montre comment déverrouiller des cellules en fonction de la modification d'une autre.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target = Range("B2") And Target <> "" Then
    ActiveSheet.Unprotect
    Range("B3:B4 , C2").Locked = False
    ActiveSheet.Protect
End If

End Sub

Il y aurait probablement la possibilité de ne pas passer par ActiveSheet.Unprotect/Protect, mais je n'ai pas trop cherché pour l'instant, ne sachant pas si ma proposition te convient.

Le problème dans ton cas me semble être si tu reviens en arrière. Je m'explique : Tu choisis par exemple un texte en B1 et ça libère les cellules B3, B4 et C2. Mais si tu effaces ta donnée en B1, les cellules restent libérées. On pourrait bien entendu trouver un code qui les verrouillerait à nouveau, mais une fois de plus, je n'ai pas cherché, ne connaissant pas tes besoins.

Amicalement.

Salut

Merci pour ta solution, cela fonctionne mais je dois faire tout les cas de figure...

Pour ce qui est du activesheet.unprotect/protect, je pense que je ne pourrai pas y couper car par défaut mon fichier est verrouillé et protégé pour éviter de faire sauter des calculs.

Il faut maintenant que je vois comment améliorer la chose en cas de retour en arrière comme tu le dis, en effacant les cellules et les verrouillant à nouveau...

Si tu as des suggestions pour cette partie, je suis preneur

Re,

Bon j'ai essayer cela pour remettre à "zero" mais j'ai une erreur '13' (incompatibilité de type):

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("B2") And Target <> "" Then
    ActiveSheet.Unprotect
    Range("B3:B4 , C2").Locked = False
    ActiveSheet.Protect
    Else
     ActiveSheet.Unprotect
    Range("B3:B4 , C2").Locked = True
    Range("B3:B4, C2").Clear
    ActiveSheet.Protect
End If

C'est mon .Clear qui doit poser soucis.

Bonjour à tous,

... Pour ce qui est du activesheet.unprotect/protect, je pense que je ne pourrai pas y couper car par défaut mon fichier est verrouillé et protégé pour éviter de faire sauter des calculs ...

Un exemple ...

Userinterfaceonly
L'option userinterfaceonly:=True permet de modifier par VBA les cellules protégées.

Sub auto_open()
    Sheets(1).Protect Password:="moi", userinterfaceonly:=True
   [A1] = "coucou"
End Sub 

Source : http://boisgontierjacques.free.fr/pages_site/protection.htm

Examine l'option Userinterfaceonly ... placé dans "ThisWorkbook" > " Private Sub Workbook_Open() " ... permet de verrouiller l'accès utilisateurs, mais laisse les codes VBA s'exécuter sans devoir déverrouiller.

Dans la macro Workbook_Open, l'on choisit de verrouiller toutes les feuilles ou celles désirées ... avec ou sans mot de passe.

ric

Bonjour,

J'aurais tendance à placer le clear avant le locked.

ric

@ric

Même combat > incompatibilité de type (idem avec .Clearcontents)

pour l'userinterface only je vais regarder ton lien

Pour le verrouillage j'ai testé cela:

Option Explicit

Private Sub Workbook_Open()
    Application.DisplayAlerts = False
     With ActiveWorkbook
        .Worksheets(1).Protect Contents:=True, UserInterfaceOnly:=True
    End With
    Application.DisplayAlerts = True
End Sub

mais du coup je comprends pas trop l'interet vu que j'ai verrouillé les cellules manuellement et mis un password a mon classeur... Cela permet juste de realiser des fonctions vba sur des feuilles verrouillées et protégées sans à avoir à faire des trucs du genre:

 ActiveSheet.Unprotect
    ' Action a faire
    ActiveSheet.Protect

C'est bien cela ou je n'ai rien compris?

Re,

J'ai fait un essai du type:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Select Case Target.Address

Case "$B$2"
    If Target <> "" Then
    Range("B3").Locked = False
    Range("B4").Locked = False
    Else
    Range("B3").ClearContents
    Range("B3").Locked = True
    Range("B4").ClearContents
    Range("B4").Locked = True
    End If

End Select

End Sub

C'est pas encore cela car la mise à jour ne semble pas fonctionner à chaque fois.... j pense que c'est une histoire de focus ou un truc du genre

Bonjour,

UserInterfaceOnly

En gros, oui, c'est cela.

C'est à effets limités.

Il arrive dans certains cas où il faut quand même déprotéger la/les feuilles.

Dans beaucoup de cas, on élimine des tonnes de Unprotect/Protect.

L'on déprotège manuellement les feuilles et l'on se sert de Workbook_Open pour les protéger de l'usager à l'ouverture du classeur.

ric

oki merci

sinon concernant mon problème de maj de l'affichage j'ai contourné le problème en changeant l'evenement "_selectionchange" en "_Change" et là ça focntionne bien

ric

Encore merci pour votre aide

Rechercher des sujets similaires à "verrouillage conditionnel"