Macro bloquée par protection feuille

Viking58 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à toutes et tous.

Après m'être aperçu que mes macros "plantaient" une fois ma feuille protégée, j'ai trouvé ce petit code qui fonctionne impeccable...

Private Sub Workbook_Open()

With Worksheets("NomDeLaFeuille")
.Protect "MotDePasse", DrawingObjects:=True, _
Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True
End With

End Sub

MAIS: J'ai un bouton d'insertion de ligne. Depuis l'ajout du code ci-dessus, je ne peux plus supprimer les lignes insérées.
Pourquoi ?

Merci

5 réponses

  1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    Bonjour

    Avec cette ligne pour enlever la protection

    ActiveSheet.Unprotect Password:="MOT_DE_PASSE"

    Et celle-ci pour remettre la protection

    ActiveSheet.Protect "MOT DE PASSE"

    cela devrait suffire

    0
  2. Viking58 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   7
     
    Merci PHILOU10120.

    Non. Ce code plante. Une fois lancé, il envoi un message d'erreur quand je veux exécuter une macro.
    Mais ce n'est pas grave. En cas de nécessité, j'ôterai la protection, et j'effacerai la ou les lignes voulues.

    Bonne fin de journée.
    0
    1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
       
      Si vous voulez enlever la protection sur la feuille qui n'est pas protégée c'est normal
      Vous protégez la feuille manuellement et vous lancez cette première ligne puis la deuxième en fin de macro remettra la protection de la feuille avec le mot de passe précisé dans la macro
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    essaie en ajoutant le paramètre , AllowInsertingRows:=True
    eric
    0
  4. Viking58 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   7
     
    Merci PHILOU10120.

    Ma feuille est bien protégée. Comme mes macros plantaient, ce code a été ajouté au lancement de la feuille pour éviter ce plantage:

    Private Sub Workbook_Open()

    With Worksheets("Feuil1")
    .Protect "xxxxxx", DrawingObjects:=True, _
    Contents:=True, Scenarios:=True, _
    UserInterfaceOnly:=True
    End With
    End Sub

    Plus de message d'erreur. Mes macros tournent au poil...
    Le seul petit soucis est que depuis l'ajout de cette macro,si j'insère par erreur une ligne à l'aide du bouton "Insérer Ligne" que j'ai créé, je ne peux plus la supprimer, (commande grisée). Je suis obligé d'ouvrir "Révision" et d'ôter la protection de ma feuille, et là, je peux de nouveau supprimer les lignes insérées par erreur.


    Voilà. J'espère que mon explication est claire. Ce n'est rien de bien gênant, plutôt de la curiosité.

    Bonne soirée
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Viking58 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   7
     
    Merci eriiic.

    Nos messages se sont croisés. J'ai essayé d'insérer votre ligne dans ma macro, à plusieurs endroits, j'ai des messages d'erreur.
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Erreur, j'avais mis pour ajouter les lignes au lieu de supprimer. C'est :
      Sub protege()
          Worksheets("Feuil1").Protect "MotDePasse", DrawingObjects:=True, Contents:=True, Scenarios:=True, _
                                       AllowDeletingRows:=True, UserInterfaceOnly:=True
      End Sub

      Mais il ne faut pas de cellule verrouillée sur la ligne.

      Si tu en as il faut demander à l'utilisateur quelles lignes supprimer. Par exemple sur le clic-droit, à mettre dans le module Feuil :
      Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
          If Target.Columns.Count = Columns.Count Then
              If MsgBox("Supprimer les lignes " & Target.Address, vbYesNo + vbQuestion) = vbYes Then
                  Cancel = True
                  Target.Locked = False
                  Target.EntireRow.Delete
              End If
          End If
      End Sub

      Il sélectionne ses lignes fait un clic-droit sur la sélection.
      Au passage tu peux contrôler les lignes pour voir s'il a le droit de les supprimer.

      eric
      0