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

Rechercher des sujets similaires à "reference variable formule index"