XL 2019 formule dyamique

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ESCOUGER2022

XLDnaute Junior
Bonsoir,
Dans une cellule (G2), j'ai construit le nom d'un fichier et le nom d'une cellule de ce même fichier
Dans une autre cellule (H2) je voudrais aller chercher la valeur de cette cellule dans le fichier dont le nom est dans G2
Voyez ce que j'ai fait, qui ne fonctionne pas.
Est-ce seulement possible de faire cela ?
Merci de votre aide
 

Pièces jointes

Solution
Une autre solution dans ce fichier (3) avec une fonction VBA qui utilise la méthode ADO :
VB:
Function Resu(chemin$, fichier$, nom$)
Dim cn As Object, rs As Object
fichier = chemin & fichier
Set cn = CreateObject("ADODB.Connection")
cn.Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
Set rs = cn.Execute("SELECT * FROM [" & nom & "]")
Resu = rs.Fields.Item(0)
rs.Close
cn.Close
End Function
Ce code doit être placé impérativement dans un module standard.

Formule en F2 =Resu(B2;C2&D2;E2)

A+
Créez le dossier C:\CVS et mettez-y le fichier source 20220105_RM1.xlsm joint.

Voyez le fichier SUIVI(1).xlsm et la macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
Set R = Intersect(R, UsedRange.Offset(1))
If R Is Nothing Then Exit Sub
Set R = R.EntireRow
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
For Each R In R 'si entrées ou effacements multiples
    R.Cells(6) = "='" & R.Cells(2) & R.Cells(3) & R.Cells(4) & "'!" & R.Cells(5) 'formule de liaison
    If Err Then R.Cells(6) = "": Err = 0
Next
Application.EnableEvents = True
End Sub
Elle se déclenche quand on modifie une cellule quelconque.

A+
 

Pièces jointes

Dernière édition:
Bonjour soan,
Probablement je n'ai pas été suffisamment clair dans ma demande.

La formule ="['["&B2&E2&F2&"_RM1.xlsm]"&"NombreDeMarcheurs'!D5]" donne le résultat
['[20220105_RM1.xlsm]NombreDeMarcheurs'!D5]

1) 20220105_RM1 est le nom du tableau
2) "Rando " est le nom de la feuille (que j'avais oublié de préciser!)
3) "NombreDeMarcheurs" est le nom de la cellule à récupérer

4)
Ce que souhaiterais serait que le contenu de la cellule nommée NombreDeMarcheurs du tableau "20220105_RM1.xlsm" dans la feuille nommée "Rando " se retrouve en G2.
En l'occurrence c'est celle qui figure en H2 en assignant directement le tableau dans la formule soit la valeur 42.

J'espère avoir été plus clair cette fois

Merci
 
Une variante : placez les 2 fichiers joints dans le même dossier (par exemple le bureau).

La macro entre d'abord le chemin en colonne B :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
Set R = Intersect(R, UsedRange.Offset(1))
If R Is Nothing Then Exit Sub
Set R = R.EntireRow
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
For Each R In R 'si entrées ou effacements multiples
    R.Cells(2) = ThisWorkbook.Path & "\" 'chemin
    R.Cells(6) = "='" & R.Cells(2) & R.Cells(3) & R.Cells(4) & "'!" & R.Cells(5) 'formule de liaison
    If Err Then R.Cells(6) = "": Err = 0
Next
Application.EnableEvents = True
End Sub
 

Pièces jointes

Une autre solution dans ce fichier (3) avec une fonction VBA qui utilise la méthode ADO :
VB:
Function Resu(chemin$, fichier$, nom$)
Dim cn As Object, rs As Object
fichier = chemin & fichier
Set cn = CreateObject("ADODB.Connection")
cn.Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
Set rs = cn.Execute("SELECT * FROM [" & nom & "]")
Resu = rs.Fields.Item(0)
rs.Close
cn.Close
End Function
Ce code doit être placé impérativement dans un module standard.

Formule en F2 =Resu(B2;C2&D2;E2)

A+
 

Pièces jointes

Bonjour soan,
Probablement je n'ai pas été suffisamment clair dans ma demande.

La formule ="['["&B2&E2&F2&"_RM1.xlsm]"&"NombreDeMarcheurs'!D5]" donne le résultat
['[20220105_RM1.xlsm]NombreDeMarcheurs'!D5]

1) 20220105_RM1 est le nom du tableau
2) "Rando " est le nom de la feuille (que j'avais oublié de préciser!)
3) "NombreDeMarcheurs" est le nom de la cellule à récupérer

4)
Ce que souhaiterais serait que le contenu de la cellule nommée NombreDeMarcheurs du tableau "20220105_RM1.xlsm" dans la feuille nommée "Rando " se retrouve en G2.
En l'occurrence c'est celle qui figure en H2 en assignant directement le tableau dans la formule soit la valeur 42.

J'espère avoir été plus clair cette fois

Merci
Bonsoir,
Merci beaucoup job75 c'est exactement ce que je voulais réaliser.
Vu la solution proposée, j'aurais été bien incapable de la trouver!
Je vais m'en inspirer pour d'autres réalisations pour éviter au maximum de mettre "en dur" dans des formules des noms de fichiers dans lesquels je veux récupérer des données.
Je pense notamment à des instructions type "RechercheV ou H".
Cordialement,
Escouger2022
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
281
Réponses
18
Affichages
183
Réponses
4
Affichages
199
Retour