Copier un tableau de taille variable à la suite d'un autre

SophieLoug -  
 SophieLoug -
Bonjour,

Dans le cadre du travail, j'essaye de créer un outil sur Excel facilitant la réalisation d'un reporting.
Cependant, ma macro ne s'exécute pas jusqu'à la fin.

En effet, j'essaie de sélectionner un tableau avec un nombre de ligne variable (nombre de colonnes fixe) pour le coller sur mon fichier de travail à la suite.
Voici ce que j'ai pu écrire sachant que je suis déjà sur le fichier avec le tableau de base :

For i = 2 To Range("A1048576").End(xlUp).Row
For c = 1 To 11
ActiveSheet.Range(i, c).Cut Destination:=Workbooks(nomFichier).Sheets("Data").Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1)
Next c
Next i

Je suis débutante soyez tolérant :)

Merci par avance
A voir également:

5 réponses

ccm81 Messages postés 11033 Statut Membre 2 434
 
Bonjour
Les deux fichiers étant ouverts

Public Sub Transfert()
Const fichiersource = "SophieLoug_1.xls"
Const feuillesource = "feuil1"
Const fichierbut = "SophieLoug_2.xls"
Const feuillebut = "data"
Dim plage As String
Dim lider As Long
Windows(fichiersource).Activate
Sheets(feuillesource).Activate
plage = "A2:K" & Range("A" & Rows.Count).End(xlUp).Row
ActiveSheet.Range(plage).Copy
Windows(fichierbut).Activate
Sheets(feuillebut).Activate
lider = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lider).Select
ActiveSheet.Paste
End Sub


bonne suite
0
SophieLoug
 
Merci!

j'ai adapté
Const fichiersource = ActiveWorkbook
Const feuillesource = "Nouveau"
Const fichierbut = nomFichier
Const feuillebut = "DATA"

Mais le ActiveWorkbook ne fonctionne (le nom du fichier change tout le temps)
0
SophieLoug
 
En fait ça le fait sur toutes les constantes

"constante requise"
0
SophieLoug
 
J'ai testé sans les constantes du coup.. et il ne me copie que la plage A1:K2 et il y a un message d'erreur quand il s'agit de coller dans le fichierbut

Cette macro va me rendre chèvre!
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
Peut être ceci
Une macro à placer dans le fichier but qui va chercher le fichier source via l'explorateur, reste à voir le nom de la feuille à copier....

Public Sub Transfert() 
Const fichierbut = "SophieLoug_2.xls" 
Const feuillebut = "data" 
Const feuillesource = "feuil1" 
Dim plage As String 
Dim lider As Long 
Dim fichiersource As String 
Application.ScreenUpdating = False 
fichiersource = Application.GetOpenFilename("fichier source (*.xls),*.xls") 
If fichiersource = "Faux" Then Exit Sub 
Workbooks.Open Filename:=fichiersource 
fichiersource = ActiveWorkbook.Name 
Sheets(feuillesource).Activate 
plage = "A2:K" & Range("A" & Rows.Count).End(xlUp).Row 
ActiveSheet.Range(plage).Copy 
Windows(fichierbut).Activate 
Sheets(feuillebut).Activate 
lider = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1 
Range("A" & lider).Select 
ActiveSheet.Paste 
Workbooks(fichiersource).Close 
Application.ScreenUpdating = True 
End Sub 

bonne suite
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
RQ. seul le fichier but est ouvert au départ.
0
SophieLoug
 
en fait ma macro va déjà ouvrir le fichiersource, je fais d'ailleurs un travail dessus avec la macro et ensuite je copie le tableau
ce que j'avais mis c'était la partie qui ne fonctionnait pas
0
SophieLoug
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False


'Enregistrer le nom du fichier dans une variable
nomFichier = ActiveWorkbook.Name

'Enregistrer l'emplacement du fichier dans une variable
nomEmplacement = ActiveWorkbook.Path

'Ouvrir une boîte de dialogue permettant de connaître le nom et l'emplacement du fichier à importer
cheminFichier = Application.GetOpenFilename(fileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Fichier source")

'Ouvrir le fichier
Workbooks.Open Filename:=cheminFichier

'Convertir les codes magasins en nombre
ActiveSheet.Columns("D:D").Select
Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True

'Sélectionner l'enseigne
Enseigne = InputBox("Préciser l'enseigne comme inscrit dans Sharepoint", "ENSEIGNE", 0)

'Sélectionner la saison
Saison = InputBox("Préciser la saison", "SAISON", 0)

'Filtrer sur les données qui nous interressent
ActiveSheet.ListObjects("Tableau_owssvr_1").Range.AutoFilter Field:=7, _
Criteria1:="Magasin"
ActiveSheet.ListObjects("Tableau_owssvr_1").Range.AutoFilter Field:=6, _
Criteria1:=Array("Colis autre magasin", "Colis non validé", "Colis validé à 0", _
"Doublon", "Ecart", "Inversion", "Non respect des procédures", "TIM avec écart", "TIM non validé", _
"TIM validé à 0"), Operator:= _
xlFilterValues
ActiveSheet.ListObjects("Tableau_owssvr_1").Range.AutoFilter Field:=3, _
Criteria1:=Enseigne

'Copier les données dans l'onglet DATA
ActiveSheet.Columns("A:k").Select
Selection.Copy

Sheets.Add.Name = "Nouveau"
Sheets("Nouveau").Activate
ActiveSheet.Range("A1").Select
ActiveSheet.Paste


A partir de là j'ai un problème

Const fichiersource = ActiveWorkbook
Const feuillesource = "Nouveau"
Const fichierbut = nomFichier
Const feuillebut = "DATA"
Dim plage As String
Dim lider As Long
Windows(fichiersource).Activate
Sheets(feuillesource).Activate
plage = "A2:K" & Range("A" & Rows.Count).End(xlUp).Row
ActiveSheet.Range(plage).Copy
Windows(fichierbut).Activate
Sheets(feuillebut).Activate
lider = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lider).Select
ActiveSheet.Paste


End Sub
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
Voilà comment je vois les choses (mais vu d'ici ...)

0. La macro devrait être dans le fichier but

1. ta macro ouvre le fichier source avec quelque chose comme ça.
fichiersource = Application.GetOpenFilename("fichier source (*.xls),*.xls")
If fichiersource = "Faux" Then Exit Sub
Workbooks.Open Filename:=fichiersource

2. Dès que tu l'as ouvert, tu récupères son nom (sans le chemin d'accès) avec
fichiersource = ActiveWorkbook.Name

3. tu fais ce que tu as à faire avec ta macro

4. Pour faire ta copie depuis le fichier source, tu actives le fichier source
Workbooks(fichiersource).Activate

etc...
0
SophieLoug
 
La méthode Select de la classe Range a échouée :(

Range("A" & lider).Select
ActiveSheet.Paste
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
Et combien vaut lider quand ça plante?
0
SophieLoug
 
pour le test le fichier est vierge, il n'y a que le titre donc 2

A noter que dans mon fichier source, la sélection copiée n'est que de A1 à K2 alors que j'ai besoin a partir de A2 et ce jusqu'en bas du tableau


Désolée.. et merciiiii
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SophieLoug
 
la solution :

Dim nbreLignesDATA As Integer
Dim nbreLignesNOUVEAU As Integer

'Enregistrer dans une variable, le nombre de ligne de l'onglet "DATA" du fichier "nomfichier"
Workbooks(nomFichier).Sheets("DATA").Activate
nbreLignesDATA = ActiveSheet.Range("A1").End(xlDown).Row

'Enregistrer dans une variable, le nombre de ligne de l'onglet "NOUVEAU" du fichier "fichiersource"
Workbooks(fichiersource).Sheets("Nouveau").Activate
nbreLignesNOUVEAU = ActiveSheet.Range("A1").End(xlDown).Row

'Copier les données de l'onglet "NOUVEAU" du fichier "fichiersource"
Workbooks(fichiersource).Sheets("Nouveau").Activate
ActiveSheet.Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(nbreLignesNOUVEAU, 11)).Select
Selection.Copy

'Coller à la suite du tableau dans l'onglet "DATA" du fichier "nomfichier"
Workbooks(nomFichier).Sheets("DATA").Activate
ActiveSheet.Cells(nbreLignesDATA + 1, 1).Select
ActiveSheet.Paste
0