Macro dans une feuille protégée

Bonjour,

Je souhaiterais savoir si il y a une macro qui permet d'autoriser la suppression de ligne malgré la protection de la Feuille
Je m'explique: j'ai une feuille de saisie (un tableau) ou certaines colonnes sont protégées (celles ou il y a des formules). je souhaiterais néanmoins autoriser la suppression de ligne si nécessaire.

je veux que ma feuille se dévérouile seulement quand une ligne entière est selectionner. Autrement je veux qu'elle reste verrouiller et je souhaiterais que pouvoir activer cette macro seulement dans le cas ou la ligne entière est selectionné, dans la plage donnée

Merci

6 réponses

  1. Bonjour,

    Essaie :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Count = Columns.Count And Target.Rows.Count = 1 Then
        ActiveSheet.Unprotect
      End If
    End Sub


    Cordialement.

    Daniel
    0
    1. Bonjour Daniel,

      Ca ne fonctionne pas, lorsque je sélectionne la ligne à supprimer j'ai un message me demandant d'ôter la protection de la feuille alors que je veux que celle-ci reste protégée

      Cordialement
      0
      1. Tu dois mettre le code dans le module de la feuille en question. Fais un clic droit sur l'onglet et clique sur "Visualiser le code". Colle alors celui-ci.

        Daniel
        0
    2. Bonjour fanny

      Ta feuille est protégée avec un mot de passe?
      Cordialement
      0
      1. Bonjour JCB40,

        Actuellement non mais en fonction de ce qui est possible comme solution pourquoi pas

        Cordialement
        0
    3. Ca fonctionne néamoins une fois la suppression de la ligne sélectionnée faite l"ensemble des cellules restent dévérouillées et la feuille n'est plus protégée alors que je voudrais que la feuille entière reste protégée

      Cordialement
      0
      1. Contributeur
        Bonjour à tous,

        il suffit de compléter le code :
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            If Target.Count = Columns.Count And Target.Rows.Count = 1 Then
                If MsgBox("Supprimer la ligne ?", vbYesNo + vbQuestion) = vbYes Then
                    ActiveSheet.Unprotect Password:="123"
                    Target.EntireRow.Delete
                    ActiveSheet.Protect Password:="123"
                End If
            End If
        End Sub

        J'ai ajouté également une demande de confirmation.
        Si tu veux sans mot de passe supprimer Password:="123"
        eric

        0
        1. Bonjour,
          Merci beaucoup ça fonctionne mais je souhaiterais aussi en cas de besoin pouvoir aussi insérer des lignes
          Comment dois je faire ?
          0
        2. Contributeur
          Re,

          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
              If Target.Count = Columns.Count And Target.Rows.Count = 1 Then
                  ActiveSheet.Unprotect Password:="123"
                  If MsgBox("Voulez-vous supprimer la ligne ?", vbYesNo + vbQuestion) = vbYes Then
                      Target.EntireRow.Delete
                  ElseIf MsgBox("Voulez-vous insérer une ligne ?", vbYesNo + vbQuestion) = vbYes Then
                      Target.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                  End If
                  ActiveSheet.Protect Password:="123"
              End If
          End Sub

          eric

          Edit : ou avec une seule boite de dialogue :
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
              Dim msg As String
              If Target.Count = Columns.Count And Target.Rows.Count = 1 Then
                  ActiveSheet.Unprotect Password:="123"
                  msg = "Voulez-vous :" & vbLf & vbLf
                  msg = msg & "- insérer une ligne (Oui)," & vbLf
                  msg = msg & "- supprimer la ligne (Non)," & vbLf
                  msg = msg & "- annuler"
                  Select Case MsgBox(msg, vbYesNoCancel + vbQuestion)
                  Case vbYes
                      Target.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                  Case vbNo
                      Target.EntireRow.Delete
                  End Select
                  ActiveSheet.Protect Password:="123"
              End If
          End Sub
          0
        3. Eric ça fonctionne, c'est génial merci mille fois
          0
        4. Bonjour Eric,

          Dans le prolongement de ma question je souhaiterai également qu'en plus de supprimer et d'insérer une ligne, la macro puisse aussi me proposer de couper, copier et coller

          Comment faire ?

          Merci de votre aide

          Cordialement
          0
        5. Contributeur
          Dis plutôt ce que tu souhaites protéger, ça sera peut-être plus simple (?)
          0
      2. Je vous remercie tous pour l'aide apporter

        Bonne soirée
        0