Récupérer les données provenant d'un autre fichier

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 !

ozone083

XLDnaute Junior
Bonjour,

J'ai un fichier source, A, dans lequel je souhaite créer une macro qui récupère les données d'un autre fichier B.
Le chemin d'accès de ce fichier B sera à préciser via l'ouverture d'une boite de dialogue.
Il faudra ensuite copier les valeurs du fichier B onglet Feuil1 dans un onglet précis du fichier A

Renouveler l'opération pour un 2ème fichier C, dont les données seront à copier dans un autre onglet du fichier A
(toujours en demandant le chemin d'accès).

Auriez vous une idée du code ?

Pour préciser le chemin d'accès la commande Application.GetOpenFilename semble être celle à utiliser.
Mais c'est ensuite que je ne sais pas trop comment faire.

Merci
 
Re : Récupérer les données provenant d'un autre fichier

[Bonjour

Voici un code trouvé sur un autre forum (gcexcel.com) et que j'ai essayé d'adapter à mon besoin

Sub Test()
Dim wbRecap As Workbook 'fichier recap
Dim wsRecap As Worksheet 'feuille où on écrit les données
Dim wbSource As Workbook 'fichier à ouvrir
Dim wsSource As Worksheet 'feuille où on cherche les données
Dim DernLign As Integer 'ligne où on écrit les données
Dim vFichiers As Variant 'noms des fichiers
Dim i As Integer, k As Integer
Dim rgRecap As Range 'plage où on copie les données

Set wbRecap = ThisWorkbook 'Fichier récapitulatif
Set wsRecap = wbRecap.Sheets("TK") 'on écrit dans la feuille nommée TK du fichier récapitulatif

' --- Ouvrir boite de dialogue pour sélectionner les fichiers à ouvrir
vFichiers = Selectionner_Fichiers("Sélectionner les fichiers à compiler") 'Appel de Fonction pour ouvrir fichiers

' --- Vérifier qu'au moins un fichier à été sélectionné
If Not IsArray(vFichiers) Then
Debug.Print "Aucun fichier sélectionné."
MsgBox "Erreur! Aucun/Mauvais fichier sélectionné."
Exit Sub
End If
On Error Resume Next

Application.ScreenUpdating = False

' --- Boucle à travers les fichiers
For k = 1 To UBound(vFichiers)
Application.StatusBar = ">> Lecture du fichier #" & k & "/" & UBound(vFichiers)

' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' C'est ici qu'on écrit les instructions
Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier
Set wsSource = wbSource.Sheets(1) 'On copie les données de la feuille 1
'DernLign = wbRecap.Sheets(1).Range("A60000").End(xlUp).Row + 1 'ligne pour écrire le log des fichiers compilés

' - On copie les données vers le fichier Recapitulatif; à adapter
Set rgRecap = wsRecap.Range("A65000").End(xlUp).Offset(1, 0)
'rgRecap = Time
With wsSource
'On recopie des valeurs du fichier B dans un tableau du fichier A, onglet TK
rgRecap.Offset(-45, 3) = .Range("D11")
rgRecap.Offset(-45, 4) = .Range("E11")
rgRecap.Offset(-44, 3) = .Range("D12")
rgRecap.Offset(-44, 4) = .Range("E12")
rgRecap.Offset(-43, 3) = .Range("D13")
rgRecap.Offset(-43, 4) = .Range("E13")
rgRecap.Offset(-42, 3) = .Range("D14")
rgRecap.Offset(-42, 4) = .Range("E14")
rgRecap.Offset(-41, 3) = .Range("D15")
rgRecap.Offset(-41, 4) = .Range("E15")
rgRecap.Offset(-40, 3) = .Range("D16")
rgRecap.Offset(-40, 4) = .Range("E16")
rgRecap.Offset(-39, 3) = .Range("D17")
rgRecap.Offset(-39, 4) = .Range("E17")
rgRecap.Offset(-38, 3) = .Range("D18")
rgRecap.Offset(-38, 4) = .Range("E18")
rgRecap.Offset(-37, 3) = .Range("D19")
rgRecap.Offset(-37, 4) = .Range("E19")
rgRecap.Offset(-36, 3) = .Range("D20")
rgRecap.Offset(-36, 4) = .Range("E20")
rgRecap.Offset(-35, 3) = .Range("D21")
rgRecap.Offset(-35, 4) = .Range("E21")
rgRecap.Offset(-34, 3) = .Range("D22")
rgRecap.Offset(-34, 4) = .Range("E22")
rgRecap.Offset(-33, 3) = .Range("D23")
rgRecap.Offset(-33, 4) = .Range("E23")
rgRecap.Offset(-32, 3) = .Range("D24")
rgRecap.Offset(-32, 4) = .Range("E24")
'rgRecap.Offset(-31, 3) = .Range("D25")
' rgRecap.Offset(-31, 4) = .Range("E25")
rgRecap.Offset(-30, 3) = .Range("D26")
rgRecap.Offset(-30, 4) = .Range("E26")
rgRecap.Offset(-29, 3) = .Range("D27")
rgRecap.Offset(-29, 4) = .Range("E27")
' rgRecap.Offset(-28, 3) = .Range("D28")
' rgRecap.Offset(-28, 4) = .Range("E28")
rgRecap.Offset(-27, 3) = .Range("D29")
rgRecap.Offset(-27, 4) = .Range("E29")
rgRecap.Offset(-26, 3) = .Range("D30")
rgRecap.Offset(-26, 4) = .Range("E30")
rgRecap.Offset(-25, 3) = .Range("D31")
rgRecap.Offset(-25, 4) = .Range("E31")
rgRecap.Offset(-24, 3) = .Range("D32")
rgRecap.Offset(-24, 4) = .Range("E32")
rgRecap.Offset(-23, 3) = .Range("D33")
rgRecap.Offset(-23, 4) = .Range("E33")
rgRecap.Offset(-22, 3) = .Range("D34")
rgRecap.Offset(-21, 4) = .Range("E34")
rgRecap.Offset(-21, 3) = .Range("D35")
rgRecap.Offset(-20, 4) = .Range("E35")
rgRecap.Offset(-20, 3) = .Range("D36")
rgRecap.Offset(-19, 4) = .Range("E36")
rgRecap.Offset(-18, 3) = .Range("D37")
rgRecap.Offset(-18, 4) = .Range("E37")
rgRecap.Offset(-17, 3) = .Range("D38")
rgRecap.Offset(-17, 4) = .Range("E38")
'rgRecap.Offset(-16, 3) = .Range("D39")
'rgRecap.Offset(-15, 4) = .Range("E39")
rgRecap.Offset(-15, 3) = .Range("D40")
rgRecap.Offset(-14, 4) = .Range("E40")
rgRecap.Offset(-14, 3) = .Range("D41")
rgRecap.Offset(-13, 4) = .Range("E41")
rgRecap.Offset(-12, 3) = .Range("D42")
rgRecap.Offset(-12, 4) = .Range("E42")
' rgRecap.Offset(-11, 3) = .Range("D43")
' rgRecap.Offset(-11, 4) = .Range("E43")
End With

wbSource.Close 'fermer fichier
Set wbSource = Nothing
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Next k

Application.ScreenUpdating = True
Application.StatusBar = False

Worksheets("TK layer costs").Activate
End Sub

Function Selectionner_Fichiers(sTitre As String) As Variant
Dim sFiltre As String, bMultiSelect As Boolean

sFiltre = "Fichiers XYZ (.xls)(.xlsm), *.xls*"
bMultiSelect = True 'Permet de choisir plusieurs fichiers à la fois
Selectionner_Fichiers = Application.GetOpenFilename(Filefilter:=sFiltre, Title:=sTitre, MultiSelect:=bMultiSelect)
End Function



Questions ; n'y a t il pas un moyen plus court pour faire la recopie des données et éviter toutes ces lignes RgRecap.Offset ?

Le point de départ de la recopie se fait par un incrément négatif à partir du bas du tableau (via la fonction wsRecap.Range("A65000").End(xlUp).Offset(1, 0)) si j'ai bien compris.
Existe t il une formule pour le faire dans l'autre sens, c'est à dire avec un incrément positif en partant de la cellule A;1

Merci
 
Re : Récupérer les données provenant d'un autre fichier

Bonsoir à tous

ozone083
Cette question a été traitée moults fois sur le forum.
En utilisant le moteur de recherche interne du forum, tu devrais trouver de quoi réaliser la macro que tu souhaites
Pour accéder aux archives des discussions, il suffit de cliquer sur la loupe en haut à droite.

Sans oublier de regarder au préalable en bas de page, les cinq discussions similaires.
 
- 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

Discussions similaires

Retour