Ajouter une ligne sur plusieurs feuilles vérouiller

Résolu
David DURAN -  
 fred -
Bonjour,
Je suis conscient que la question a été posé mainte fois. Novice en VBA, je n'arrive pas à trouver l'erreur.

Voici mon code :

Sub ajout_ligne_par_feuilles()
Dim s As Worksheet, ligne&
ligne = InputBox("A quelle position voulez-vous insérer une nouvelle ligne?", "N° Ligne")
For Each s In Worksheets
Select Case s.Name
Case "Sept", "Sept rectifié", "Oct", "Oct rectifié", "Nov", "Nov rectifié", "Déc", "Déc rectifié", "Janv", "Janv rectifié", "Févr", "Févr rectifié", "Mars", "Mars rectifié", "Avril", "Avril rectifié", "Mai", "Mai rectifié", "Juin", "Juin rectifié", "Juillet", "Juillet rectifié", "Récap", "Détails"
s.Rows(ligne).Copy
s.Rows(ligne).Insert Shift:=xlDown
End Select
Next s
Application.CutCopyMode = False
End Sub

Je voulais rajouter les lignes suivantes pour déverrouiller et verrouiller automatiquement les feuilles :

Sub ajout_ligne_par_feuilles()
ActiveSheet.Unprotect ("MotdePasse")
Dim s As Worksheet, ligne&
ligne = InputBox("A quelle position voulez-vous insérer une nouvelle ligne?", "N° Ligne")
For Each s In Worksheets
Select Case s.Name
Case "Sept", "Sept rectifié", "Oct", "Oct rectifié", "Nov", "Nov rectifié", "Déc", "Déc rectifié", "Janv", "Janv rectifié", "Févr", "Févr rectifié", "Mars", "Mars rectifié", "Avril", "Avril rectifié", "Mai", "Mai rectifié", "Juin", "Juin rectifié", "Juillet", "Juillet rectifié", "Récap", "Détails"
s.Rows(ligne).Copy
s.Rows(ligne).Insert Shift:=xlDown
End Select
Next s
Application.CutCopyMode = False
ActiveSheet.Protect ("MotdePasse")
End Sub

Mais cela ne fonctionne pas.

Merci d'avance pour votre soutien.

4 réponses

  1. fred
     
    Bonjour David,

    Enlève déjà les parenthèses inutiles :

    
    Sub ajout_ligne_par_feuilles() 
      ActiveSheet.Unprotect "MotdePasse"
      .
      .
      .
      ActiveSheet.Protect "MotdePasse"
    End Sub
    
    

    Ensuite, il faut bien sûr que le mot de passe soit le bon.  ;)
    ⚠  Majuscules différent des minuscules ! "A" <> "a"

    Cordialement
     
    0
  2. David DURAN
     
    Bonjour,

    Suite à la proposition de Fred, j’ai enlevé les parenthèse comme expliqué ci-dessus. Cependant, lorsque je lance la macro pour ajouter une ligne (avec les feuilles verrouillées) il m’indique le message suivant « erreur d’exécution 1004 – la méthode Insert de la classe Range a échoué». Lorsque je lance le mode débogage il m’indique la ligne en gras ci-dessous :

    Sub ajout_ligne_par_feuilles()
    ActiveSheet.Unprotect "MotdePasse"
    Dim s As Worksheet, ligne&
    ligne = InputBox("A quelle position voulez-vous insérer une nouvelle ligne?", "N° Ligne")
    For Each s In Worksheets
    Select Case s.Name
    Case "Sept", "Sept rectifié", "Oct", "Oct rectifié", "Nov", "Nov rectifié", "Déc", "Déc rectifié", "Janv", "Janv rectifié", "Févr", "Févr rectifié", "Mars", "Mars rectifié", "Avril", "Avril rectifié", "Mai", "Mai rectifié", "Juin", "Juin rectifié", "Juillet", "Juillet rectifié", "Récap", "Détails"
    s.Rows(ligne).Copy
    s.Rows(ligne).Insert Shift:=xlDown
    End Select
    Next s

    Application.CutCopyMode = False
    ActiveSheet.Protect "MotdePasse"
    End Sub

    Merci pour votre aide,
    0
    1. fred
       
       
      Bonjour David,

      Mets ceci :

      
      ligne = Val(InputBox("A quelle position voulez-vous insérer une nouvelle ligne?", "N° Ligne"))
      If ligne = 0 Then Exit Sub
      
      

      Ça évitera déjà une ligne n° 0 si l'utilisateur saisit
      un nombre 0 ou du texte.  ;)

      Ensuite, regarde l'aide VBA sur Rows().Insert

      Cordialement
       
      0
  3. David DURAN
     
    Bonjour Fred,

    Je viens d'essayer ta proposition :

    Sub ajout_ligne_par_feuilles()
    ActiveSheet.Unprotect "MotdePasse"
    Dim s As Worksheet, ligne&
    ligne = Val(InputBox("A quelle position voulez-vous insérer une nouvelle ligne?", "N° Ligne"))
    If ligne = 0 Then Exit Sub
    For Each s In Worksheets
    Select Case s.Name
    Case "Sept", "Sept rectifié", "Oct", "Oct rectifié", "Nov", "Nov rectifié", "Déc", "Déc rectifié", "Janv", "Janv rectifié", "Févr", "Févr rectifié", "Mars", "Mars rectifié", "Avril", "Avril rectifié", "Mai", "Mai rectifié", "Juin", "Juin rectifié", "Juillet", "Juillet rectifié", "Récap", "Détails"
    s.Rows(ligne).Copy
    s.Rows(ligne).Insert Shift:=xlDown
    End Select
    Next s

    Application.CutCopyMode = False
    ActiveSheet.Protect "MotdePasse"
    End Sub

    Malheureusement, j'ai le même message d'erreur.

    Veux-tu que je te fasse parvenir le fichier pour une meilleure compréhension du problème ?

    Merci encore de me consacrer de ton temps.
    0
    1. fred
       
      Tu peux déposer ton fichier sans données confidentielles sur le site
      mon-partage.fr (la procédure à suivre est très bien expliquée), et tu
      dois copier / coller le lien de téléchargement dans ton prochain post.
      0
      1. DavidDURAN Messages postés 6 Statut Membre > fred
         
        Voici le lien du fichier :
        Cela concerne la gestion horaire des agents. Je souhaite pouvoir ajouter une ligne avec l'option d'enlever et de remettre automatiquement le verrouillage pour éviter toutes mauvaises manipulations de mes collègues.

        https://mon-partage.fr/f/HbeWA1Or/

        Merci
        0
  4. DavidDURAN Messages postés 6 Statut Membre
     
    Désolé Fred, j'ai oublié de déverrouiller le fichier. Voici le fichier déverrouiller.

    https://mon-partage.fr/f/zI554N9f/

    Cordialement.
    0
    1. fred
       
       
      Bonjour David,

      Fichier n° 1 : https://mon-partage.fr/f/YH5vL8cu/
      Fichier n° 2 : https://mon-partage.fr/f/15BtSOMu/

      Si besoin, tu peux me demander une adaptation.
      Merci de me donner ton avis.

      Cordialement
       
      0
    2. David DURAN
       
      Bonjour Fred,
      Je tiens à te remercier fortement pour le temps et surtout le travail que tu as effectué sur mon fichier. Rien que cela est formidable.
      Je regarderai les détails ce soir (vie de famille oblige). Mon premier ressenti est que tu as réorganisé l'ensemble des VBA et j'ai l'impression que l'exécution des macros est plus rapide.
      Je te tiens au courant et encore merci pour ta disponibilité.
      0
    3. DavidDURAN Messages postés 6 Statut Membre
       
      Par la même occasion, je voulais savoir ce que tu penses de cette VBA sachant que l'objectif est de simplifier la manipulation du bouton "ajouter une ligne" et "ajouter agent" en positionnant le curseur sur l'emplacement vide où le nom de l'agent doit être écrit (j'espère que je suis clair) :

      Sub Ajout_CDD()

      Application.ScreenUpdating = False ' pour accélérer le processus

      'Déverrouiller toutes les feuilles
      Dim nombre As Integer
      Dim Motdepasse As String
      Motdepasse = "MotdePasse"
      nombre = ActiveWorkbook.Sheets.Count
      Application.ScreenUpdating = False
      For i = 1 To nombre
      Worksheets(i).Unprotect Password:=Motdepasse
      Next i

      ' Ajout CDD Macro
      Sheets("Sept").Select
      Range("A7").Select
      Selection.End(xlDown).Offset(1, 0).Select

      ' Ajout ligne
      Dim Ligne As Long, F As Integer
      Ligne = ActiveCell.Row
      For F = 1 To Sheets.Count
      If Not (Sheets(F).Name = "Accueil") Then
      Sheets(F).Rows(Ligne).Copy
      Sheets(F).Rows(Ligne).Insert Shift:=xlDown
      End If
      Next F
      Application.CutCopyMode = False

      ' Verrouiller toutes les feuilles
      Motdepasse = "celietta66"
      nombre = ActiveWorkbook.Sheets.Count
      Application.ScreenUpdating = False
      For i = 1 To nombre
      Worksheets(i).Protect Password:=Motdepasse
      Next i

      Application.ScreenUpdating = True

      End Sub

      En te remerciant,
      0
    4. DavidDURAN Messages postés 6 Statut Membre > DavidDURAN Messages postés 6 Statut Membre
       
      Bonjour Fred,
      Ton programme est impeccable. Le classement des VBA ingénieux, je m'en servirai pour les prochaines fois. Comme je te l'ai dit, je suis encore novice en programmation alors j’essaie de comprendre tes modifications. En tous les cas, le résultat est là !
      Merci beaucoup.
      0
    5. fred > DavidDURAN Messages postés 6 Statut Membre
       
       
      Bonjour David,

      Merci du retour ; j'ai bien lu tes 3 derniers messages ;
      pour celui d'hier à 19:22, je te propose ce code VBA :

      
      Sub Ajout_CDD()
        
        'Déverrouiller toutes les feuilles
        Dim MotdePasse As String, nombre As Integer, i As Integer
        MotdePasse = "password": nombre = ActiveWorkbook.Sheets.Count
        Application.ScreenUpdating = False ' pour accélérer le processus
        For i = 1 To nombre
          Worksheets(i).Unprotect MotdePasse
        Next i
        
        ' Ajout CDD
        GoFX "Sept", "A7": [A7].End(xlDown).Offset(1).Select
        
        ' Ajout ligne
        Dim Ligne As Long: Ligne = ActiveCell.Row
        For i = 1 To nombre
          With Worksheets(i)
            If .Name <> "Accueil" Then
              .Rows(Ligne).Copy: .Rows(Ligne).Insert Shift:=xlDown
            End If
          End With
        Next i
        Application.CutCopyMode = False
        
        ' Verrouiller toutes les feuilles
        For i = 1 To nombre
          Worksheets(i).Protect MotdePasse
        Next i
      
      End Sub
      
      
      

      C'est juste une optimisation de ton code ; je ne l'ai pas testé
      et je te laisse le soin de le faire ; à te lire pour avoir ton avis.
       
      0