Microsoft 365 Erreur d'exécution 438

sj4555

XLDnaute Junior
Bonjour à tous,

J'ai mis du code dans une feuille de mon classeur contenant une requête vers une liste SharePoint s'affichant sous la forme d'un tableau :

requete_actua.png


Pour récupérer la date de dernière actualisation de ce tableau et l'afficher dans une cellule de la feuille j'ai mis ce code dans la feuille en question :

VB:
Private Sub RecupDateActua(ByVal Target As ListObject)
dateString = Format(Target.RefreshDate, "dd/mm/yyyy hh:mm:ss")
Range("M1") = dateString
End Sub

Public Sub test()
Call RecupDateActua(Sheets("Feuil1").ListObjects("Rondes__2"))
End Sub

Le problème c'est qu'à l'exécution de la macro "test" j'obtient cette erreur :

err438.png


Si vous avez des pistes je suis preneur ?

Je vous laisse mon fichier en PJ
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir sj4555,

C'est normal que tu aies une erreur ; c'est à cause de : Target.RefreshDate

.ResfresDate est une Propriété pour un TCD ou son cache (PivotTable ou
PivotCache)
; ce n'est pas une Propriété pour un Tableau structuré
(ListObjects) tel que : .ListObjects("Rondes__2")

soan
 

sj4555

XLDnaute Junior
Salut Soan, merci pour ta réponse,

C'est bien embêtant sachant qu'il n'y a pas de propriété équivalente pour ListObject,

J'aimerais pouvoir récupérer la date de dernière actualisation de la requête à l'origine du tableau.

Si t'as des pistes je suis preneur,
 

sj4555

XLDnaute Junior
Update,

Voici la façon de faire que j'ai décidé d'adopter et qui me permet de récupérer la date à chaque actualisation des données de la source,

(Le code ci-dessous permet dans mon cas d'écrire la date de dernière actualisation dans la cellule R4 de la feuille Suivi journalier air)

Merci à Jean-Eric, réponse sur le topic : https://forum.excel-pratique.com/excel/formule-actualisation-tableau-simple-146567

Dans ThisWorkbook :

VB:
Option Explicit

Private Sub Workbook_Open()
    Call InitializeQueries
End Sub

Dans un module standard :

VB:
Option Explicit

Dim colQueries As New Collection

Sub InitializeQueries()
Dim clsQ As clsQuery
Dim WS As Worksheet
Dim QT As QueryTable
Dim lo As ListObject
    For Each WS In ThisWorkbook.Worksheets
        For Each QT In WS.QueryTables
            Set clsQ = New clsQuery
            Set clsQ.MyQuery = QT
            colQueries.Add clsQ
        Next QT
        On Error Resume Next
        For Each lo In WS.ListObjects
            Set QT = lo.QueryTable
            Set clsQ = New clsQuery
            Set clsQ.MyQuery = QT
            colQueries.Add clsQ
        Next lo
    Next WS
End Sub

Dans un module de classe (clsQuery) :

VB:
Option Explicit

Public WithEvents MyQuery As QueryTable

Private Sub MyQuery_AfterRefresh(ByVal Success As Boolean)

If Success Then Sheets("Suivi journalier air").Range("R4").Value = Format(VBA.Now, "yyyy-MM-dd hh:mm")

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 781
Messages
2 112 911
Membres
111 698
dernier inscrit
bams62690