IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Formule actualisation tableau simple


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut Formule actualisation tableau simple
    Bonjour à tous,

    Je fais face à une problématique depuis une semaine, j'ai une requête vers une liste SharePoint, que j'affiche sous forme d'un tableau sur une feuille de calcul avec Power Query.

    J'aimerais pouvoir récupérer la date d'actualisation de celui-ci et l'afficher dans une cellule de la feuille.



    J'ai mis en place une actualisation automatique à l'aide des paramètre d'excel (en arrière-plan, toutes les 15 minutes, et à l'ouverture du fichier), je peux actualiser manuellement ici :

    Nom : actualiser tout.png
Affichages : 845
Taille : 6,5 Ko

    Pour récupérer la date de dernière actualisation je suis d'abord parti du principe que le tableau généré par la requête...
    Nom : requete_actua.png
Affichages : 790
Taille : 98,9 Ko

    ... était un TCD.

    Pour cela j'ai écrit ces fonctions sur la feuille où se situe la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub RecupDateActua(ByVal Target As PivotTable)
        dateString = Format(Target.RefreshDate, "dd/mm/yyyy hh:mm:ss")
        Range("M1") = dateString
    End Sub
     
    Public Sub test()
        Call RecupDateActua(Sheets("Feuil2").PivotTables("Rondes"))
    End Sub
    Le problème c'est que j'ai une erreur à l'exécution de la Macro :

    Nom : err1004.png
Affichages : 706
Taille : 5,8 Ko

    Cela est sûrement du au fait que cette fonction concerne uniquement les TCD(PivotTable) et que mon tableau n'en est pas un.

    J'ai donc essayé de reproduire ce tableau en créant un TCD, sans succès puisque ce n'est pas la fonction première du TCD,


    Donc 2 questions :

    - Comment adapter la macro pour qu'elle s'applique à un tableau simple ou "range" de données ?

    ou alors

    - Comment créer un TCD qui s'affiche de la même manière qu'un tableau simple ?

    Merci.

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Hello,

    Perso, je ne ferais pas de mise à jour automatiquement toutes les X min.
    Je préfère rester maître de mon fichier et ne pas le laisser se "modifier" sans que je lui demande.

    Pour ce faire, en ayant un tableau structuré ( issus d'une requête power query) , nommé t_Table1.
    Je mettrais cette ligne de code pour l'actualisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("t_Table1").Listobject. QueryTable.Refresh BackgroundQuery:=False
    Pour ce qui est de refléter la date et heure de la dernière Maj, sur une feuille : j'ajouterais une cellule nommée cMaj à laquelle, j'ajouterais la date et heure à la fin de la mise à jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("cMaj").Value = Now()
    Un petite Sub pour lancer le tout, et un petit bouton pour faire le refresh.

    Bat,
    MFoxy
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Salut mxfoxy,

    Merci pour ta réponse le problème avec ta ligne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("cMaj").Value = Now()
    ...C'est qu'elle ne donne pas la date d'actualisation des données dans la requêtes mais simplement la date de l'instant T où tu l'exécutes.

  4. #4
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Re,

    Je dois m'être mal exprimé.

    Dans mon code j'écris les deux lignes de code, une en dessous de l'autre.
    ainsi 1) refresh de la table, 2) insertion de la date et heure au moment de la fin du refresh

    Ne laissant pas la main à Excel pour effectuer des refresh automatique, je ne saurais te dire s'il existe une méthode pour récupérer nativement la date et heure du dernier refresh d'une table ( power query)
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Ok, je vois où tu veux en venir,

    J'ai essayé d'adapter ton code à mes besoin (j'ai déjà une actualisation automatique en place et souhaite la conserver) en mettant un if,


    J'ai malheureusement cette erreur de syntaxe :
    Nom : syntaxeif.png
Affichages : 741
Taille : 13,1 Ko

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    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

    Dans ThisWorkbook :

    Option Explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        Call InitializeQueries
    End Sub
    Dans un module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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
    

    

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Actualiser tableau et graph dynamique
    Par Fadafana dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/01/2008, 17h54
  2. Réponses: 4
    Dernier message: 15/01/2008, 09h59
  3. Tableau simple dont on ne connait pas la taille
    Par Wells dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/10/2007, 16h49
  4. actualiser tableau croisé via VB (avec nouvelle longueur)
    Par lbar012001 dans le forum Général VBA
    Réponses: 5
    Dernier message: 04/05/2007, 11h39
  5. [debutabt] tableau simple
    Par hebh dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 22/02/2006, 03h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo