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 :

Code vba pour réactualiser une requete query [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut Code vba pour réactualiser une requete query
    Bonjour,

    J'ai repris un code vba qui à l'époque a été construit sur excel 2003.
    Et j'ai l'impression que sur Excel 2007 , ce code ne fonctionne pas.
    Ce code est un code vba qui réactualise une requete query.
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub MAJ_All_Querys()
     
       Dim qt As QueryTable, qts As QueryTables
        Set qts = Sheets("feuil1").QueryTables
        For Each qt In qts
     
            qt.Refresh BackgroundQuery:=False
        Next
    End Sub
    Sur la ligne 4, aprés le . de Sheets("feuil1"), je n'aie pas l'arboresence des objets qui apparait.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je pense qu'il instancier une variable Worksheet avec la feuille souhaitée, et directement travailler avec ta variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Sh as Worksheet
    Set Sh = Thisworkbook.Worksheets("feuil1")
    EDIT : j'ai testé et en mettant la feuille sous variable, ça fonctionne

    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
     
    Sub MAJ_All_Querys()
        Dim qt As QueryTable, qts As QueryTables
        Dim Sh As Worksheet
     
        Set Sh = ThisWorkbook.Worksheets("feuil1")
        ' si tu mets un Sh. tu obtiens bien le menu déroulant !
        Set qts = Sh.QueryTables
     
        For Each qt In qts
            qt.Refresh BackgroundQuery:=False
        Next
     
        Set Sh = Nothing
        Set qts = Nothing
     
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    ce code fonctionne pourtant indifféremment de mon côté quelque soit la version d'Excel.

    Et pour le point c'est normal (cela le fait déjà dans la version 2003 !),
    mieux vaut utiliser le CodeName de la feuille de calculs (et là l'arborescence s'affiche …) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub MAJ_All_Querys()
             Dim Qt As QueryTable
        For Each Qt In Feuil1.QueryTables
                 Qt.Refresh False
        Next
    End Sub
    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  4. #4
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Super merci Marc-L et joe.levrai

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Conformément aux règles de ce forum :



    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  6. #6
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    J'ai bien fait de ne pas cliquer sur "resolu"..
    J'ai parlé un peu trop vite

    le code de Marc-L et de celui de joe.levrai ne réactualisent pas ma requete query.
    Pour le code de Marc-L, le curseur saute la ligne 4
    Pour le code de joe.levrai , le cusrsue saute la ligne 11

    En résume, le curseur evite la ligne qui contient le Refresh..
    Je ne comprens pas pourquoi ?

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut



    La feuille désignée ne contiendrait pas de QueryTable !

    Et c'est simple à vérifier comme indiqué dans l'aide VBA, insérer cette ligne avant la boucle :

    MsgBox Feuil1.QueryTables.Count

  8. #8
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    je vais tester immédiatement

  9. #9
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    effectivement le msgbox m'affiche 0 .
    Ma feuile ne contien pas de queryTable..
    je vais refaire ma requete ..
    Merci encore Marc-L

    Mais ce que je ne comprend pas, c'est pourquoi lorsque, sur la feuil3, je réctualise manuellement ma requete query, celuici se réactualise..?

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    je vais peut être enfoncer une porte ouverte, mais ton code fait référence à feuil1

    donc même si tu as des Qt sur feuil3, ta macro ne va pas aller les actualiser ... et donc ton compteur de Qt affiche 0 si y'en a pas sur feuil1

  11. #11
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Joe,
    j'ai bien ecris feuil3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Feuil3.QueryTables.Count

  12. #12
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    tu n'as pas mélangé CodeName et Nom de la feuille ?

    (oui je continue d'enfoncer des portes ouvertes)

  13. #13
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Lorsque tu dis
    tu n'as pas mélangé CodeName et Nom de la feuille ?
    Que veux tu dire ?
    La feuil3 a pour nom "TMJ"

  14. #14
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Marc-L
    je reviens vers toi au sujet du problème de la non réactualistion d'une requete query.
    Tu avais écris
    La feuille désignée ne contiendrait pas de QueryTable !
    Et c'est simple à vérifier comme indiqué dans l'aide VBA, insérer cette ligne avant la boucle :
    MsgBox Feuil1.QueryTables.Count ….
    effectivement j'ai 0 à ce message.

    Comment se fait il que ma feuille ne contient pas de QuerytABLE ,

    Et qu 'est ce que un QueryTable ??

  15. #15
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut





    Soit ce n'est pas la feuille source de la QueryTable soit la requête (voir l'aide d'Excel et celle de VBA) a été supprimée …




    _____________________________________________________________________________________________________
    Copier / Coller n'est pas programmer !

  16. #16
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Marc-L,
    Que veux tu dire lorsque tu ecris
    ce n'est pas la feuille source de la QueryTable
    .

  17. #17
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut





    Ce n'est pas la bonne feuille de calculs comme Joe l'a déjà indiqué …


  18. #18
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    je ne comprend pas car c'est bien la feuil3 ou est inseré la requete

  19. #19
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Marc-L t'a proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Feuil1.QueryTables.Count
    tu as bien mis ta Feuil3 à la place de Feuil1 ?

    on peut voir ton code tel qu'il se présente maintenant ? En nous précisant bien :

    - le nom de la feuille : le nom qui apparait dans l'onglet sur Excel
    - le codename de la feuille : dans l'éditeur de code, c'est le nom de la feuille qui n'est pas entre parenthèse

  20. #20
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour joe.levrai
    je vais essayer d'etre plus explicite..
    j'ai un fichier Excel qui contient plusieurs feuilles :
    - La feuil1 intitulé ("TdB") contient un bouton de commande avec un code sur l'évenement clic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub bt_MAJ_Click()
    Call MAJ_All_Querys
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub MAJ_All_Querys()
      Application.Calculation = xlCalculationManual
        Call [Feuil2].MAJ_All_Querys
        Call [Feuil3].MAJ_All_Querys
        Call [Feuil4].MAJ_All_Querys
      Application.Calculation = xlCalculationAutomatic
    End Sub

    La feuil3 intitulé ("TMJ") contient le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MAJ_All_Querys()
     
         Dim qt As QueryTable, qts As QueryTables
        Set qts = Sheets("TMJ").QueryTables
     
        MsgBox Sheets("TMJ").QueryTables.Count
        For Each qt In qts
            qt.Refresh BackgroundQuery:=False
        Next
     
    End Sub
    Lorsque je met j'exécute le code pas à pas , le curseur saute la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qt.Refresh BackgroundQuery:=False
    .Et le Msgbox affiche 0 comme résultat.
    Ma requete query ne se réactualise pas

    voilà , j'espere quie mes explications pourront vous aidez à m'aider..

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Code vba pour extraire une chaîne spécifique de caractéres
    Par samy35 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 25/09/2013, 18h34
  2. Réponses: 2
    Dernier message: 14/10/2009, 08h57
  3. recherche du code VBA pour executer ma requete
    Par gwems dans le forum VBA Access
    Réponses: 28
    Dernier message: 19/03/2009, 23h26
  4. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 05h48
  5. Réponses: 7
    Dernier message: 21/09/2006, 14h06

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