Macro xls. pour ajout de ligne en fin de tableau

Résolu
Er'icare -  
beneric27 Messages postés 7 Statut Membre -
Bonjour,
J'ai un problème sur ma macro:
La ligne qui s'ajoute en fin de tableau est une copie de la dernière ligne et non une copie de la ligne 20 qui est vierge de données. Peut-on m'aider svp ? Merci

Sub ajout_ligne()

Application.ScreenUpdating = False

ActiveSheet.Unprotect
ligne_max = Range("FF1").Value
    Range("A20").Select
    Selection.End(xlDown).Select
    Range(Selection, Cells(ActiveCell.Row, 162)).Select
    Selection.Copy
    Cells(ligne_max + 1, 1).Select
    ActiveSheet.Paste
    Range(Cells(ligne_max + 1, 2), Cells(ligne_max + 1, 2)).Select
    Selection.ClearContents
    Range("A20").Select

Application.ScreenUpdating = True
    
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Comme ceci si j'ai compris ton désir :
    Sub ajout_ligne()
    
    Application.ScreenUpdating = False
    Dim ligne_max As Long
    With ActiveSheet
        .Unprotect
        ligne_max = .UsedRange.Rows.Count
        .Rows(ligne_max).Resize(2).FillDown
        .Cells(ligne_max + 1, 2).ClearContents
        Range("A20").Select
    '    .protect ' on reprotège si l'on a déprotégé
    End With
    Application.ScreenUpdating = True    
    End Sub
    
    1
    1. beneric27 Messages postés 7 Statut Membre
       
      Sub ajout_ligne()

      Application.ScreenUpdating = False

      ActiveSheet.Unprotect
      ligne_max = Range("FF1").Value (FF1:compteur incrémenté par le dernier indice de ligne +20, car 20 lignes non utilisées)
      Range("A20").Select (ligne vierge à copier)
      Selection.End(xlDown).Select
      Range(Selection, Cells(ActiveCell.Row, 162)).Select (copie de la ligne jusqu'à la colonne 162)
      Selection.Copy
      Cells(ligne_max + 1, 1).Select (colle les cellules copier sous la cellule qui a le plus grand indice)
      ActiveSheet.Paste
      Range(Cells(ligne_max + 1, 2), Cells(ligne_max + 1, 2)).Select
      Selection.ClearContents
      Range("A20").Select

      Application.ScreenUpdating = True

      End Sub

      Ce ne sont pas les cellules de A20 à FD20 (la 162ème cellules de la ligne) qui sont copiées mais les cellules Ax à FDx de l'indice de ligne x+20 (car indice commençant à 1 en ligne 21)pour créer les cellules Ax+21 à FDx+21 (ligne_max+1)
      je ne pense pas qu'il s'agisse d'un problème de protection.
      0
    2. beneric27 Messages postés 7 Statut Membre
       
      problème résolu. Ma ligne 20 ne doit pas être masquée
      0
    3. beneric27 Messages postés 7 Statut Membre
       
      Merci néanmoins de ton aide
      0