Ajouter une ligne sur plusieurs feuilles vérouiller

Résolu/Fermé
David DURAN - 7 oct. 2017 à 19:46
 fred - 11 oct. 2017 à 20:34
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.

A voir également:

4 réponses

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
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
 
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
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
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
DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017 > fred
8 oct. 2017 à 19:52
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
DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017
8 oct. 2017 à 20:50
Désolé Fred, j'ai oublié de déverrouiller le fichier. Voici le fichier déverrouiller.

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

Cordialement.
0
 
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
David DURAN
10 oct. 2017 à 19:02
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
DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017
10 oct. 2017 à 19:22
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
DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017 > DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017
10 oct. 2017 à 22:30
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
fred > DavidDURAN Messages postés 6 Date d'inscription dimanche 8 octobre 2017 Statut Membre Dernière intervention 10 octobre 2017
Modifié le 11 oct. 2017 à 03:18
 
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