Fermer un serform d'une macro

Bonjour,

J'ai un fichier qui affiche un userfrom au démarrage. Pas de problème jusque là.

J'ai un autre fichier qui permet d'ouvrir tous ces fichiers pour les imprimer.

Problème: lorsque les fichiers s'ouvrent, le userform s'affiche bien entendu ! Et la macro d'impression ne continue que si je ferme à chaque fois le userform de chaque fichier.

Ma question est donc la suivante: est-il possible de fermer un userform via une macro afin de ne pas devoir le faire manuellement?

Bonjour,

Faudrait voir ta macro mais pour enlever une USF --> UNLOAD.nom de l'USF.

ex : si l'USERFORM s'appelle userform1 --> UNLOAD.USERFORM1

Amicalement

Dan

Nad-Dan a écrit :

Bonjour,

Faudrait voir ta macro mais pour enlever une USF --> UNLOAD.nom de l'USF.

ex : si l'USERFORM s'appelle userform1 --> UNLOAD.USERFORM1

Amicalement

Dan

Voici ma macro:

Sub imprime_tout()

'l'instruction ChDir permet de se positionner
'sur un répertoire précis
ChDir "C:\Bulletins" & Range("D13").Value & ""
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Call imprime_tout_suite
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Wend
End Sub

Sub imprime_tout_suite()
Sheets("Comportement").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Éveil -Religion").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Math").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Français").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Lacunes").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Où dois-je placer unload.useform1 ?

re,

Je ne vois où ton USF s'affiche dans cette macro.

Dis moi aussi quel est le but de l'USF

A te lire

Dan

L'UserForm est contenu dans chacun des fichiers contenus dans le répertoire "bulletins". Il se lance automatiquement au lancement de chaque fichier.

Il faudrait donc avant de faire "call imprimer_tout_suite" que l'userform de chaque fichier ouvert soit fermé automatiquement.

re,

désole de toutes ces questions mais je dois comprendre.

Dans ton USF tu as un bouton pour lancer l'impression ?

Dan

Non, non, ce n'est pas ça...

Je réexplique autrement:

J'ai un fichier général "Bulletin.xls". Ce fichier me permet d'agir sur les bulletins de chaque enfant. Bulletin.xls contient un userform qui permet de choisir l'année et la période afin que la liste des enfants s'affiche automatiquement. Lorsque je crée un bulletin d'enfant ce userform persiste. Il s'ouvre donc au démarrage et il suffit de le fermer pour ne rien modifier dans le bulletin de l'enfant.

La macro que je présente ici ce lance depuis le fichier Bulletin.xls et ouvre tous les bulletins des enfants pour les imprimer un à un. Seulement, pour chaque bulletin qui s'ouvre, le userform apparaît et empêche l'exécution de l'impression tant qu'il n'est pas fermé.

Je voudrais donc incorporé dans ma macro qui imprime tous les fichiers une commande qui ferme à chaque ouverture d'un bulletin d'enfant le userform automatiquement pour que l'impression se lance et que l'utilisateur ne doivent pas fermer manuellement le fichier à chaque fois.

re,

Merci de tes explications.

La macro que je présente ici ce lance depuis le fichier Bulletin.xls...ouvre tous les bulletins des enfants

Ok. Cette macro ne peut se lancer toute seule. Elle est placée dans un module et donc attends une commande venant d'ailleurs ou de toi par un bouton par exemple.

Peux-tu me montrer le code qui ouvre l'USF dans ton fichier Bulletin.

Dan

Le code se trouve dans ThisWorkbook:

Sub Workbook_Open()
Sheets("Infos générales").Select
Range("D8").Select
UserForm1.Show
End Sub

re,

Ok c'est mieux là.

Essaye en plaçant ce code dans la macro Sub imprime_tout()

Avant Call imprime_tout_suite mets --> UserForm1.Hide

ou

Après Sub imprime_tout() mets --> UserForm1.Hide

Autre chose,

1. ta macro dans THISWORBOOK devraiit être :

Private Sub Workbook_Open()
Sheets("Infos générales").Range("D8").Select
UserForm1.Show
End Sub

2. si cette macro imprime toutes les feuilles de ton fichier (il doit être actif - donc au premier plan) tu peux mettre le code suivant :

Sub imprime_tout_suite()
Sheets.PrintOut Copies:=1, Collate:=True
End sub

On peut encore améliorer ces codes si tu veux.

A te lire

Dan

Pour l'impression, je n'imprime pas l'ensemble des feuilles du fichier... Voilà pourquoi je sélectionne feuille par feuille.

J'ai modifié le "Private...".

Par contre le UserForm1.Hide ne fonctionne pas où que je le place. Le fichier que j'ouvre bloque tout de même au Useform qui attend que je le ferme...

Merci à toi pour l'aide que tu m'apportes ! C'est vraiment gentil !

re,

Peux-tu me donner ton fichier que je vois cela ?

Je dois comprendre comment la macro d'impression est exécutée lorsque l'USF est ouverte.

A te lire

Dan

Nad-Dan a écrit :

re,

Peux-tu me donner ton fichier que je vois cela ?

Je dois comprendre comment la macro d'impression est exécutée lorsque l'USF est ouverte.

A te lire

Dan

Je viens de t'envoyer un MP...

Re,

Il n'y a pas d'USF dans ton fichier là ...et je ne vois pas la macro dans THISWORBOOK

Dan

Re,

Remplace ta macro par celle-ci :

Sub imprime_tout()
'l'instruction ChDir permet de se positionner
'sur un répertoire précis
Application.EnableEvents = False
ChDir "C:\Bulletins\" & Range("D13").Value & "\"
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Application.EnableEvents = True
Call imprime_tout_suite
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Wend
End Sub

A te lire

Dan

C'est exactement ce qu'il me fallait: les fichiers s'ouvre bien un par un mais le userform ne s'affiche pas et donc la macro peut continuer son travail en toute autonomie.

La macro que tu proposes ne présente donc aucun problème apparent: le fichier marche parfaitement bien sans planter.

Je te remercie sincèrement pour ton aide et ta disponibilité !

Petit accroc à notre code d'hier...

Je n'avais pas testé pour l'ouverture de plusieurs fichiers. Je l'ai fait aujourd'hui. Pour le premier fichier, cela marche nickel. Pour les autres le useform apparaît et ne se ferme pas.

Ne faut-il pas créer un boucle ou un truc du genre?

Re,

Lorsque tu demandes l'impression avec la macro imprime tout, tous les fichiers sont bien ouverts ou tu les ouvres un par un ?

J'ai compris que tu les ouvrais tous en une seule fois.

Tu peux confirmer cela ?

A te lire

Dan

Non: un fichier s'ouvre, s'imprime, se ferme, un autre s'ouvre, s'imprime se ferme, un autre s'ouvre...

Donc, l'impression se fait un par un.

6prodc.zip (9.80 Ko)

re,

Bon je n'ai plus ton fichier mais dans la macro "imprime tout" mets l'instruction --> Application.EnableEvents = True entre WEND et END SUB.

Dan

Rechercher des sujets similaires à "fermer serform macro"