J'avoue que j'ai des questions mais seulement pour bien comprendre ton code (après je ne t'embête plus et je te remercie vraiment de m'avoir accorder tant de temps et de patience) :
1) Ici tu ouvres la procédure "Import()" et tu déclares les variables chemin fichier comment un "tout type", WBsource comme un classeur/objet, WBdest comme un classeur/objet, DerLig comme une variable numérique et LigImport comme une variable numérique.
Sub Import()
Dim cheminfichier As Variant, WBsource As Workbook, WBdest As Workbook, DerLig As Long, LigImport As Long
2) Ici tu associes à la variable WBdest (avec un Set car c'est un type d'objet qui ne stocke pas de valeur) ce classeur ci en disant "ThisWorkbook".
3)Tu ouvres ensuite la procédure with qui concerne tout ce qui va se trouver dans la feuille 1 de ce classeur (classeur actif).
4)Tu affectes, à la variable DerLig, une commande qui va calculer dans la colonne "A" le nombre de lignes (rows.count) et remonte jusqu'à la cellule indiquée pour remonter jusqu'à la dernière cellule non vide (en(xlUp) et compte une ligne de plus pour insérer dans la première cellule vide.
Je ne suis pas sure pour End(xlUp) c'est bien ça ?
5) Puis tu fermes la procédure.
'On affecte le classeur actif à un nom, pour pouvoir y revenir facilement
Set WBdest = ThisWorkbook
With WBdest.Sheets("Feuil1")
DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première ligne vide de la feuille
End With
6) Ici tu associes à la variable "cheminfichier" l'instruction d'ouvrir une fenêtre qui nous permet d'aller chercher un fichier de type Excel dans notre ordinateur.
' Sélection du classeur source à partir d'une fenêtre
cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsm), *.xlsm")
7) Ici tu ouvres l'extraction/la source que l'on exporte dans notre classeur
Cette ligne ne fonctionne pas quand j'exécute ma macro (peut-être que c'est parce que j'ai mal modifié mes noms de feuilles avant).
'Ouverture du classeur source, que l'on affecte à un objet classeur
Set WBsource = Workbooks.Open cheminfichier
8) Ici tu ouvres une procédure qui concerne la feuille 1 du classeur source.
9) Tu associes à LigImport une commande qui va calculer dans la colonne "A" le nombre de lignes (rows.count) et remonte jusqu'à la cellule indiquée pour remonter jusqu'à la dernière cellule non vide (en(xlUp) et va importer les données de la source dans la première cellule vide. Est-ce bien ça ?
10) Puis tu va chercher les valeurs des cellules de A2:AK pour les exporter vers le classeur actif représenté par WBdest.
11) Tu fermes la procédure.
12) Tu fermes la procédure.
'Report des valeurs
With WBsource.Sheets(1)
LigImport = .Range("A" & .Rows.Count).End(xlUp).Row 'Détermine la dernière ligne de l'import
WBdest.Range("A" & DerLig & ":AK" & DerLig + LigImport).Value = .Range("A2:AK" & LigImport).Value
End With
End Sub
Si par exemple je veux que le code aille chercher la feuille 2 plutôt que la feuille 1, est-ce que je peux faire ça :
With WBsource.Sheets(2)