Dupliquer deux dernières lignes saisies

Bonjour,

Je cherche une macro me permettant de copier les deux dernières lignes saisies et de les coller à la suite.

Sachant que je souhaite récupérer les formules et le texte de ces deux lignes.

Exemple de fonctionnement (joint excel de test) :

dans un tableau de 5 colonnes et 5 lignes, je souhaite à l'aide d'un bouton dupliquer les lignes 4 et 5 en ligne 6 et 7 (texte + formules).

Par avance merci pour votre aide

10jpm.zip (3.80 Ko)

Bonjour,

A l'aide de l'enregistreur de MACRO

Sub CopieLigne()

Range("a65536").End(xlUp).Select
    ActiveCell.Offset(-1, 0).Rows("1:2").EntireRow.Select
    Selection.Copy
    ActiveCell.Offset(2, 0).Rows("1:2").EntireRow.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.Offset(2, 0).Range("A1").Select

End Sub

Bonjour,

Une proposition avec tableau (Excel 2007+).

Cdlt.

9jpm-v1.xlsm (20.50 Ko)
Private Sub CommandButton1_Click()
Dim lo As ListObject, rCell As Range

    Set lo = Me.ListObjects(1)
    If lo.InsertRowRange Is Nothing And lo.ListRows.Count >= 2 Then
        Set rCell = lo.HeaderRowRange.Cells(1).Offset(lo.ListRows.Count)
        rCell.Offset(-1, 0).Resize(2, lo.ListColumns.Count - 1).Copy
        rCell.Offset(1, 0).PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    Else
        MsgBox "Le tableau doit comporter 2 lignes.", vbOK + vbInformation, "Insertion lignes"
    End If
    Set rCell = Nothing: Set lo = Nothing

End Sub

merci beaucoup pour vos réponses, ca marche nickel !

petite question M12, comment faire des fonctions comme "sélectionner les deux dernières lignes non vide" à l'aide de l'enregistreur de macro ?

Bonjour,

Une autre proposition puisque le tableau ne t'inspire guère.

Avec le code VBA commenté pour t'aider à comprendre le processus.

Cdlt.

11jpm-v1.xlsm (27.86 Ko)
Private Sub CommandButton1_Click()
Dim rStart As Range, lCol As Long

    ' Adresse de la dernière cellule non vide en colonne A
    ' ($A$5 dans notre exemple)
    Set rStart = ActiveSheet.Range("A" & Rows.Count).End(xlUp)
    ' Si le nombre de lignes est supérieur à 3.
    ' (on veut pas recopier la ligne d'entête de la plage)
    If rStart.Row > 3 Then
        lCol = 5
        ' On decale d'une ligne vers le haut, soit $A$4 et on redéfinit la plage à copier
        ' (2 lignes x 5 colonnes) équivalent à $A$4:$E$5.
        ' La copie s'effectue en $A$6
        rStart.Offset(-1, 0).Resize(2, lCol).Copy Destination:=rStart.Offset(1, 0)
    End If
    Set rStart = Nothing

End Sub

Merci Jean-Eric, avec les explications des lignes de code c'est au top

Mon tableau de 5 colonnes n'était qu'une exemple, le vrai va jusqu'à la colonne AP, le code de M12 fonctionne bien en copier/coller des lignes entières.

Du coup je me suis fais deux boutons :

  • copier coller des deux dernières lignes
  • copier coller des deux lignes références situées dans une autre feuille (ça j'y suis arrivé seul )

Merci encore pour vos réponses.

Le prochain coup j'essaierais l'enregistreur de macro en mode "absolu"...

Re,

Voir code surligné, pour ta question du nombre de colonnes.

Cdlt.

Private Sub CommandButton1_Click()
Dim rStart As Range,lastColAs Long

    ' Adresse de la dernière cellule non vide en colonne A
    ' ($A$5 dans notre exemple)
    Set rStart = ActiveSheet.Range("A" & Rows.Count).End(xlUp)
    ' Si le nombre de lignes est supérieur à 3.
    ' (on veut pas recopier la ligne d'entête de la plage)
    If rStart.Row > 3 Then
        ' On détermine la dernière colonne non vide de la ligne 1
       lastCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
        ' On decale d'une ligne vers le haut, soit $A$4 et on redéfinit la plage à copier
        ' (2 lignes x 5 colonnes) équivalent à $A$4:$E$5.
        ' La copie s'effectue en $A$6
        rStart.Offset(-1, 0).Resize(2, lastCol).Copy Destination:=rStart.Offset(1, 0)
    End If
    Set rStart = Nothing

End Sub

J'ai testé aussi c nickel

Rechercher des sujets similaires à "dupliquer deux dernieres lignes saisies"