Aperçu avant impression n'apparaît pas au bon moment

Bonsoir,

Toujours sur mon projet de pointeuse pour le boulot, je rencontre un problème pour lequel je n'ai trouvé aucune solution aussi bien dans le forum que sur d'autres sites qui traitent de ce sujet.

Pour vous expliquer le contexte : un userform (dlgGestion) propose plusieurs boutons pour la gestion des données de la pointeuse. L'un de ces boutons vise à lister les oublis de pointage (le salarié a pointé en entrant et pas en sortant ou le contraire). Le bouton affiche un autre userform (DlgListerOublis) qui demande une date de début, une date de fin, et un bouton Valider permet d'extraire les données correspondantes, puis d'en faire l'aperçu avant impression, avant de revenir au userform de départ (dlgGestion).

Mon problème survient à l'exécution de la macro, quand l'ordre est donné de faire l'aperçu. La macro affiche alors le userform de départ, mais pas l'aperçu, et l'aperçu apparaît lorsque je clique sur la croix de fermeture de ce userform...

Voici le code que j'utilise en cliquant sur le bouton Valider du Userform DlgListerOublis :

Private Sub btValider_Click()
'vérifications sur la date de début
DateFin = ""
DateDébut = Me.ztDateDébut.Value
If .....
.....
End If

Me.Hide
Unload DlgListerOublis

'insertion des critères dans la zone de critères de la feuille recherche_oublis
.....

'récupération de la plage de cellules des données
.....

'extraction des données
.....

'extraction oublis
.....

plage = Range("D1:H" & Cells(Rows.Count, "D").End(xlUp).Row).AddressLocal

'aperçu avant impression de la liste des oublis
ActiveSheet.PageSetup.PrintArea = plage
If Not DateFin = "" Then FinPériode = " au " & DateFin Else FinPériode = ""

Application.CutCopyMode = False
Application.PrintCommunication = False

With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintTitleColumns = ""
        .LeftHeader = "Pharmacie XXXXX"
        .CenterHeader = ""
        .RightHeader = "Liste des oublis de pointage" & Chr(10) & "pour la période du " & DateDébut & FinPériode
        .LeftFooter = ""
        .CenterFooter = "Page &P de &N"
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.78740157480315)
        .RightMargin = Application.InchesToPoints(0.78740157480315)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = True
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = True
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
End With

Application.PrintCommunication = True

Application.Dialogs(xlDialogPrintPreview).Show

Fin:
'RAZ paramètres d'impression
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
ActiveSheet.PageSetup.PrintArea = False

Sheets("recherche_oublis").Visible = xlVeryHidden
Sheets("données").Visible = xlVeryHidden
Sheets("Accueil").Activate

Load dlgGestion
dlgGestion.Show

End Sub

Pourtant j'ai bien mis l'aperçu avant impression avant de recharger et d'afficher la boîte de dialogue dlgGestion ! Qu'est-ce qui peut bien clocher ?

Auriez-vous une idée de ce qui ne va pas ?

Petite info supplémentaire : quand j'ai commencé à écrire le code, je n'avais pas mis la partie sur la mise en page (de Application.CutCopyMode =False à Application.PrintCommunication = True) et ça fonctionnait à merveille. Puis j'ai enregistré la mise en page des données via l'enregistreur de macros, et j'ai copié/collé le code en y ajoutant les variables DateDébut et FinPériode dans l'en-tête. C'est à partir de ce moment-là que ça a déconné...

Bonjour,

C'est pas évident de se prononcer pour l'instant. En attendant que vous obteniez meilleure réponse, voici un essai, sait-on jamais :

plage = Range("D1:H" & Cells(ActiveSheet.Rows.Count, 8).End(xlUp).Row).Address

en remplacement de la ligne.

A quoi sert l'étiquette Fin ? Il y a une instruction on error quelque part, qu'on ne voit pas dans le code ?

Et à votre place, j'essaierais aussi sans les lignes Application.printcommunication.

Cdlt,

Salut,

En voyant ton code enregistré à l'aide de l'enregistreur de macro, ça fout un peu la trouille, mais bon, on en a vu d'autres

On peut voir ton fichier ? Ou du moins un fichier-modèle contenant la macro ?

Cordialement.

EDIT : Salut 3GB. Apparemment, après plus de 24 heures d'attente, on a eu la même idée pratiquement au même moment

Salut Yvouille,

Oui, il était dans mes sujets suivis, alors le voyant sans réponse, je me suis dit que j'allais essayer quelque chose.

Et décidément, on se suit ce soir !

Bonjour,

Je vous envoie le fichier dans lequel j'ai juste mis les initiales au lieu des noms et prénoms des salariés. La seule chose que vous ne pourrez pas tester, c'est le pointage en lui-même puisqu'on utilise chacun un code barre différent et un mot de passe (effacés). Il vous suffira de cliquer sur le bouton Gestion pour accéder à la fameuse dlgGestion (les boutons en bleu sont des utilitaires en cours de réalisation). Le mot de passe que j'ai mis pour que vous puissiez y accéder est 0000.

3GB, merci pour cette modif de ligne. En ce qui concerne l'étiquette Fin, c'est pour sauter toutes les étapes de mise en page et aperçu si il n'y a aucun oubli de pointage (une utopie !).

Et effectivement, sans les instructions Application.printcommunication ça fonctionne à merveille... comme quoi l'enregistreur de macro c'est un bon début, mais à épurer et à retravailler. D'ailleurs, j'imagine aisément que la plupart des options de la mise en page pourraient être supprimées, mais comme je ne connais pas toutes ces options et qu'en réalisant tout ça au boulot dans les moments calmes, j'avoue que je n'ai pas pris le temps de me pencher dessus pour nettoyer tout ça.

Vous trouverez sans doute des bouts de code qui pourraient être simplifiés, voire améliorés, et vos remarques seront les bienvenues.

Bien à vous

26pointeusephie.xlsm (223.30 Ko)

Bonjour,

Pour ma part, je ne vois rien du tout sur votre fichier (j'ai un mac) qu'on me demande de réparer à l'ouverture .

Mais si ça marche, alors c'est bien. Je pense que le rétablissement de la communication à l'imprimante survient trop tard et je doute que son interruption ait un intérêt majeur (en tout cas dans votre cas).

Oui, en effet, il y a plein de propriétés par défaut à effacer (déjà, toutes celles avec les valeurs "") et possiblement les marges aussi.

Cdlt,

Rechercher des sujets similaires à "apercu impression apparait pas bon moment"