XL 2019 formule dyamique

ESCOUGER2022

XLDnaute Nouveau
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

  • SUIVI.xlsm
    25.6 KB · Affichages: 16
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+

job75

XLDnaute Barbatruc
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

  • 20220105_RM1.xlsm
    8.4 KB · Affichages: 4
  • SUIVI(1).xlsm
    19.6 KB · Affichages: 7
Dernière édition:

ESCOUGER2022

XLDnaute Nouveau
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
 

job75

XLDnaute Barbatruc
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

  • 20220105_RM1.xlsm
    8.4 KB · Affichages: 0
  • SUIVI(2).xlsm
    18.8 KB · Affichages: 0

job75

XLDnaute Barbatruc
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

  • 20220105_RM1.xlsm
    8.4 KB · Affichages: 2
  • SUIVI(3).xlsm
    18.8 KB · Affichages: 5

ESCOUGER2022

XLDnaute Nouveau
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
 

Discussions similaires

Réponses
5
Affichages
245

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG