Ajouter une ligne sur plusieurs feuilles vérouiller [Résolu]

David DURAN - 7 oct. 2017 à 19:46 - Dernière réponse :  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.

Afficher la suite 

15 réponses

Répondre au sujet
0
Utile
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
 
Commenter la réponse de fred
David DURAN - 8 oct. 2017 à 18:09
0
Utile
1
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,
 
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
 
Commenter la réponse de David DURAN
David DURAN - 8 oct. 2017 à 19:29
0
Utile
2
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.
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.
DavidDURAN 6 Messages postés dimanche 8 octobre 2017Date d'inscription 10 octobre 2017 Dernière intervention > 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
Commenter la réponse de David DURAN
DavidDURAN 6 Messages postés dimanche 8 octobre 2017Date d'inscription 10 octobre 2017 Dernière intervention - 8 oct. 2017 à 20:50
0
Utile
8
Désolé Fred, j'ai oublié de déverrouiller le fichier. Voici le fichier déverrouiller.

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

Cordialement.
DavidDURAN 6 Messages postés dimanche 8 octobre 2017Date d'inscription 10 octobre 2017 Dernière intervention > DavidDURAN 6 Messages postés dimanche 8 octobre 2017Date d'inscription 10 octobre 2017 Dernière intervention - 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.
fred > DavidDURAN 6 Messages postés dimanche 8 octobre 2017Date d'inscription 10 octobre 2017 Dernière intervention - 11 oct. 2017 à 02:56
 
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.
 
 
Ajout :

Alt F8 => fenêtre Macro ; as-tu remarqué qu'en sélectionnant
une macro, il y a en bas sa Description ?  ;)  c'est pour aider
l'utilisateur du classeur Excel.

---------------------------------------

As-tu essayé les raccourcis clavier ? 2 exemples :

Ctrl r => ça va sur la feuille "Récap"
Ctrl a => ça va sur la feuille "Accueil"

C'est plus rapide qu'utiliser la souris pour cliquer sur
un bouton, pas vrai ?  ;)  mais il vaut mieux éviter de
mettre un raccourci clavier pour chaque feuille mois.

---------------------------------------

J'ai oublié de t'indiquer ce raccourci-clavier :
Ctrl l (L minuscule) - ajout d'une ligne
L minuscule et pas i majuscule  ;)
 
Bonjour Fred,
J'ai testé tous les Vba et il fonctionne sans aucun problème. Pour faire court, c'est parfait.
Les raccourcis clavier sont très pratique.
Heureusement que tu viens de me donner l'astuce de la description des macros en bas de page car je n'y avais pas fait attention.
J'ai juste fait un changement pour Ctrl V qui m'envoie à l'onglet "vacances" car je l'utilise pour coller les éléments... Mais je le remettrai quand j'aurai tout terminé.
Astucieux le raccourci pour insérer les lignes, je l'utilise beaucoup.
Voilà, presque déçu d'avoir terminé ce projet. Je ne m'étais jamais lancé dans les macros et c'est pourtant un GROS plus du logiciel.
Encore merci pour tout le travail que tu as apporté dans mon projet que je vais faire évaluer par mes collègues.
Tu mériterais que je rajoute ton nom au projet car c'est autant le tien que le mien.
À bientôt peut-être pour un autre projet.
fred > David DURAN - 11 oct. 2017 à 20:34
Merci pour le retour.  :)  pour le Ctrl v, tu pouvais laisser car Maj Inser = Ctrl v
de même : Ctrl Inser = Ctrl c et Maj Suppr = Ctrl x => tu peux utiliser c, x, v
comme raccourcis clavier (Inser est la touche Insertion ; Suppr est la touche
Suppression) ; bonne continuation dans ton apprentissage des macros.
Commenter la réponse de DavidDURAN