Temporisation ?
Le
CAP2

Bonjour à toutes et à tous,
voilà, j'ai développé un petit code qui en gros envoie par mail (en pièce
jointe) la sauvegarde en pdf du document word actif
Le problème, c'est que quand j'exécute mon code, je pense qu'il n'a pas le
temps de vraiment générer le ficher pdf, et du coup le mail part sans pièce
jointe.
Alors qu'à la fin de l'exécution, je vois bien mon pdf créé dans le bon
dossier. De plus, si j'exécute en pas-à-pas (en marquant un bon temps
d'arrêt juste après les lignes de génération du pdf), ça fonctionne
parfaitement.
J'en conclus donc (peut-être à tort) quil n'a pas le temps de créer le
fichier et de le passer en pièce jointe
Est-il possible de faire une temporisation qui "gèle" temporairement
l'exécution du code VBA sans bloquer l'enregistrement du fichier pdf, et que
cela reparte ensuite ?
Merci d'avance de vos idées et suggestions !
CAP2
voilà, j'ai développé un petit code qui en gros envoie par mail (en pièce
jointe) la sauvegarde en pdf du document word actif
Le problème, c'est que quand j'exécute mon code, je pense qu'il n'a pas le
temps de vraiment générer le ficher pdf, et du coup le mail part sans pièce
jointe.
Alors qu'à la fin de l'exécution, je vois bien mon pdf créé dans le bon
dossier. De plus, si j'exécute en pas-à-pas (en marquant un bon temps
d'arrêt juste après les lignes de génération du pdf), ça fonctionne
parfaitement.
J'en conclus donc (peut-être à tort) quil n'a pas le temps de créer le
fichier et de le passer en pièce jointe
Est-il possible de faire une temporisation qui "gèle" temporairement
l'exécution du code VBA sans bloquer l'enregistrement du fichier pdf, et que
cela reparte ensuite ?
Merci d'avance de vos idées et suggestions !
CAP2
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]
En gros, la méthode courante pour "attendre" est de mettre l'heure
courante dans une variable, calculer l'heure de fin et faire une boucle
jusqu'à que l'heure désirée soit atteinte.
Dans cette boucle, on met au moins un doevents pour ne pas bloquer les
autres applications pendant ce temps.
Dans votre cas, je me demande si on ne pourrait pas plutôt vérifier
l'existence du document pdf en utilisant une fonction Dir par exemple.
Et boucler tant qu'il n'existe pas. Un risque est de ne jamais sortir
de la boucle s'il y a la moindre erreur de programmation, mais on peut
aussi limiter le nombre d'itérations.
Si le fichier existe dès le début de la génération, vous n'aurez pas le
résultat escompté, on pourrait alors essayer de l'ouvrir en mise à
jour, ça devrait être refusé tant que le fichier n'est pas terminé.
Ce sont juste des idées. De mémoire, au niveau de la programmation
elle-même, vous n'avez pas besoin d'aide.
--
A+
Peut-être un DoEvents qui donne la main au système d'exploitation en
attendant la fin d'une tâche?
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/
----------------------------------------------------------------------------------
"Geo"
Il se trouve que heureux-oli a formulé :
Et keskidit Geo ???? :D)))
Il dit :
"Dans cette boucle, on met au moins un *doevents* pour ne pas bloquer
les autres applications pendant ce temps."
Circé
http://faqword.fr
Dsolé, il est passé au travers du "philtre".
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/
----------------------------------------------------------------------------------
"Circé"
Désolé pour le temps de réponse, mais je me suis (un peu) absenté ;o))
Je vais tester au plus tôt ta proposition Geo. Je ne crains pas la boucle
infinie ;o))
Je vous tiens au courant !!
Merci à vous trois !
CAP2
Une boucle de temporisation qui bouclait ?
Ce serait sympa, qu'on mette la bonne solution de côté.
--
A+
je reviens vers vous afin de vous donner les résultats de mes maigres
efforts ;o))
Je suis passé par une boucle While qui teste, grâce à la fonction Dir si le
fichier est bien généré ou pas, et qui boucle tant que ce n'est pas le cas
(tout en intégrant avant au code un DoEvents pour "donner la main" à Windows
pour la génération de mon pdf...).
Résultat : Ca ne fonctionne pas ! Ou plutôt, ça ne fonctionne pas dans mon
cas. Pour une raison finalement assez curieuse : après plus de tests, je me
suis rendu compte que le pdf ne se crée réellement qu'à la sortie de la Sub.
Alors qu'au beau milieu de celle-ci, j'ai tout le code qu'il faut pour qu'il
se génère, ça ne se fait pas tant qu'on n'a pas instruit le End Sub...
Un exécution pas-à pas fonctionne bien. J'avoue que je ne comprends pas trop
;o))
En tout cas, en exécution "normale", ma boucle tourne et retourne (c'est le
tourbillon ;o))
Du coup, j'ai scindé mon code en 2 : Une partie qui génère le pdf, et
l'autre qui le joint à mon mail, et là ça fonctionne évidemment...
Voilà ce qui revient de mes tests.
En tout cas, merci à tous pour vos idées qui pourront de toutes façons me
servir dans d'autres contextes, j'en suis sûr ;o))
A bientôt,
CAP2
Comme quoi, en programmation le pire est toujours possible.
Merci pour le retour.
On pourrait imaginer d'autres solutions, mais certainement plus
compliquées que la vôtre.
Par contre l'utilisateur doit faire une action de plus, ou vous avez
enchaîné les opérations par macro ?
--
A+
en fait, je n'ai qu'un seul déclenchement : celui de la création de mail et
de l'attachement de la pièce jointe. Je passe par un Call, la sub qui génère
le pdf s'exécute, le pdf est créé, et là ma 2ème sub peut joindre le fichier
au mail.
Donc du coup, en une manipulation ça fonctionne. J'aurais aimé que cela se
fasse en plus en 1 macro, mais bon, soyons pragmatique ;o))
En tout cas Geo, merci encore de m'avoir aiguillé vers la bonne direction...
J'aimerais pouvoir vous dire "à charge de revanche", mais ça serait
présomptueux ;o)
Cordialement,
CAP2
C'est un peu étonnant comme comportement, mais vous l'avez
manifestement bien analysé et, partant de là, votre solution est
logique.
Bien d'accord avec vous, du moment que le résultat escompté est
atteint, c'est le principal.
Merci pour le retour, on est plus intelligents à plusieurs que seul.
--
A+