Référence variable dans une formule - INDEX
Bonjour,
Je rencontre un problème que j'aimerai solutionner (avec votre aide) sans forcément faire une macro.
Je souhaiterai pouvoir changer automatiquement une référence de fichier dans une formule.
Ex :
=index('/fichier1/[feuille1]!$A1:X200;equiv(A1;'/fichier1/[feuille1]!H:H;0);3)
En fait si "fichier1" est mis à jour ailleurs et se nomme "fichier2", j'aimerai faire appelle a lui sans faire de fonction rechercher/remplacer.
Le fichier en question est seul dans un dossier dont son nom ne varie pas.
J'ai une solution plus simple mais qui ne me satisfait pas, c'est de faire appelle à ce fichier qui ne variera pas et qui fera appelle avec un simple "=" au fichier qui variera.
Je ne sais pas si je suis suffisement clair n'hésitez pas a me faire un retour.
Pour ceux qui ont une réponse, je suis tout ouïe !!!
++
Bonsoir,
tournez vous vers la fonction INDIRECT.
cela vous conviendra peut-être
@ bientôt
LouReeD
Bonjour,
Merci pour ta réponse.
Voila maintenant 1h que je scrute les tutos de cette fonction.
Pour le meme classeur j'ai réussi.
Des que je prends une référence exterieur, j'ai droit à #REF!....
En cellule A1 = l'emplacement de mon fichier ('H:\00_SUIVI\[test.xlsx]test1'!)
En cellule C4 = INDIRECT(A1&"$A$6")
En cellule A6 du classeur Test, feuille test1
Je pense qu'il y a quelque chose que je ne fais pas bien mais quoi...?
en relisant ma question de base je rectifie deux choses:
- la "solution plus simple" dont je parle est con, car je devrai effectuer les mêmes modifications avec la fonction rechercher/remplacer donc caduc !;
- "en fait si "fichier1" est mis à jour ailleurs et se nomme "fichier2"" : le "fichier2" écrasera le "fichier1", car ils sont extraits d'une plateforme.
Voila, si il existe d'autre solution n'hésitez pas.
Merci LouReeD!!
Bonjour,
Il me semble que INDIRECT ne supporte pas les fichiers fermés. Donc solution ouvrir le fichier, prendre la donnée et refermer le fichier.
Sinon il faut faire appel à des "pro" d'excel... Moi je suis plutôt mono classeur au niveau connaissances...
@ bientôt
LouReeD
Bonjour,
Merci, on a fini par faire de la macro...
Pour info, je voulais appliquer cette formule :
=SIERREUR(INDEX('D:\Documents\[Livrables_20190510204454_19834.xlsx]Résultat d''export d''une liste'!$A$1:$X$10000;EQUIV(R12;'D:\Documents\[Livrables_20190510204454_19834.xlsx]Résultat d''export d''une liste'!$Q:$Q;0);4);"")
ci dessous la macro :
Sub Ouvrir_excel_Livrables()
'
' Ouvrir_excel_Livrables Macro
'
Application.Calculation = xlManual
nom_excel = ThisWorkbook.Name
Dim array_() As String
Dim array_nom_fichiers() As String
Dim array_date_fichiers() As Double
Dim array_GED() As String
ReDim array_nom_fichiers(100)
ReDim array_date_fichiers(100)
dossier_ = "D:\Documents"
i = 1
'nf = Dir(ThisWorkbook.Sheets("Feuil1").Range("I1").Value & "\*")
'Do While nf <> ""
'ThisWorkbook.Sheets("Feuil1").Cells(i, 1) = nf
'nf = Dir
'i = i + 1
'Loop
nf = Dir(dossier_ & "\*")
Do While nf <> ""
array_() = Split(nf, "_")
If array_(0) = "Livrables" Then
array_nom_fichiers(i) = nf
array_date_fichiers(i) = array_(1)
k = k + 1
End If
nf = Dir
i = i + 1
Loop
For i = 1 To k
date_fichier = array_date_fichiers(i)
If date_fichier > date_fichier_ant Then
date_fichier = date_fichier
imax = i
Else
date_fichier = date_fichier_ant
imax = i_ant
End If
date_fichier_ant = date_fichier
i_ant = i
Next
nom_fichier = array_nom_fichiers(imax)
Workbooks.Open Filename:=dossier_ & "\" & nom_fichier
nb_gesdoc = Workbooks(nom_excel).Worksheets("Données.dat").Range("B22") - Workbooks(nom_excel).Worksheets("Données.dat").Range("B21")
For k = 1 To 1000000
If Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("A" & k + 1) = "" Then
Exit For
End If
Next
nb_MZ = k
For i = 1 To nb_gesdoc - 1
CIE_gesdoc = Workbooks(nom_excel).Worksheets("Liste des données de sortie").Range("R" & i + 11)
For j = 1 To nb_MZ
CIE_MZ = Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("Q" & j + 1)
If CIE_gesdoc = CIE_MZ Then
Workbooks(nom_excel).Worksheets("Liste des données de sortie").Range("AJ" & i + 11) = Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("B" & j + 1)
Workbooks(nom_excel).Worksheets("Liste des données de sortie").Range("AK" & i + 11) = Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("D" & j + 1)
array_GED() = Split(Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("A" & j + 1), "_")
Workbooks(nom_excel).Worksheets("Liste des données de sortie").Range("AM" & i + 11) = "'" & array_GED(4)
Workbooks(nom_excel).Worksheets("Liste des données de sortie").Range("AN" & i + 11) = Workbooks(nom_fichier).Worksheets("Résultat d'export d'une liste").Range("C" & j + 1)
Exit For
End If
Next
Next
Workbooks(nom_fichier).Close SaveChanges:=False
Application.Calculation = xlAutomatic
End Sub
Bonne continuation a vous et merci pour vos interventions!
Bonjour,
Merci @ vous pour ce retour
Ce que vous pouvez faire pour une lecture plus aisée de votre code, c'est d'éditer votre message, de sélectionner votre code et de cloquer sur l'icône "code" [</>] afin que ce dernier s'affiche comme tel dans le message.
@ bientôt
LouReeD