Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Temporisation ?

10 réponses
Avatar
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

10 réponses

Avatar
Geo
Bonjour CAP 2
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

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 ?



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+
Avatar
heureux-oli
Salut,

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" a écrit dans le message de news:

Bonjour CAP 2
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

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 ?



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+




Avatar
Circé
Hello !

Il se trouve que heureux-oli a formulé :
Salut,

Peut-être un DoEvents qui donne la main au système d'exploitation en
attendant la fin d'une tâche?



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



--
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" a écrit dans le message de news:

Bonjour CAP 2
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

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 ?



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+






Avatar
heureux-oli
Salut,

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é" a écrit dans le message de news:

Hello !

Il se trouve que heureux-oli a formulé :
Salut,

Peut-être un DoEvents qui donne la main au système d'exploitation en
attendant la fin d'une tâche?



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



--
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" a écrit dans le message de news:

Bonjour CAP 2
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

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 ?



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+










Avatar
CAP2
Bonjour à tous !

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
Avatar
Geo
Bonjour

Désolé pour le temps de réponse, mais je me suis (un peu) absenté ;o))



Une boucle de temporisation qui bouclait ?

Je vous tiens au courant !!



Ce serait sympa, qu'on mette la bonne solution de côté.

--
A+
Avatar
CAP2
Bonjour à toutes et à tous,

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
Avatar
Geo
Bonjour

En tout cas, en exécution "normale", ma boucle tourne et retourne (c'est le tourbillon
;o))



Comme quoi, en programmation le pire est toujours possible.

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...



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+
Avatar
CAP2
Bonjour Geo,

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
Avatar
Geo
Bonjour

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))



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+