OVH Cloud OVH Cloud

propriété de la zone de données externe

8 réponses
Avatar
Ma Dalton
Bonjour,

cette fois savoir, j'aimerais savoir s'il y a une propriété qui puisse me dire
le nom du fichier source d'une zone de données externes.

Cela me permettra d'afficher dison en B3, le nom du fichier (ex,
d:\répertoire\source.csv) qui est à l'origine de la zone Range("A10:F20").

Et si possible d'inscrire également en C3, la date de ce fichier externe.

merci

8 réponses

Avatar
AV
cette fois savoir, j'aimerais savoir s'il y a une propriété qui puisse me dire
le nom du fichier source d'une zone de données externes.


Si, par ex., tu as dans une cellule de la feuille un truc du genre :
='D:TEMPMesMacros[MonTruc.xls]Feuil1'!$A$1
Pour récupérer le chemin d'accès de la source (qui est fermée !)
Dans un module ordinaire
(attention aux possibles retours à la ligne intempestifs et aux guillemets !):

Function CHEM(Cel As Range)
x = Chr(34) & Cel.Formula & Chr(34)
CHEM = Evaluate("substitute(substitute(left(" & x & ",find(""]""," & x &
")-1),""='"",""""),""["","""")")
End Function 'AV

Et si possible d'inscrire également en C3, la date de ce fichier externe.


Function DATE_MAJ(Cel As Range)
x = Chr(34) & Cel.Formula & Chr(34)
DATE_MAJ = FileDateTime(Evaluate("substitute(substitute(left(" & x &
",find(""]""," & x & ")-1),""='"",""""),""["","""")"))
End Function 'AV

AV

Avatar
Ma Dalton
Salut Alain,

Si, par ex., tu as dans une cellule de la feuille un truc du genre :
='D:TEMPMesMacros[MonTruc.xls]Feuil1'!$A$1


Malheureusement, c'est pas ce que j'ai. Ma zone de données externe provient
plutôt d'un fichier ".csv" qui est récupéré dans la feuil1 par une requête
MS-Query qui se met à jour lors de chaque ouverture.

Par ailleurs, même sous la forme que tu me le proposes, je n'ai pas réussi à
faire fonctionner correctement. j'ai toujours en résultat, la valeur #NOM?

merci

Avatar
AV
Si, par ex., tu as dans une cellule de la feuille un truc du genre :
='D:TEMPMesMacros[MonTruc.xls]Feuil1'!$A$1
Malheureusement, c'est pas ce que j'ai. Ma zone de données externe provient

plutôt d'un fichier ".csv" qui est récupéré dans la feuil1 par une requête
MS-Query qui se met à jour lors de chaque ouverture.


Ben c'était un exemple évidemment !
A priori, peu importe le type de fichier
La condition nécessaire (que j'avais cru comprendre) est que tu aies une liaison
externe dans une cellule, selon le modèle précédemment indiqué

Par ailleurs, même sous la forme que tu me le proposes, je n'ai pas réussi à
faire fonctionner correctement. j'ai toujours en résultat, la valeur #NOM?


Ca c'est pas normal.... si tu as bien mis la fonction perso dans un module...si
la recopie est correcte...si.......

AV


Avatar
Denis Michon
Bonjour Ma Dalton,

Voici une façon d'extraire le chemin et le nom du fichier source d'un QueryTable et l'inscrire dans une cellule de ton
choix. Attention, tu devras adapter le nom du Query et des feuilles de la procédure.

Extraire le chemin et le nom
'------------------------------
Sub Extraire_chemin_et_nom_QueryTable ()

Dim A As String, B As String
Dim Con As String, C As String

'A déterminer Nom feuille où est le queryTable
'A déterminer le Nom ou l'index du querytable
With Worksheets("Feuil2").QueryTables(1)
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
C = Mid(Con, A + 1, B - A)
'Nom de la feuille où doit s'inscrire l'information
Worksheets("Feuil1").Range("C3") = C

End With

End Sub
'------------------------------


Salutations!


"Ma Dalton" a écrit dans le message de news:
Bonjour,

cette fois savoir, j'aimerais savoir s'il y a une propriété qui puisse me dire
le nom du fichier source d'une zone de données externes.

Cela me permettra d'afficher dison en B3, le nom du fichier (ex,
d:répertoiresource.csv) qui est à l'origine de la zone Range("A10:F20").

Et si possible d'inscrire également en C3, la date de ce fichier externe.

merci
Avatar
Ma Dalton
Salut,
bien que ce ne soit pas exactement ce que je cherche, je vais essayer de
trouver ce qui cloche! Pour apprendre faut se forcer un peu ! Mais comme
la solution de Denis Michon semble plus adaptée à mon besoin je vais
chercher de ce coté là.

merci encore

"AV" a écrit dans le message news:
bmubo6$8gh$
Si, par ex., tu as dans une cellule de la feuille un truc du genre :
='D:TEMPMesMacros[MonTruc.xls]Feuil1'!$A$1
Malheureusement, c'est pas ce que j'ai. Ma zone de données externe

provient


plutôt d'un fichier ".csv" qui est récupéré dans la feuil1 par une
requête


MS-Query qui se met à jour lors de chaque ouverture.


Ben c'était un exemple évidemment !
A priori, peu importe le type de fichier
La condition nécessaire (que j'avais cru comprendre) est que tu aies une
liaison

externe dans une cellule, selon le modèle précédemment indiqué

Par ailleurs, même sous la forme que tu me le proposes, je n'ai pas
réussi à


faire fonctionner correctement. j'ai toujours en résultat, la valeur
#NOM?



Ca c'est pas normal.... si tu as bien mis la fonction perso dans un
module...si

la recopie est correcte...si.......

AV






Avatar
Ma Dalton
OUI ça fonctionne !!! :-)
mais maintenant, je n'arrive pas à trouver sur quel évènement placer cette
sub pour qu'elle s'exécute après une mise à jour de la zone de données.
J'ai essayé sans succès sur worksheet_Change, _Calculate et sur
_selectionChange.

merci

"Denis Michon" a écrit dans le message news:
qjzkb.6741>
Sub Extraire_chemin_et_nom_QueryTable ()

Dim A As String, B As String
Dim Con As String, C As String

'A déterminer Nom feuille où est le queryTable
'A déterminer le Nom ou l'index du querytable
With Worksheets("Feuil2").QueryTables(1)
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
C = Mid(Con, A + 1, B - A)
'Nom de la feuille où doit s'inscrire l'information
Worksheets("Feuil1").Range("C3") = C

End With

End Sub


Avatar
Denis Michon
Bonjour Ma Dalton,


"après une mise à jour de la zone de données"

C'est quoi ta zone de données ? Et comment la mets-tu à jour ?


Salutations!






"Ma Dalton" a écrit dans le message de news:eWOAE2$
OUI ça fonctionne !!! :-)
mais maintenant, je n'arrive pas à trouver sur quel évènement placer cette
sub pour qu'elle s'exécute après une mise à jour de la zone de données.
J'ai essayé sans succès sur worksheet_Change, _Calculate et sur
_selectionChange.

merci

"Denis Michon" a écrit dans le message news:
qjzkb.6741>
Sub Extraire_chemin_et_nom_QueryTable ()

Dim A As String, B As String
Dim Con As String, C As String

'A déterminer Nom feuille où est le queryTable
'A déterminer le Nom ou l'index du querytable
With Worksheets("Feuil2").QueryTables(1)
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
C = Mid(Con, A + 1, B - A)
'Nom de la feuille où doit s'inscrire l'information
Worksheets("Feuil1").Range("C3") = C

End With

End Sub


Avatar
Denis Michon
Bonjour Ma Dalton,


Si ta base de données est l'actualisation d'un QueryTable dans une feuille, copie ce qui suit dans le module feulle où
est situé ton Query. Dans la procédure, j'ai utilisé l'index 1 pour spécifier un "QueryTable" de la collection
QueryTables. Tu dois adapter selon ton application.

'-----------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range(ActiveSheet.QueryTables(1).Name), Target) Is Nothing Then
For Each c In Application.CommandBars.FindControls(ID:E9)
c.OnAction = "MaMiseAjour"
Next
Else
For Each c In Application.CommandBars.FindControls(ID:E9)
c.OnAction = ""
Next
End If

End Sub
'-----------------------------


Et dans un module Standard : Ceci est la procédure qui va s'exécuter lorsque tu appeleras la mise à jour avec la
commande de la barre d'outils "Données Externes" : Actualiser.

Ceci de la déclaration de la procédure : "Optional rien As Boolean" est utilisé seulement pour que cette procédure ne
soit pas visible dans la fenêtre des macros. Car pour qu'elle soit utilisable, il faut nécessaire qu'une cellule de la
plage d'un QueryTable soit active.
'---------------------------
Sub MaMiseAjour(Optional rien As Boolean)

Dim Mbar As CommandBarButton
Set Mbar = Application.CommandBars.FindControls(ID:E9)
Mbar.Execute

'Nom de la procédure à exécuter
Extraire_chemin_et_nom_QueryTable
Set Mbar = Nothing

End Sub
'---------------------------

La macro que va aussi exécuter la mise à jour de ta plage de données.

'------------------------------
Sub Extraire_chemin_et_nom_QueryTable ()

Dim A As String, B As String
Dim Con As String, C As String

'A déterminer Nom feuille où est le queryTable
'A déterminer le Nom ou l'index du querytable
With Worksheets("Feuil2").QueryTables(1)
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
C = Mid(Con, A + 1, B - A)
'Nom de la feuille où doit s'inscrire l'information
Worksheets("Feuil1").Range("C3") = C

End With

End Sub
'------------------------------


Salutations!





"Ma Dalton" a écrit dans le message de news:eWOAE2$
OUI ça fonctionne !!! :-)
mais maintenant, je n'arrive pas à trouver sur quel évènement placer cette
sub pour qu'elle s'exécute après une mise à jour de la zone de données.
J'ai essayé sans succès sur worksheet_Change, _Calculate et sur
_selectionChange.

merci

"Denis Michon" a écrit dans le message news:
qjzkb.6741>
Sub Extraire_chemin_et_nom_QueryTable ()

Dim A As String, B As String
Dim Con As String, C As String

'A déterminer Nom feuille où est le queryTable
'A déterminer le Nom ou l'index du querytable
With Worksheets("Feuil2").QueryTables(1)
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
C = Mid(Con, A + 1, B - A)
'Nom de la feuille où doit s'inscrire l'information
Worksheets("Feuil1").Range("C3") = C

End With

End Sub