Actualiser Power Query en VBA

Accueil – Le CFO masqué Forums Excel Actualiser Power Query en VBA

Mots-clés : 

  • Ce sujet contient 4 réponses, 3 participants et a été mis à jour pour la dernière fois par Consultant No.24, le il y a 5 années et 10 mois.
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Articles
  • #46518
    eliecahen
    Participant

    Bonjour,
    J’ai un fichier excel proteger, relier a d’autres excel par power query.
    Je cherche un moyen d’actualiser les donnes par vba a l’ouverture du fichier.
    Cependant si j’ecrits

    sub R_PQ()
    ThisWorkbook.Unprotect (“3021”)
    ThisWorkbook.refreshAll
    ThisWorkbook.protect (“3021”)
    End Sub

    L’actualision s’arrete
    quelqu’un a une idee

    Merci

    #46571
    Mahaitia
    Participant

    Bonjour

    Selon mes expériences, on ne peut pas déverrouiller une feuille via une macro. Sinon, tu peux toujours actualiser tes tableaux, connexions, TCD si ceux-ci ne se trouvent pas dans des champs verrouillés.
    je te conseille plutôt de mettre les éléments dans un onglet masqué non-verrouillé.

    pour actualiser l’exhaustivité de tes requets powerquery, utiliser plutôt une boucle:

    sub R_PQ()
    for i = 1 to thisworkbook.connections.count
           thisworkbook.connections(i).refresh
    next
    
    end sub
    

    Bonne chance!

    #46590
    eliecahen
    Participant

    Merci de votre réponse.
    Le vrai probleme est que si j’actualise par macro,l’actualisation s’arrete quand le script vba se termine et non quand l’actualisation est terminé, donc je recois des erreurs d’actualisations dans mes requetes.
    Vous avez une idee que le script ne s’arrete pas pendant x temps?
    Merci

    #46595
    eliecahen
    Participant

    j’ai trouve une solution…
    Couper la macro en 2

    `Sub DataRefresh()
    ‘ ActiveSheet.Unprotect “123”
    ActiveWorkbook.RefreshAll
    Application.OnTime Now + TimeValue(“00:00:01”), “DataRefresh2”
    End Sub
    Sub DataRefresh2()
    If Application.CommandBars.GetEnabledMso(“RefreshStatus”) Then
    Application.OnTime Now + TimeValue(“00:00:01″), ” DataRefresh2″
    Else

    End If
    End Sub

    #46596
    Consultant No.24
    Participant

    Bonjour,
    Votre 1ere macro est tout à fait correct et le problème vient du type de mise à jour de Power Quercy. Par défaut cette actualisation se fait en arrière plan, du coup le code lance l’actualisation puis se poursuit. Bien sûr vous pouvez utiliser la temporisation comme dans votre 2e macro. Mais le mieux c’est de décocher l’actualisation des requêtes. Ainsi votre 1ère macro est amplement suffisante.
    Cathy Monier

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.