Modifier adresse fichier dans formule

mcj1997

XLDnaute Accro
Bonjour,

La formule ci-dessous :

=INDEX([mai.xlsx]Objectifs!$A$1:$GR$290;EQUIV(A18;[mai.xlsx]Objectifs!$A:$A;0);$B$1)

me permet d'aller chercher des valeurs, ma demande serait de pouvoir mettre dans la case B3 de mon fichier par exemple le mois du fichier recherché car j'ai un fichier par mois et cela modifierait la formule ci-dessus : exemple pour mon fichier du mois de juin mettre juin en B3 et ma formule ci dessus deviendrait :

=INDEX([juin.xlsx]Objectifs!$A$1:$GR$290;EQUIV(A18;[mai.xlsx]Objectifs!$A:$A;0);$B$1).

Merci d'avance,
 

Modeste

XLDnaute Barbatruc
Bonjour mcj1997,

Ce que tu cherches à faire est possible avec la fonction INDIRECT ... ça donnerait quelque chose comme
Code:
=INDEX(INDIRECT("'["&$B$3&".xlsx]Objectifs'!$A$1:$GR$290");EQUIV(A18;INDIRECT("'["&$B$3&".xlsx]Objectifs'!$A:$A");0))
... Pas pu tester, puisque pas de fichier joint ...
MAIS l'utilisation de cette fonction implique que le fichier cible (ici, mai.xlsx) soit ouvert. Si ça convient, tant mieux, teste la formule proposée. Dans le cas contraire, renseigne-toi sur une macro complémentaire nommée morefunc qui propose, une fois le complément installé, une fonction INDIRECT.EXT
Une dernière solution serait de modifier le nom du fichier dans ta formule par macro, au moment où tu changes le mois en B3 ... pour ça, un petit bout de fichier permettrait de t'expliquer la manip de manière précise.
 

Modeste

XLDnaute Barbatruc
Re-bonjour,
Salut chris :)


INDIRECT ne marche pas sur classeur fermé.
Reste l'addon MOREFUNC ou VBA
Je suis content de voir qu'on dit la même chose ;)
On peut espérer que mcj1997, après un peu plus de 7 heures a lu les deux phrases dans mon message!?
Reste à découvrir ce que veut dire le "ça ne fonctionne pas" un message d'erreur apparaît, les résultats sont erronés, rien ne se passe, etc.


je suis preneur pour une solution,
Mmmmh ... et faire un effort pour lire l'entièreté des messages et livrer un bout de fichier comme demandé, tu serais disposé aussi à consentir cet effort?
 

mcj1997

XLDnaute Accro
Je viens de faire des nouveaux fichiers simplifiés afin de les joindre, le fichier avec formules est celui nommé "tableau recap".

Merci d'avance,
 

Pièces jointes

  • juin.xlsx
    8.1 KB · Affichages: 22
  • tableau recap.xlsx
    9.9 KB · Affichages: 36
  • juin.xlsx
    8.1 KB · Affichages: 23
  • mai.xlsx
    8 KB · Affichages: 24

Modeste

XLDnaute Barbatruc
Bonsoir,

À tester ... dans le fichier transmis (et avec les fichiers mai et juin fournis en exemple).

Clic droit sur l'onglet de la feuil1 du fichier récap et dans la fenêtre qui s'affiche, coller ce qui suit:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$B$3" Then
    If Target = "" Then [B4] = "": Exit Sub
    If [B1] = "" Then MsgBox "Renseigner B1": [B4] = "": Exit Sub
    chemin = "C:\Users\Jacky\Desktop\excel\" 'à adapter, le cas échéant
    derligne = Cells(Rows.Count, 1).End(xlUp).Row
    Application.EnableEvents = False
    [B4].Resize(derligne - 3, 1).FormulaLocal = "=INDEX('" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A$1:$GR$290;EQUIV(A4;'" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A:$A;0);$A$1)"
    Application.EnableEvents = True
End If
End Sub

... Modifier ensuite le contenu de B3
 

mcj1997

XLDnaute Accro
Bonsoir,

À tester ... dans le fichier transmis (et avec les fichiers mai et juin fournis en exemple).

Clic droit sur l'onglet de la feuil1 du fichier récap et dans la fenêtre qui s'affiche, coller ce qui suit:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$B$3" Then
    If Target = "" Then [B4] = "": Exit Sub
    If [B1] = "" Then MsgBox "Renseigner B1": [B4] = "": Exit Sub
    chemin = "C:\Users\Jacky\Desktop\excel\" 'à adapter, le cas échéant
    derligne = Cells(Rows.Count, 1).End(xlUp).Row
    Application.EnableEvents = False
    [B4].Resize(derligne - 3, 1).FormulaLocal = "=INDEX('" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A$1:$GR$290;EQUIV(A4;'" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A:$A;0);$A$1)"
    Application.EnableEvents = True
End If
End Sub

... Modifier ensuite le contenu de B3


Cela ne fonctionne pas, dans la ligne ci-dessous, j'ai oté Objectifs mais cela ne change pas.

[B4].Resize(derligne - 3, 1).FormulaLocal = "=INDEX('" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A$1:$GR$290;EQUIV(A4;'" & chemin & "[" & [B3] & ".xlsx]Objectifs'!$A:$A;0);$A$1)"
Application.EnableEvents = True
 

mcj1997

XLDnaute Accro
Re,

Tu as ôté "Objectifs" et mis "Feuil1" à la place les deux fois? ... parce que chez moi ça fonctionne!?

Précise ce qui ne fonctionne pas.

J'ai mis exactement la formule ci-dessous, il ne se passe rien je n'ai pas de message d'erreur :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$B$3" Then
If Target = "" Then [B4] = "": Exit Sub
If [B1] = "" Then MsgBox "Renseigner B1": [B4] = "": Exit Sub
chemin = "C:\Users\Jacky\Desktop\excel\" 'à adapter, le cas échéant
derligne = Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
[B4].Resize(derligne - 3, 1).FormulaLocal = "=INDEX('" & chemin & "[" & [B3] & ".xlsx]Feuil1'!$A$1:$GR$290;EQUIV(A4;'" & chemin & "[" & [B3] & ".xlsx]Feuil1'!$A:$A;0);$A$1)"
Application.EnableEvents = True
End If
End Sub
 

mcj1997

XLDnaute Accro
Je viens de tout fermer et enregistrer et en rouvrant le fichier j'ai eu un message de renseigner B1, j'ai mis juin dedans et maintenant ça fonctionne en sélectionnant le mois voulu en B3, c'est parfait, par contre pourquoi faut il une valeur en B1 ?
 

Modeste

XLDnaute Barbatruc
Tu n'as pas de message d'erreur, mais la formule s'inscrit bien en B4 et en-dessous?
Place le curseur dans la première ligne de code (If Target.Count>1 Then ...) et appuie sur F9. Un point rouge apparaît devant la ligne. Change le contenu de B3 dans la feuille ... que se passe-t-il?

 

Modeste

XLDnaute Barbatruc
Je viens seulement de lire ton dernier message. La référence à B1 est un vestige de ta première demande où B1 figurait à la fin de ta formule. Dans ton fichier je suppose que c'est devenu A1!?
Cette version (à la place de la précédente) efface les formules si B3 ou A1 sont vides:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$B$3" Then
    derligne = Cells(Rows.Count, 1).End(xlUp).Row
    Set plage = [B4].Resize(derligne - 3, 1)
    If Target = "" Then plage.Value = "": Exit Sub
    If [A1] = "" Then MsgBox "Renseigner A1": plage.Value = "": Exit Sub
    chemin = "C:\Users\Jacky\Desktop\excel\"
    Application.EnableEvents = False
    plage.FormulaLocal = "=INDEX('" & chemin & "[" & [B3] & ".xlsx]Feuil1'!$A$1:$GR$290;EQUIV(A4;'" & chemin & "[" & [B3] & ".xlsx]Feuil1'!$A:$A;0);$A$1)"
    Application.EnableEvents = True
End If
End Sub

Bonne nuit!
 

Discussions similaires

Statistiques des forums

Discussions
314 200
Messages
2 107 116
Membres
109 754
dernier inscrit
agaderm