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

Copier des lignes à partir d'un autre classeur Excel

  • Initiateur de la discussion Initiateur de la discussion yakin78
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Y

yakin78

Guest
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

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:
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😱). 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
 
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

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 🙂.
 
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
 
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
 
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 !!!
 
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")
 
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

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

Re

Au temps pour moi 😱:

Remplace par ce code:

Code:
derldest = Workbooks(ThisWorkbook.Name).Sheets("commande").Range("A65536").End(xlUp).Row + 1
 
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 !!!😀
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…