Lancer toutes les connexions "ActiveWorkbook.Connections"
Résolu
pascalou83400
Messages postés
281
Statut
Membre
-
pascalou83400 Messages postés 281 Statut Membre -
pascalou83400 Messages postés 281 Statut Membre -
Bonjour,
Je cherche à lancer toutes les connexions d'un classeur automatiquement, ce code fonctionnera sur plusieurs classeurs indépendant, mais pas avec les mêmes noms de requête.
Donc j'imagine qu'il y a possibilité de lancer les requêtes sans préciser le nom ?
Merci.
Pascal
la macro ressemble à ça :
Sub donneeslgi()
'
' donneeslgi Macro
'
'
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232").Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA23211111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232111111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321111111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA23211111111") _
.Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232111111111" _
).Refresh
ActiveWorkbook.Connections( _
"Lancer la requête à partir de PALMACEA2321111111111").Refresh
End Sub
Je cherche à lancer toutes les connexions d'un classeur automatiquement, ce code fonctionnera sur plusieurs classeurs indépendant, mais pas avec les mêmes noms de requête.
Donc j'imagine qu'il y a possibilité de lancer les requêtes sans préciser le nom ?
Merci.
Pascal
la macro ressemble à ça :
Sub donneeslgi()
'
' donneeslgi Macro
'
'
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232").Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA23211111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232111111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA2321111111"). _
Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA23211111111") _
.Refresh
ActiveWorkbook.Connections("Lancer la requête à partir de PALMACEA232111111111" _
).Refresh
ActiveWorkbook.Connections( _
"Lancer la requête à partir de PALMACEA2321111111111").Refresh
End Sub
15 réponses
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
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
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.
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?