Messagebox et verrouillage

piripiri

XLDnaute Nouveau
Bonjour le forum,
Pouvez-vous m'aider svp. Jaimerai que quand je choisis "Closed" dans la cellule C1, les contenus des cellules D1:F1 s'effacent et meme temps, les cellules A1 et B1 soient vérrouillés. Et si je chisis "Open", les cellules A1 et B1 ne sont plus vérrouillées. Ainsi de suite pour chaque ligne. J'ai réussi à faire effacer les cellules D:F, mais je ne sais pas comment faire verrouiller les cellules A et B. Merci d'avance pour votre aide.
Cordialement,
 

Pièces jointes

  • messagebox et verrouillage.xlsm
    14.1 KB · Affichages: 6

piripiri

XLDnaute Nouveau
Merci Roblochon,
J'ai essayé mais je n'y arrive pas, j'ai essayé le code ci-dessous. En fait, je commence juste à utiliser vba. ou bien est-ce que je dois le mettre dans le boucle If Range("C" & i) = "Closed" Then
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rep As Integer, i
i = ActiveCell.Row
    Application.EnableEvents = False
        If Range("C" & i) = "Closed" Then
            Rep = MsgBox("Are you sure?", vbYesNo + vbQuestion, "Test")
                If Rep = vbYes Then
                    Range("D" & i & ":F" & i & "") = ""
                End If
            End If
    Application.EnableEvents = True
End Sub


Private Sub Change(ByVal Target As Range)
Set Target = Intersect(Target, [A:B], UsedRange)
If Target Is Nothing Then Exit Sub
For Each Target In Intersect(Target.EntireRow, [C:C]) 'si entrées multiples (copier-coller)
    If UCase(Target) = "Closed" Then
        Application.EnableEvents = False 'désactive les évènements
        Application.Undo 'annule l'entrée
        Application.EnableEvents = True 'réactive les évènements
        Target.Select
        Exit For
    End If
Next
End Sub
 

Pièces jointes

  • messagebox et verrouillage.xlsm
    14.8 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Re bonjour,

Tout d'abord if faut préciser ce que vous désirez exactement lorsque vous dites: les cellules A1 et B1 soient vérrouillés.
Pour verrouiller une cellule il suffit de mettre sa propriété Locked à True, exemple:
Range("A" & i & ":B" & i ).Locked = true.

Mais pour que cela soit efficace (qu'on ne puisse pas la modifier) il faut protéger la feuille et voir les options de protection que vous désirez, avec mot de passe ou non.
Donc dans votre macro il vous faut penser aux moments où vous devez protéger ou déprotéger votre feuille.

A vous relire

.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Après avoir déverrouiller les cellules de la colonne c du tableau, premier essai:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    i = ActiveCell.Row
    ' Si pas en colonne 3 (C) sortir
   
    If Target.Column > 3 Then Exit Sub
    Application.EnableEvents = False
    Me.Unprotect
    If Range("C" & i) = "Closed" Then
         If MsgBox("Are you sure?", vbYesNo + vbQuestion, "Test") = vbYes Then
            Range("D" & i & ":F" & i & "") = Empty
            Range("A" & i & ":B" & i).Locked = True
         Else
            Range("C" & i) = "Open" 'Rétablir l'état Open de la ligne
         End If
    Else
        Range("A" & i & ":B" & i).Locked = False
    End If
    Me.Protect
    Application.EnableEvents = True
End Sub

Cordialement
 

piripiri

XLDnaute Nouveau
Rebonjour,
Ca marche seulement pour une fois, mais je choisis "Closed" pour une autre ligne, un message d'erreure s'affiche disant que la feuille est protégée. En fait, je ne veux pas protéger la feuille mais seulement verrouiller les cellules A et B, ou bien est-ce que ce n'est pas possible?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Il faut lire la TOTALITE des réponses. Avant la macro je vous disais : Après avoir déverrouiller les cellules de la colonne c du tableau.

Sélectionner TOUTES les cellules de votre tableau et/ou autre zones de la feuille qui ne doivent pas être protégées, click-droit, format de cellule, onglet 'Protection' décochez la case 'Vérrouillée'.

Et ré-essayez.

Pour répondre à votre question, c'est ce que j'essayais également de vous faire préciser, QU'EST-CE QUE VOUS VOULEZ exactement.
Vérrouiller des cellules sans protection de la feuille, cela ne sert à rien. Ou alors il faut vous dirigez vers une solution comme celle de la conversation dont je vous ai communiqué le lien et essayer de la comprendre et l'adapter à votre besoin.

Voyez ce qui est différent dans les deux solutions. Celle d'un verrouillage pur et simple avec protection et celle d'une annulation de modification.

Bons tests
 

piripiri

XLDnaute Nouveau
Re,
J'ai réussi après tant d'essai, merci pour tout.
cordialement,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 3 And UCase(Target.Text) = "CLOSED" Then
    Range("D" & Target.Row, "F" & Target.Row).ClearContents
 End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Select Case Target.Column
  Case 1 To 2
    If UCase(Range("C" & Target.Row).Text) = "CLOSED" Then
      Target.Offset(0, 1).Select
    End If
  End Select
End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Bravo et Merci pour ce partage de solution. Avec excel une même situation peut avoir plusieurs réponses et manières de faire. Suffit de faire une bonne analyse fonctionnelle et faire des choix. Ce que vous avait fait. Re bravo.

Cordialement
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma