Microsoft 365 VBA: ne travailler qu'avec les TABLES

merinos

XLDnaute Accro
Bonjour a tous,

j'ai une macro... à laquelle il manque la fin:

sur chaque feuille d'un claseur j'ai une (et une seule) TABLE (générée par un query)

j'ai une macro qui rafraichi le query de query... mais elle devrait selectioner et copier en mémoire la table après le refresh...

VB:
Sub Sheet_Table_refresh()
    Dim tbl As ListObject ' je pensais pouvoir employer TableObject
 On Error Resume Next
    ' Boucle à travers toutes les tables sur la feuille active
    For Each tbl In ActiveSheet.ListObjects
        tbl.QueryTable.Refresh BackgroundQuery:=False
    Next tbl

End Sub

merci de votre aide

Merinos
 
Solution
Salut a tous,

Certainement @Lolote83 et @vgendron ,
je vois pas où et pourquoi ta macro devrait selectionner quoique ce soit..??

en fait j'ai demandé (poliment) chatgpt... et en formulant plusieur fois ma question, il n'a pondu une nouvelle version de ma macro:

VB:
Sub Sheet_Table_refresh_2024()
    Dim tbl As ListObject
    
    ' Désactiver la gestion des erreurs pour éviter les interruptions
    On Error Resume Next
    
    ' Boucle à travers tous les objets de la feuille active
    For Each tbl In ActiveSheet.ListObjects
        ' Vérifier si l'objet a une QueryTable avant de l'actualiser
        If Not tbl.QueryTable Is Nothing Then
            tbl.QueryTable.Refresh BackgroundQuery:=False...

merinos

XLDnaute Accro
Salut a tous,

Certainement @Lolote83 et @vgendron ,
je vois pas où et pourquoi ta macro devrait selectionner quoique ce soit..??

en fait j'ai demandé (poliment) chatgpt... et en formulant plusieur fois ma question, il n'a pondu une nouvelle version de ma macro:

VB:
Sub Sheet_Table_refresh_2024()
    Dim tbl As ListObject
    
    ' Désactiver la gestion des erreurs pour éviter les interruptions
    On Error Resume Next
    
    ' Boucle à travers tous les objets de la feuille active
    For Each tbl In ActiveSheet.ListObjects
        ' Vérifier si l'objet a une QueryTable avant de l'actualiser
        If Not tbl.QueryTable Is Nothing Then
            tbl.QueryTable.Refresh BackgroundQuery:=False
            
            ' Copier les données de la table dans le presse-papiers 
            ' et montrer avoir fait le boulot par selection
            tbl.Range.Copy
            tbl.Range.Select
            
            'je desire arreter la boucle ici
            Exit For
            
        End If
    Next tbl
    
    ' Réactiver la gestion des erreurs
    On Error GoTo 0
End Sub

Et , oh miracle, après le refresh, il copie en memoire la table au complet... ce qui me permets de l'importer dans notre systeme de gestion sans travail personnel (je sais que je suis un paresseux diplomé)

Bref presque parfait...
La seule chose est qu'il ne peut y avoir qu'une seule table....

Mérinos
 

Discussions similaires

Réponses
12
Affichages
801

Statistiques des forums

Discussions
313 866
Messages
2 103 087
Membres
108 521
dernier inscrit
manouba