Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Copier et ne coller que les 12 dernières lignes

Collins

XLDnaute Occasionnel
Bonjour à tous

J'ai un tableau qui comportent des milliers de lignes et je voudrais ne copier/coller chaque fois que les 12 dernières lignes d'un tableau sur un autre fichier.
j'ai mis en exemple 2 fichiers avec les explications.
Et comme ce tableau évolue chaque jour, je suis bloqué.
Je vous remercie pour l'aide que vous pourrez m'apporter.
 

Pièces jointes

  • Classeur1.xlsx
    11.3 KB · Affichages: 7
  • Classeur2.xlsx
    8.6 KB · Affichages: 4

chris

XLDnaute Barbatruc
Bonjour

Une solution PowerQuery (totalement intégré à ta version Excel)

Adapter la cellule en jaune puis Données, Actualiser Tout
 

Pièces jointes

  • 12dernieres_lignes_PQ.xlsx
    17.2 KB · Affichages: 6

Collins

XLDnaute Occasionnel
Bonjour Chris

Merci pour ta réponse
J'ai ouvert le fichier Classeur1 ou il y a le tableau
Et dans source il me dit : DataSource.Error : Impossible de trouver une partie du chemin d'accès 'T:\TEMP\Classeur1.xlsx'.
Pour essayé j'ai enlevé \TEMP.
La je ne sais plus quoi faire.
N'as tu pas une solution par macro?
 

chris

XLDnaute Barbatruc
RE

Il suffit d'indiquer le chemin complet sur ton PC...

Tu sembles ne pas avoir lu attentivement mon post...

VB:
Adapter la cellule en jaune puis Données, Actualiser Tout

Ce serait du reste le même problème en VBA...
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Collins, chris,

Une solution VBA avec cette macro affectée au bouton :
VB:
Sub Transfert()
Dim nlig&, fichier$, P As Range
nlig = 12 'modifiable
fichier = ThisWorkbook.Path & "\Destination.xlsx" 'chemin à adapter
Set P = [A1].CurrentRegion
If P.Rows.Count > nlig + 1 Then Set P = Union(P.Rows(1), P.Rows(P.Rows.Count - nlig + 1).Resize(nlig))
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier a déjà été créé
With Workbooks.Add(xlWBATWorksheet) 'nouveau document
    P.Copy Sheets(1).[A1] 'copier-coller
    .SaveAs fichier, 51 'format .xlsx
    .Close
End With
MsgBox "Transfert effectué..."
End Sub
Le tableau source doit avoir une ligne d'en-têtes, copiée elle aussi.

A+
 

Pièces jointes

  • Source(1).xlsm
    20.4 KB · Affichages: 4

Collins

XLDnaute Occasionnel
Bonjour Job75

Merci beaucoup pour cette méthode VBA.
Mais pour adapter à un fichier réel que je vais créer : j'aurai 3 tableaux dans ce fichier sur 3 onglets (par exemple) dans : "Source1", "Source2" et "Source3".
Serait il possible que j'ai les 12 dernières lignes de ces 3 tableaux sur 3 feuilles différentes dans ton fichier "destination" qui se crée automatiquement.
Je voudrai regrouper les valeurs sur 1 fichier pour m'éviter d'en avoir 3.
 

job75

XLDnaute Barbatruc
On peut traiter autant de feuilles que l'on veut :
VB:
Sub Transfert()
Dim nlig&, fichier$, a, n%, P As Range
nlig = 12 'modifiable
fichier = ThisWorkbook.Path & "\Destination.xlsx" 'chemin à adapter
a = Array("Source1", "Source2", "Source3") 'noms des feuilles à copier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier a déjà été créé
With Workbooks.Add(xlWBATWorksheet) 'nouveau document
    For n = 0 To UBound(a)
        If n Then .Sheets.Add After:=.Sheets(n)
        .Sheets(n + 1).Name = a(n)
        Set P = ThisWorkbook.Sheets(a(n)).[A1].CurrentRegion
        If P.Rows.Count > nlig + 1 Then Set P = Union(P.Rows(1), P.Rows(P.Rows.Count - nlig + 1).Resize(nlig))
        P.Copy .Sheets(n + 1).[A1] 'copier-coller
    Next
    .Sheets(1).Activate
    .SaveAs fichier, 51 'format .xlsx
    .Close
End With
MsgBox "Transfert effectué..."
End Sub
 

Pièces jointes

  • Source(2).xlsm
    25.3 KB · Affichages: 3

Collins

XLDnaute Occasionnel
Merci encore Job75
Mais que c'est difficile ces macros, mais que c'est efficace.
En étudiant le code, et comme tu le dis je pourrais si j'en ai besoin, rajouter d'autres onglets, dans Array.
Bonne soirée
 

Discussions similaires

Réponses
6
Affichages
436
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…