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

5 réponses

  1. 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
    1. 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
    2. SophieLoug
       
      En fait ça le fait sur toutes les constantes

      "constante requise"
      0
    3. 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
  2. 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
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      RQ. seul le fichier but est ouvert au départ.
      0
    2. 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
    3. 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
  3. 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
    1. SophieLoug
       
      La méthode Select de la classe Range a échouée :(

      Range("A" & lider).Select
      ActiveSheet.Paste
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Et combien vaut lider quand ça plante?
    0
    1. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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