Macro Auto_Open et blocage DDE (DoEvents)
Snoopy6102000
Messages postés
71
Statut
Membre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour à tous,
Je vous assure que j'ai fait beaucoup de recherche avant de poser cette question.
J'ai un fichier excel qui reprend des données d'un autre logiciel via DDE (styler copier-coller avec liaison). A l'ouverture du fichier, j'ai créé une macro qui va me préparer mes données pour l'exploitation future. Cependant, la macro se lance AVANT que les données ne soient raffraîchies par DDE. Du coup c'est jamais bon.
J'ai tenté :
- fonction sleep
- fonction application.wait
ces fonctions arrêtes la macro mais sans permettre le rafraichissement.
Apparemment le mieux serait d'utiliser la fonction DoEvents. A dire vrai je ne sais pas comment elle fonctionne, elle doit donner la main au logiciel/système et donc permettre le raffraichissement. Je ne sais pas comment l'intégrer à la macro.
J'ai fait une macro Auto_Open
Sub Auto_Open()
DoEvents
'Mise à jour des données pour exploitation dans les colonnes suivantes
Windows("Echeancier_2011.xls").Activate
Sheets("Listing").Select
Range("G2:G1000") = Range("F2:F1000").Value
Sheets("MontantCdes").Select
Range("C2:C1000") = Range("B2:B1000").Value
End Sub
Mais ça ne va pas, je ne suis pas sûre de bien utiliser cette fonction, pourriez-vous me l'expliquer?
Merci par avance de votre aide.
Je vous assure que j'ai fait beaucoup de recherche avant de poser cette question.
J'ai un fichier excel qui reprend des données d'un autre logiciel via DDE (styler copier-coller avec liaison). A l'ouverture du fichier, j'ai créé une macro qui va me préparer mes données pour l'exploitation future. Cependant, la macro se lance AVANT que les données ne soient raffraîchies par DDE. Du coup c'est jamais bon.
J'ai tenté :
- fonction sleep
- fonction application.wait
ces fonctions arrêtes la macro mais sans permettre le rafraichissement.
Apparemment le mieux serait d'utiliser la fonction DoEvents. A dire vrai je ne sais pas comment elle fonctionne, elle doit donner la main au logiciel/système et donc permettre le raffraichissement. Je ne sais pas comment l'intégrer à la macro.
J'ai fait une macro Auto_Open
Sub Auto_Open()
DoEvents
'Mise à jour des données pour exploitation dans les colonnes suivantes
Windows("Echeancier_2011.xls").Activate
Sheets("Listing").Select
Range("G2:G1000") = Range("F2:F1000").Value
Sheets("MontantCdes").Select
Range("C2:C1000") = Range("B2:B1000").Value
End Sub
Mais ça ne va pas, je ne suis pas sûre de bien utiliser cette fonction, pourriez-vous me l'expliquer?
Merci par avance de votre aide.
A voir également:
- Macro Auto_Open et blocage DDE (DoEvents)
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Blocage messenger - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Blocage smtp sortant - Forum Freebox
3 réponses
Bonjour,
1°) Windows("Echeancier_2011.xls").Activate n'est pas nécessaire vu que tu y est.
2°) Rectifier :
3°)Si ce sont des formules dans G2:G1000 faudra employer PasteSpecial.
A+
1°) Windows("Echeancier_2011.xls").Activate n'est pas nécessaire vu que tu y est.
2°) Rectifier :
Sheets("Listing").Select
Range("G2:G1000").Copy Range("F2")
3°)Si ce sont des formules dans G2:G1000 faudra employer PasteSpecial.
A+
Ok pour la fenêtre, mais le problème n'est pas dans la suite: pour info je fais une copie des valeurs parce qu'avec le logiciel on tape les nombres avec " . " et non aevc " , " du coup excel ne comprend pas. Bref, la suite n'a pas d'intérêt elle marche bien.
Si vous voulez le raffraichissement se fait automatiquement à l'ouverture du fichier, sauf si la macro se met en route avant, ce qui est le cas quand on la met en Auto-Open, et j'ai besoin qu'elle se lance seule.
En fait, ça se passe comme ça : j'ouvre l'autre logiciel, les données se raffraichissent (par ex liste des commandes en cours), ensuite j'ouvre mon fichier excel, les données qui ont été collées avec liaison se raffraichisse via DDE, après je lance ma macro (pour l'instant manuellement) pour copier les chiffres que je vais utiliser par la suite.
Le problème de l'Auto_Open, c'est que cela bloque le raffraichissement via DDE et lance la suite de la macro trop tôt, avant que les chiffres n'ait été mis à jour, et donc la macro n'utilise pas les bons chiffres.
Si vous voulez le raffraichissement se fait automatiquement à l'ouverture du fichier, sauf si la macro se met en route avant, ce qui est le cas quand on la met en Auto-Open, et j'ai besoin qu'elle se lance seule.
En fait, ça se passe comme ça : j'ouvre l'autre logiciel, les données se raffraichissent (par ex liste des commandes en cours), ensuite j'ouvre mon fichier excel, les données qui ont été collées avec liaison se raffraichisse via DDE, après je lance ma macro (pour l'instant manuellement) pour copier les chiffres que je vais utiliser par la suite.
Le problème de l'Auto_Open, c'est que cela bloque le raffraichissement via DDE et lance la suite de la macro trop tôt, avant que les chiffres n'ait été mis à jour, et donc la macro n'utilise pas les bons chiffres.
J'ai déjà eu affaire à ce genre de problème (donnée boursière en temps réel), ton problème est un peu différent.
A la place de mettre dans le Open essaye en mettant ton code dans le WorkSheet_Activate de la feuille en question.
Tu dis.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
A la place de mettre dans le Open essaye en mettant ton code dans le WorkSheet_Activate de la feuille en question.
Tu dis.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.