Copier des lignes à partir d'un autre classeur Excel

yakin78

XLDnaute Junior
Bonjour à Tous

Recherche une solution pour importer des lignes d'un fichier distant et les coller dans ce tableau ,les unes à la suite des autres ,les fichiers on le meme nom de page "Commande" ,les pages distantes ne depassent pas les 20 Lignes.

Avec ce fichier je peut récupérer des lignes ,mais il faut rentrer la plage dans le code , et les fichiers distants on un nombre variable de lignes !!


merci !!!
 

Pièces jointes

  • Import Fichiers.xlsm
    23.3 KB · Affichages: 38
  • Fichier distant.xlsx
    9.6 KB · Affichages: 29
  • Import Fichiers.xlsm
    23.3 KB · Affichages: 35
  • Fichier distant.xlsx
    9.6 KB · Affichages: 34
  • Import Fichiers.xlsm
    23.3 KB · Affichages: 36
  • Fichier distant.xlsx
    9.6 KB · Affichages: 34

bruno66

XLDnaute Occasionnel
Re : Copier des lignes à partir d'un autre classeur Excel

rbonjour recherche sur le forum tu as plein d'exemple a adapter a ton cas
dans transfert de données
ou importer des données d'un autre classeur
il y a plein d'exemple simple adapter a ton cas
amicalement
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Copier des lignes à partir d'un autre classeur Excel

Bonjour à tous

Sinon si c'est pour un fichier : Ctrl+Home, Ctrl+*, Ctrl+c, Ctrl+F6, sélectionner la cellule à copier et enfin ctrl+V. Ensuite supprimer la ligne de titre. Sélectionne la ligne et faire ctrl+-.

Sinon, avec l'enregistreur de macros, c'est pas très compliqué (enfin pour moi:eek:). Un indice: Pour trouver la dernière ligne: Derl=Cells(65536,1).end(xlup).row. Puis pour avoir la bonne plage à copier: range(cells(2,1),cells(derl,ColFin).select
 

yakin78

XLDnaute Junior
Re : Copier des lignes à partir d'un autre classeur Excel

merci MJ13

comment faut t'il declarer Derl et colfin ,as string ou as variant ??
j'ai essayer les 2 mais ne fonctionnent pas !!

Je debute complétement,ce debut de code je l'ai trouvé dans ce forum ,et j'ai voulu l'adapter à ma situation
 

Pièces jointes

  • Fichier distant.xlsx
    10 KB · Affichages: 24
  • Import Fichiers2.xlsm
    23.5 KB · Affichages: 23
  • Fichier distant.xlsx
    10 KB · Affichages: 26
  • Import Fichiers2.xlsm
    23.5 KB · Affichages: 22
  • Fichier distant.xlsx
    10 KB · Affichages: 23
  • Import Fichiers2.xlsm
    23.5 KB · Affichages: 31

MJ13

XLDnaute Barbatruc
Re : Copier des lignes à partir d'un autre classeur Excel

Re

Si tu débutes, alors ne déclare pas tes variables sauf celles sensibles et ne met pas option Explicit qui t'oblige à déclarer toutes les variables car toute variable non déclarée sera déclarée en variant (voir l'aide F1 à ce sujet). Pour la déclaration de variables derl et colfin seront un chiffre donc plutôt double.

Attention, je n'ai pas déclarer colfin mais si cela ne change pas, tu peux la mettre en dur ex: 8 si tes données finissent en colonne 8.

Voila, à toi de jouer, mais n'oublie pas, que les meilleurs codes, sont ceux que tu peux écrire et surtout comprendre :).
 

yakin78

XLDnaute Junior
Re : Copier des lignes à partir d'un autre classeur Excel

Bonjour ,MJ13
j'ai essayer cette formule j'ai une erreur sur cette ligne:

ThisWorkbook.Sheets("Commande").range(cells(2,1),cells(derl,ColFin)).select = Workbooks(nomfichier).Sheets("Commande").Range("derl,Colfin").Value

(dans VBA le code est en une seul ligne)


Sub Transfert()
' Déclaration des variables
Application.ScreenUpdating = False
Dim ligne As Integer
Dim i As Integer
Dim derl, ColFin As Double

ColFin = 8




' Initialisation de la variable ligne à 2 (la ligne 1 est la ligne des titres)
ligne = 2

cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsx), *.xlsx")

' Si on clique sur Annuler dans la fenêtre, on sort de la boucle
If cheminfichier = False Then


ThisWorkbook.Save
ThisWorkbook.Close
Application.Quit

End If

' Ouverture du classeur source
Workbooks.Open cheminfichier

' Récupération du nom du classeur + extension
For i = Len(cheminfichier) To 1 Step -1
If Mid(cheminfichier, i, 1) = "\" Then Exit For
Next
nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))

derl = Cells(65536, 1).End(xlUp).Row

' Copie des valeurs entre les classeurs

ThisWorkbook.Sheets("Commande").range(cells(2,1),cells(derl,ColFin)).select = Workbooks(nomfichier).Sheets("Commande").Range("derl,Colfin").Value

' Fermeture du classeur source
Workbooks(nomfichier).Close

' Incrémentation du numéro de ligne
ligne = ligne + 1

Application.ScreenUpdating = True
MsgBox (" X lignes copiées")
End Sub
 

MJ13

XLDnaute Barbatruc
Re : Copier des lignes à partir d'un autre classeur Excel

Re

J'aurais plutôt vu un code de ce type:

Code:
Sub Transfert()
    ' Déclaration des variables
    Application.ScreenUpdating = False
    Dim ligne As Integer
    Dim i As Integer
    'Dim derl, ColFin As String
     
    
         
    ' Initialisation de la variable ligne à 2 (la ligne 1 est la ligne des titres)
    ligne = 2
    ColFin = 8
     cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsx), *.xlsx")
            
           ' Si on clique sur Annuler dans la fenêtre, on sort de la boucle
        If cheminfichier = False Then
        
            
            ThisWorkbook.Save
            ThisWorkbook.Close
            Application.Quit
       
        End If
       
        '       Ouverture du classeur source
        Workbooks.Open (cheminfichier)
         
        ' Récupération du nom du classeur + extension
        For i = Len(cheminfichier) To 1 Step -1
            If Mid(cheminfichier, i, 1) = "\" Then Exit For
        Next
        nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))
          'Stop
        derl = Cells(65536, 1).End(xlUp).Row
        derldest = Workbooks(ThisWorkbook.Name).Sheets("commande").Cells(65536).End(xlUp).Row + 1
        ActiveSheet.Range(Cells(2, 1), Cells(derl, ColFin)).Copy Destination:=Workbooks(ThisWorkbook.Name).Sheets("commande").Range("A" & derldest)
                    
        ' Copie des valeurs entre les classeurs
      
        'ThisWorkbook.Sheets("Commande").Range("A4:Q4") = Workbooks(nomfichier).Sheets("Commande").Range("A2:Q2").Value
        'ThisWorkbook.Sheets("Commande").Range("A5:Q5") = Workbooks(nomfichier).Sheets("Commande").Range("A3:Q3").Value
                
                
        ' Fermeture du classeur source
        Workbooks(nomfichier).Close 0
         
        ' Incrémentation du numéro de ligne
        ligne = ligne + 1
        
        Application.ScreenUpdating = True
       MsgBox (" X lignes copiées") 'si possible afficher le nombre de lignes copiées
End Sub
 

yakin78

XLDnaute Junior
Re : Copier des lignes à partir d'un autre classeur Excel

bonjour et merci MJ13

ca marche nickel pour la copie mais une seule fois ,je ne peut pas rapatrier d'autres lignes à la suite !!
la valeur colFin je vait la laisser défini mais la valeur ligne est défini à 2 alors que celle ci varie par rapport aux fichiers distants


Merci d'avance !!!
 

MJ13

XLDnaute Barbatruc
Re : Copier des lignes à partir d'un autre classeur Excel

Re

Après avoir défini Derl, tu peux définir Ligne=derl-1.

Puis mettre Ligne=Ligne+1 en commentaire avec un quote.

Enfin pour le msgbox, le symbole de concaténatioin en VBA est le &. Ce qui donnerait:


Code:
MsgBox (ligne & " lignes copiées")
 

yakin78

XLDnaute Junior
Re : Copier des lignes à partir d'un autre classeur Excel

Bonjour MJ13

ca marche Nickel ,mais quand j'ouvre un autre fichier il ecrase les precedentes ,au lieu de le mettre à la suite
merci !!

Code:
Sub Transfert()
' Déclaration des variables
    Application.ScreenUpdating = False
    Dim ligne As Integer
    Dim i As Integer
    Dim derl As Integer
       
              
    ColFin = 17
     cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsx), *.xlsx")
            
           ' Si on clique sur Annuler dans la fenêtre, on sort de la boucle
        If cheminfichier = False Then
        
            ThisWorkbook.Save
            ThisWorkbook.Close
            Application.Quit
       
        End If
       
        '       Ouverture du classeur source
        Workbooks.Open (cheminfichier)
         
        ' Récupération du nom du classeur + extension
        For i = Len(cheminfichier) To 1 Step -1
            If Mid(cheminfichier, i, 1) = "\" Then Exit For
        Next
        nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))
          'Stop
        derl = Cells(65536, 1).End(xlUp).Row
        derldest = Workbooks(ThisWorkbook.Name).Sheets("commande").Cells(65536).End(xlUp).Row + 1
        ActiveSheet.Range(Cells(2, 1), Cells(derl, ColFin)).Copy Destination:=Workbooks(ThisWorkbook.Name).Sheets("commande").Range("A" & derldest)
                    
                       
        ' Fermeture du classeur source
        Workbooks(nomfichier).Close 0
         
        ' Incrémentation du numéro de ligne
        ligne = derl - 1
        
        Application.ScreenUpdating = True
       MsgBox (ligne & " lignes copiées")
End Sub
 

Pièces jointes

  • Fichier distant2.xlsx
    10.2 KB · Affichages: 27
  • Fichier distant.xlsx
    9.9 KB · Affichages: 24
  • Import Fichiers2.xlsm
    23 KB · Affichages: 29
  • Fichier distant2.xlsx
    10.2 KB · Affichages: 26
  • Fichier distant.xlsx
    9.9 KB · Affichages: 22
  • Import Fichiers2.xlsm
    23 KB · Affichages: 22
  • Fichier distant2.xlsx
    10.2 KB · Affichages: 24
  • Fichier distant.xlsx
    9.9 KB · Affichages: 22
  • Import Fichiers2.xlsm
    23 KB · Affichages: 17

yakin78

XLDnaute Junior
Re : Copier des lignes à partir d'un autre classeur Excel

Super ca marche nickel !!

Je joints les fichiers finalisés si ca peut servir à quelqu'un !!!:D
 

Pièces jointes

  • Fichier distant.xlsx
    9.9 KB · Affichages: 34
  • Import Fichiers.xlsm
    22.1 KB · Affichages: 26
  • Fichier distant2.xlsx
    10.2 KB · Affichages: 23
  • Fichier distant.xlsx
    9.9 KB · Affichages: 28
  • Import Fichiers.xlsm
    22.1 KB · Affichages: 26
  • Fichier distant2.xlsx
    10.2 KB · Affichages: 26
  • Fichier distant.xlsx
    9.9 KB · Affichages: 31
  • Import Fichiers.xlsm
    22.1 KB · Affichages: 23
  • Fichier distant2.xlsx
    10.2 KB · Affichages: 31

Discussions similaires

Statistiques des forums

Discussions
312 467
Messages
2 088 670
Membres
103 914
dernier inscrit
VAL965698