Suspendre le code en attente d'une réponse d'un autre classeur

Xtian_Québec

XLDnaute Occasionnel
Bonjour le Forum, je fais encore appel à votre matière grise et je sais à l'avance qu'un brillant XlNaute me suggérera une solution sympa. Merci à l'avance de lire mon roman...j'espère être assez précis dans ma demande.

Voici l'inter-action entre mes deux fichiers:
J'ai un fichier de saisie (classeur 1) pour identifier les étapes de production de différentes pièces mécaniques. Donc l'utilisateur de ce fichier entre une ligne de données pour chaque pièce à produire. Chacune de ces pièces sera ensuite traitées dans mon autre fichier (Feuille de route, classeur 2).

Pour chaque feuille de route générée à partir du fichier de saisie (classeur 1), je copie les données de la pièce dans le classeur 2, ensuite j'importe un dessin PDF qui sera joint à la feuille de route (classeur 2) et finalement toutes ces informations seront imprimées recto/verso sur une seule feuille.

J'utilise un code For - Next pour transférer mes données du classeur 1 au classeur 2 et tout fonctionne bien. Le code traite la première ligne de donnée, copie les infos, importe le dessin et imprime la feuille. Le code s'exécute ensuite sur la ligne suivante du classeur 1, etc...

Mon problème (oui oui j'y arrive), c'est que je voudrais arrêter ma boucle entre l'importation du dessin et l'impression finale dans le classeur 2...j'aimerais laisser à l'utilisateur la responsabilité de valider et vérifier les informations avant d'imprimer le document. De plus, il y a des zones additionnelles dans le classeur 2 qui nécessitent des informations avant l'impression (ex Vérifié par) . En ce moment, toutes les pièces sont imprimées, sans vérification et l'utilisateur doit inscrire à la main les informations requises. J'aimerais lui laisser le privilège d'entrer des données avant que le code ne s'exécute pour toutes les lignes du classeur 1.

En bref, je veux une pause entre chaque ligne du classeur 1 à traité (For - Next) et je voudrais que le code soit réactivé lorsque l'utilisateur complète la révision du classeur 2 et active un bouton dans le classeur 2.

Est-ce possible ?

Merci encore pour vos brillantes idées !!!

Xtian_Québec
@+++
 

wilfried_42

XLDnaute Barbatruc
Re : Suspendre le code en attente d'une réponse d'un autre classeur

re:

je ne sais pas si c'est ce que tu cherches : regarde la methode Wait dans l'aide VBA

Exemples
Cet exemple montre comment suspendre l'exécution d'une macro jusqu'à aujourd'hui 18:23.

Application.Wait "18:23:00"
Cet exemple montre comment suspendre l'exécution d'une macro pendant environ 10 secondes.

newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
Cet exemple montre comment afficher un message indiquant si 10 secondes se sont écoulées.

If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If
 

Luki

XLDnaute Accro
Re : Suspendre le code en attente d'une réponse d'un autre classeur

Bonjour Xtian, Wilfried

pour ma part, j'utiliserais plutôt un userform non modal pour redonner la main à l'utilisateur, le temps de faire les vérifications.
  1. Afficher le UF pour interrompre et informer l'utilisateur
  2. Il reprend la main et fait les vérifs
  3. Il appuye sur le bouton "Continuer" du UF
  4. La macro continue
Car je ne suis pas sûr que le WAIT permette de reprendre la main.

Bonne journée
 
Dernière édition:

wilfried_42

XLDnaute Barbatruc
Re : Suspendre le code en attente d'une réponse d'un autre classeur

re:

tu as raison luki, une userform est le mieux, surtout qu'il y a des informations à remplir

par contre, il faut bloquer la croix et sortir par bouton avec userform.hide pour pouvoir recuperer les infos dans la macro et en plus au prochain affichage de l'usf, pas besoin de resaisir, les infos ne sont pas perdues
 

Xtian_Québec

XLDnaute Occasionnel
Re : Suspendre le code en attente d'une réponse d'un autre classeur

RE Wilfried_42 et Luki, merci pour vos informations.

Si je comprends bien, la logique serait la suivante:

1) L'utilisateur entre des données dans le classeur 1.
2) Il active un code qui transfert les données dans le classeur 2 et le classeur 2 s'affiche à l'écran.
3) Dans le code du classeur 1 qui traite les données du classeur 1 au classeur 2, il y a un UF qui s'affiche avec un bouton "continuer".
4) Pendant l'affichage du UF dans le classeur 2,qui est maintenant le classeur actif,l'utilisateur peut saisir des données dans le classeur 2.
5) Lorsque l'utilisateur sélectionne "continuer" sur le UF, les nouvelles données du classeur 2 sont sauvegardées (avec code en conséquence)dans le classeur 2 et le reste du code du classeur 1 s'exécute (Imprimer le document).

Si c'est ça, un UF créé (lancé à partir du classeur 1) peut il s'afficher dans le classeur 2 ?

Si vous avez un exemple de code qui effectuerait cette action, je suis preneur.

Merci de suivre ce fil.

Xtian_Québec
@+++
 

Luki

XLDnaute Accro
Re : Suspendre le code en attente d'une réponse d'un autre classeur

Re

En Pj, un exemple de ce que tu peux faire avec un UForm.
Contrairement à ce que je disais dans mon précédent post, le fait d'afficher le Uf non modal ne permet pas directement de faire une pause: la macro continue.
Par contre, une fois que le UF (non modal) est affiché et ta macro terminée, il reste en mémoire et ses boutons peuvent déclencher une action sans soucis. Il faut juste gérer les niveaux de variables (module, public, etc.) pour garder les infos dont tu as besoin entre les appels aux différentes procédures.

Dans l'exemple joint, je copie la col1 du classeur 1 vers un nouveau classeur.
Si tu continues, l'impression démarre ( pour de faux!) sinon, le nouveau classeur est supprimé.

A bientôt
 

Pièces jointes

  • Xtian_UForm.xls
    39 KB · Affichages: 78

wilfried_42

XLDnaute Barbatruc
Re : Suspendre le code en attente d'une réponse d'un autre classeur

re: bonjour luki

je t'envoie un exemple : j'ai fait ca hier, pour un fil

tu as deux fichier, dens le premier, une liste quelconque, avec une date
dans le deuxieme, il y as un lien en A1 avec cette date

toujours dans le 2eme, une gestion d'horloge interne (Crée par didier et oui encore MDF), j'ai seulement enlevé l'affichage

toutes les 3 secondes, le programme va controler si A1 a été modifié, si c'est le cas, le programme effectue une action d'ajout de lignes

@ te lire
 

Pièces jointes

  • Adil1.zip
    13.8 KB · Affichages: 35

Luki

XLDnaute Accro
Re : Suspendre le code en attente d'une réponse d'un autre classeur

Re le fil, Wilfried

J'ai aussi testé ce genre de macro auparavant. Merci Didier
C'était dans le cas où je devais vérifier quelle application était active, etc.

J'ai abandonné car jai eu parfois des interférences avec d'autres macros événementielles.
Mais si le cas est restreint et que l'on y met fin avant de passer à autre chose, ça tourne.

Pour ma part, je trouve que le Uform est plus facile à gérer. mais comme toujours, ça dépend des cas et du dévellopeur! :D

Bonne journée
 

wilfried_42

XLDnaute Barbatruc
Re : Suspendre le code en attente d'une réponse d'un autre classeur

re:

oui luc, c'est dans un cadre restreint que je le preconise : dans ce cas precis c'est utile, tu envoies, tu attends une reponse, quand tu as la reponse, tu continue la macro sans oublier d'arreter l'horloge

Comme toi, je me mefie des interruptions incontrolées et à juste titre

bon We et à bientot sur le forum
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine