VB - Verrouillages cellules avec case à cocher

angelspeed

XLDnaute Junior
Bonjour,

Je saisis des commandes dans une feuille de calcul. Une commande = 1 ligne.

Quand la commande est validée je souhaite la verrouiller. Pour ce faire, je compte rajouter dans une colonne une case à cocher à l'aide de ce script très pratique (pas de moi :)) :

Code:
Sub CréerCaseàcocher()
Dim Cellule As Range
For Each Cellule In Range("L4:L100")
    With Cellule
    .Select
    ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height).Select
    End With

    With Selection
    .LinkedCell = Cellule.Offset(0, 1).Address
    .Characters.Text = ""
    '.Characters.Text = "Case" & Cellule.Row
    End With

Next Cellule
End Sub

La feuille est protégée puisque je sais que ça pose problème sinon.

Maintenant le problème :je souhaiterais attribuer une macro à chaque case à cocher pour qu'en cochant celle-ci elle verrouille la commande/une plage de cellules.

Pour être plus précis : case à cocher en L4 verrouille/déverrouille les cellules A4 à K4 (celle en L5, A5 à K5, etc ...)

J'ai trouvé ce script pour verrouiller une cellule/plage de cellule avec une checkbox avec un changement de couleur :

Code:
Private Sub CheckBox1_Click()
If Me.CheckBox1.Value = True Then
    With ActiveSheet
        .Unprotect
        .Range("A1").Interior.ColorIndex = 6
        .Range("A1").Locked = True 'Verrouiller la cellule A1
        .Protect AllowFiltering:=True 'protege la feuille
    End With
Else
    With ActiveSheet
       .Unprotect 'Deprotege la feuille
       .Range("A1").Interior.ColorIndex = 2
       .Range("A1").Locked = False 'Déverrouiller la cellule A1
       .Protect AllowFiltering:=True 'Verrouiller la feuille
    End With
End If
End Sub

Le problème c'est comment intégrer ce script dans le premier et implémenter la plage de cellules à verrouiller en fonction de n° de ligne de la checkbox.

La je suis pas assez calé en VB pour voir comment faire.

Merci de votre aide.
 

Dranreb

XLDnaute Barbatruc
Re : VB - Verrouillages cellules avec case à cocher

C'est un peu étonnant, mais je constate aussi. Mettez:
VB:
Me.[L:L].EntireColumn.Hidden = False
au début. Si vous tenez vraiment à ce que ça reste masqué, sauvegardez l'état dans une variable As Boolean et réattribuez le à la fn.
 

Fo_rum

XLDnaute Accro
Re : VB - Verrouillages cellules avec case à cocher

Bonsoir,

peut-être ainsi (une seule macro),
Code:
Dim Pp As Long   'ne pas changer de place, plus grand n° de ligne Terminée
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ll As Long
    If Application.Intersect(Target, Range("A:B")) Is Nothing Then Exit Sub
    ActiveSheet.Unprotect
    Ll = Target.Row
    Range("A" & Ll & ":D" & Ll).Locked = Cells(Ll, "E") = "Terminée"
    Range("A" & Ll & ":D" & Ll).Font.Italic = Cells(Ll, "E") = "Terminée"
    If Ll > Pp Then Pp = Ll  'mise à jour éventuelle
    If Cells(Pp, "A") & Cells(Pp, "A") > 0 Then Application.Goto Cells(Pp, "A"), Scroll:=True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
    ActiveSheet.Protect
End Sub
 

Pièces jointes

  • Verrouillage cellules Si.xls
    35 KB · Affichages: 84

angelspeed

XLDnaute Junior
Re : VB - Verrouillages cellules avec case à cocher

Merci pour vos posts. J'avais trouvé une solution en démasquant/masquant la colonne avec le script de dranreb mais ça "sautait" à l'écran quand j'allais sur la feuille. Pas génial.

Finalement après recherche sur le web j'ai trouvé un solution indiquée par pierrejean sur ce site même qui laisse le code très simple, en utilisant Application.ScreenUpdating :

Code:
Private Sub Worksheet_Activate()
Dim Plg As Range
Application.ScreenUpdating = False
Me.[L:L].EntireColumn.Hidden = False
Set Plg = Me.[L:L].Find(What:="OK", After:=Me.[L1], LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False)
If Not Plg Is Nothing Then ActiveWindow.ScrollRow = Plg.Row
Me.[L:L].EntireColumn.Hidden = True
Application.ScreenUpdating = True
End Sub

Si ya rien à ajouter, je pense que je pourrais clôturé le sujet.

Merci à tous pour votre aide ;)

EDIT : Merci Fo_rum pour ton script. Je le testerais aussi même s'il est plus compliqué :)
 
Dernière édition:

angelspeed

XLDnaute Junior
Re : VB - Verrouillages cellules avec case à cocher

Bonjour,

je peaufine actuellement ma feuille et il y a une dernière chose que je souhaiterais faire en terme d'ergonomie : que la cellule active soit précisée par défaut à l'ouverture de la feuille, à savoir d'après le code précédent :

Ligne = Plg.Row
Colonne = K (11ème colonne)

J'ai trouvé des exemples pour chercher/copier/changer la mise en forme/etc... la cellule active mais par contre rien pour indiquer les coordonnées de la cellule active alors que ce doit être tout simple je pense.

J'ai fait plusieurs tests avec ActiveCell.Address mais rien ne marche.

Quelle serait la commande à mettre dans ce script ?

Merci et bonne journée
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VB - Verrouillages cellules avec case à cocher

Bonjour.
dans la Worksheet_Activate faites Select de la plage en question.
À+

Bonjour Philippe.

Il pourrait y avoir lieu de mettre la WorkSeet_Activate Public pour l'invoquer (exceptionnellement) dans ThisWorkbook. À voir...
 
Dernière édition:

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55