Lancer toutes les connexions "ActiveWorkbook.Connections"
Résolu
pascalou83400
Messages postés
277
Date d'inscription
Statut
Membre
Dernière intervention
-
pascalou83400 Messages postés 277 Date d'inscription Statut Membre Dernière intervention -
pascalou83400 Messages postés 277 Date d'inscription Statut Membre Dernière intervention -
15 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
je pense que ceci va le faire pour tout le classeur dans lequel se trouve le code:
il est possible de l'adapter si cela doit être fait sur d'autres classeurs.
Dim ws As Worksheet Dim qt As QueryTable For Each ws In ThisWorkbook.Worksheets For Each qt In ws.QueryTables qt.Refresh Next qt Next ws
il est possible de l'adapter si cela doit être fait sur d'autres classeurs.
Bonsoir yg_be,
Merci pour ton aide, j'ai mis le code dans un module et celui ne fonctionne pas.
j'ai rajouté
Sub
end sub
j'ai oublié qq chose ?
Merci pour ton aide, j'ai mis le code dans un module et celui ne fonctionne pas.
j'ai rajouté
Sub
end sub
j'ai oublié qq chose ?
"ne fonctionne pas" = ?
et ainsi?
et ainsi?
Sub refreshallqt() Dim wb As Workbook Dim ws As Worksheet Dim qt As QueryTable Dim nqt As Integer, tnqt As Integer Set wb = ThisWorkbook MsgBox "Il y a " & CStr(wb.Connections.Count) & " connection(s) dans le fichier " & wb.Path tnqt = 0 For Each ws In wb.Worksheets nqt = 0 For Each qt In ws.QueryTables qt.Refresh nqt = nqt + 1 Next qt If nqt > 0 Then MsgBox CStr(nqt) & " refresh dans " & ws.Name End If tnqt = tnqt + nqt Next ws MsgBox "On a fait " & CStr(tnqt) & " refresh dans le fichier " & wb.Path End Sub
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
ou ainsi?
Sub refreshallcn() Dim wb As Workbook Dim cns As Connections Dim cn As WorkbookConnection Set wb = ThisWorkbook Set cns = wb.Connections For Each cn In cns cn.Refresh Next cn End Sub
Merci yg_be
Le 2eme code fonctionne, mais comment je peux mettre une temporisation de 3 minutes le temps que le connexion finisse, car j'ai mis cette macro dans ma boucle avec appel du module avant ma boucle.
Hum je ne sais pas si c'est bien clair...
Le 2eme code fonctionne, mais comment je peux mettre une temporisation de 3 minutes le temps que le connexion finisse, car j'ai mis cette macro dans ma boucle avec appel du module avant ma boucle.
Hum je ne sais pas si c'est bien clair...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour yg_be,
Merci pour ton code.
BackgroundQuery = False
permet d'attendre l'actualisation et après la boucle va démarrer, si j'ai bien compris ?
Je viens de faire un essai, mais l'actualisation ne se fait pas.
Merci pour ton code.
BackgroundQuery = False
permet d'attendre l'actualisation et après la boucle va démarrer, si j'ai bien compris ?
Je viens de faire un essai, mais l'actualisation ne se fait pas.
Fichier avec les modules que je souhaite mettre avant ma boucle, tout comme module1.creerlien
https://www.cjoint.com/c/GKwkj1BMiSX
https://www.cjoint.com/c/GKwkj1BMiSX
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
je propose ceci (pas vraiment testé):
Sub refreshallcn() Dim wb As Workbook Dim cns As Connections Dim cn As WorkbookConnection Set wb = ThisWorkbook Set cns = wb.Connections For Each cn In cns If Not IsEmpty(cn.ODBCConnection) Then cn.ODBCConnection.BackgroundQuery = False cn.ODBCConnection.Refresh Else cn.Refresh End If Next cn End Sub
Bonsoir yg_be,
J'ai fait des essais, mais je ne sais pas si le code démarre pendant l'actualisation, je ne sais pas comment le voir ?
Bonne soirée.
J'ai fait des essais, mais je ne sais pas si le code démarre pendant l'actualisation, je ne sais pas comment le voir ?
Bonne soirée.
Bonsoir yg_be,
Oui le dernier fais bien l'actualisation, mais je ne sais pas comment être sur qu'il soit bien fini avant le démarrage de la boucle et je ne sais pas comment je peux le contrôler.
Oui le dernier fais bien l'actualisation, mais je ne sais pas comment être sur qu'il soit bien fini avant le démarrage de la boucle et je ne sais pas comment je peux le contrôler.
Comment je peux mettre un Msgbox pour me dire module5.actualisation fini et un autre pour me dire module2.effaceleslignes commence, comme ça je vois si cela se fait l'un après l'autre.
Ça vaut quoi cette idée ?
Ça vaut quoi cette idée ?
je ne vois pas trop comment deux sub pourraient tourner en même temps.
je pense que tu veux vérifier que l'actualisation ne se fait pas en arrière-plan, en parallèle avec l'exécution des sub.
ne peux-tu pas te convaincre sur base du temps pris par l'exécution de la sub d'actualisation? ou bien elle va très vite, car elle ne fait presque rine, ou bien elle est ralentie par chaque refresh.
je pense que tu veux vérifier que l'actualisation ne se fait pas en arrière-plan, en parallèle avec l'exécution des sub.
ne peux-tu pas te convaincre sur base du temps pris par l'exécution de la sub d'actualisation? ou bien elle va très vite, car elle ne fait presque rine, ou bien elle est ralentie par chaque refresh.
oui c'est ça :
je veux vérifier que l'actualisation ne se fait pas en arrière-plan, en parallèle avec l'exécution des sub.
je veux vérifier que l'actualisation ne se fait pas en arrière-plan, en parallèle avec l'exécution des sub.
heu je ne comprends pas ta question ?
tu te demandes en fait si chaque commande refresh attend que l'actualisation soit finie, ou bien si le code continue et que l'actualisation se fait en parallèle avec l'exécution du code. c'est bien cela?
ne peux-tu pas vérifier cela simplement en regardant si le code s'exécute très vite, ou bien si il prend beaucoup de temps?
ne peux-tu pas vérifier cela simplement en regardant si le code s'exécute très vite, ou bien si il prend beaucoup de temps?