Copier un tableau de taille variable à la suite d'un autre
SophieLoug
-
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
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:
- Copier un tableau de taille variable à la suite d'un autre
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
- Tableau ascii - Guide
5 réponses
Bonjour
Les deux fichiers étant ouverts
bonne suite
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
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....
bonne suite
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
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
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
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.
2. Dès que tu l'as ouvert, tu récupères son nom (sans le chemin d'accès) avec
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
etc...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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)
"constante requise"
Cette macro va me rendre chèvre!