Faire référence à un autre classeur en fonction d'une cellule
Bonjour à tous,
Mon titre est assez peu évocateur, désolé...
Je travaille sous excel2016
En fait chaque mois, je reçois un fichier "XXXX 01_2016" pour janvier 2016, "XXX 12_2017" pour décembre 2017.
Du coup mes fichiers sont tous sous ce format la : "XXX MM_AAAA".
Dans ces fichiers, 2 onglets m’intéressent : Onglet 1, Onglet 2. Toujours sous le même format de mois en mois :
Date - Info1 -Info2- Info3
Ils sont classés dans des dossiers annuels sous C:\Users\ecussac\Desktop\XXXX\XXXX AAAA\[XXXX MM_AAAA.xlsx]
Dans un fichier de suivi, je souhaite retrouver les informations des "Onglet 1" et "Onglet 2".
Dans ce fichier de suivi, j'ai donc le format suivant :
Date - Info1 - Info2 - Info3
Bon je pourrais tout à fait garder le process actuel qui est de faire un un lien vers la cellule, et de tirer.... Mais ça ne me plait pas, car ce ne sera plus à moi de le faire, et le risque d'erreru est encore un peu trop élevé...
Actuellement dans ma ligne 1er janvier 2018 pour l'info 1 , j'ai :
=+'C:\Users\ecussac\Desktop\XXXX\XXXX 2018\[XXXX 01_2018.xlsx]Onglet1'!B3
La colonne B est donc la colonne dans mon fichier mensuel, ou se trouve mon info1.
Existe t'il un moyen de faire ainsi :
Colonne A Colonne B(Info1)
Ligne 1 01/01/2018 +.....\XXXX\XXX ANNEE(A1)\[XXXX MOIS(A1)_ANNEE(A1).xlsx]Onglet1'!INDEX(EQUIV(ONGLET1;A1;ligne; colonne))
Evidemment je n'ai pas mis la fonction concatener ici, pour ne pas alourdir mon explication...
Si quelqu'un m'a compris, et peut m'aider
Merci d'avance !!!
Bonjour,
ÉDIT: attention j'ai oublié de renommer le ficher pour le mois 02
voici un exemple, je l'ai testé sur xl2010,
pour vérifier le test, j'ai ajouté des données su le fichier XXXX 02_2018.xlsx
Sub test_lire_fichier_fermé()
Dim Fich As String, rep As String, FeuilSource As String, destination As String, f As Integer
For f = 1 To 2
rep = Sheets("rep et fichier").Range("B1")
Fich = Sheets("rep et fichier").Range("B2")
FeuilSource = "Onglet" & f
Select Case f
Case 1:
destination = Sheets("temp").Range("A" & Sheets("temp").Cells(Rows.Count, 1).End(xlUp).Row).Address
Case 2:
destination = Sheets("temp").Range("D" & Sheets("temp").Cells(Rows.Count, 4).End(xlUp).Row).Address
End Select
LireCellule rep, Fich, FeuilSource, destination
Next f
With Sheets("Feuil1")
Sheets("temp").Range("A2:C" & Sheets("temp").Cells(Rows.Count, 1).End(xlUp).Row).Copy .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1)
Sheets("temp").Range("E2:E" & Sheets("temp").Cells(Rows.Count, 5).End(xlUp).Row).Copy .Range("D" & .Cells(Rows.Count, 4).End(xlUp).Row + 1)
End With
Sheets("temp").Cells.ClearContents
End Sub
'nécessite d'activer la référence: Microsoft ActiveX Data Objects xx Library
Function LireCellule(repertoire As String, fichier As String, Feuille As String, dest As String)
Set cnn = New ADODB.Connection
'--- Connexion ---
With cnn
.Provider = "Microsoft.Jet.OLEDB.12.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& repertoire & "\" & fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
'--- récupérer les données --
Set rs = cnn.Execute("SELECT * FROM [" & Feuille & "$" & cellule & "]")
Sheets("temp").Range(dest).CopyFromRecordset rs
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End FunctionBonjour.
Merci beaucoup !!!
Je ne comprends absolument rien au macro mais ça marchera !
Du peu que j'ai compris :
Dans l'onglet rep et fichier je mets toutes mes dates en colonne A et le fichier d'origine en colonne B.
Attention l'adresse du fichier source va changer en passant à 2019, et n'était pas la même en 2017... Donc j'ai l'impression que ça va être problématique.
Ai je vu juste !?
Je suis sur mon téléphone je test sur mon pc cet aprem.
Encore merci.
Voici une autre alternative,
Bonjour,
j'ai regardé les fichiers que vous m'avez donné.
Merci beaucoup.
Cependant je pense que je me suis mal exprimé.
En fait dans l'onglet récapitulatif, je veux tous les jours depuis mars 2016, et non un jour que je choisi dans l'onglet rep et fichier.
donc l'idée c'est ca :
01/03/2016
... VA ME CHERCHER LES INFOS DANS C:\Users\ecussac\Desktop\XXXX\XXXX 2016\XXXX 03_2016
30/03/2016
01/02/2018
... VA ME CHERCHER LES INFOS DANS C:\Users\ecussac\Desktop\XXXX\XXXX 2018\XXXX 02_2018
En image, le tableau final tel que je l'ai avec ma méthode actuelle : tirer mon lien +C:user\......\XXXX 2016\[XXXX 03_2016.xlsx]....
et changer 2016 par 2017, et/ou changer le mois...
Les colonnes avec en tête rouge, sont juste des vérifications d'incohérence dans les fichiers initiaux...
Bonjour,
j'ai mis des données dans le fichier exemple, car dans le fichier que vous avez transmis il n'y en avait pas.