Discussion:
Macro impression VBA
(trop ancien pour répondre)
Droopy191
2020-08-21 12:23:56 UTC
Permalink
Bonjour,

J'ai un "bug" dans un fichier excel constitué de la sorte:
une feuille de saisie de données "Saisie_information"
et 3 feuilles qui sont remplies en fonction de cette feuille de saisie.
Un bouton sur la feuille "Saisie_information" qui imprime ou pas, une
certaine quantité de ces 3 feuilles.

Ca marche presque comme il faut, sauf que systématiquement, la feuille
**"Saisie_information" est aussi imprimée en premier **.


la macro qui déclenche l'impression :
pour chaque feuille, test si impression ou, et lancement impression avec
un paramètre quantité

----------------------------------------
Private Sub Impression_Docs()
'Impression

With ActiveWorkbook.Worksheets("Saisie_information")


'demande le choix d'imprimante ou sort
If Application.Dialogs(xlDialogPrint).Show = False Then
Exit Sub
End If

'Impression Demande de Transport
If .Range("F12").Value = True Then
Sheets("Demande Transport").PrintOut , ,
Copies:=Application.Worksheets("Saisie_information").Range("G12").Value,
Collate:=False, IgnorePrintAreas:=False
End If

'Impression BL
If .Range("F13").Value = True Then
Sheets("BL").PrintOut , ,
Copies:=Application.Worksheets("Saisie_information").Range("G13").Value,
Collate:=False, IgnorePrintAreas:=False
End If

'Impression PROFORMA
If .Range("F14").Value = True Then
Sheets("PROFORMA").PrintOut , ,
Copies:=Application.Worksheets("Saisie_information").Range("G14").Value,
Collate:=False, IgnorePrintAreas:=False
End If



End With

End Sub
----------------------------------------

Je rate un truc ou la macro est mal faite ?
Faudrait il sélectionner chaque feuille avant impression ?


Votre aide serait bienvenue.
--
DR
MichD
2020-08-21 18:20:33 UTC
Permalink
Bonjour,

Quand tu fais apparaître cette fenêtre :
Application.Dialogs(xlDialogPrint).Show

À la section "Impression" de la fenêtre, tu as le choix de "Sélection"
qui représente une plage de cellule ou un objet dans une feuille de
calcul OU "Feuilles sélectionnées" ce qui signifie seulement les
feuilles qui sont sélectionnées au lancement de la macro sera imprimé.
Par conséquent si la feuille "Saisie_information" est la feuille active,
elle fait partie des "Feuilles sélectionnées" par défaut et elle sera
imprimée.


Essaie comme ceci :

'----------------------------------------
Sub test()
Dim Arr(), C As Range, A As Long
'Liste des feuilles à imprimer, tu peux en ajouter comme tu veux
'en respectant le format.
Arr = Array("Demande Transport", "Impression BL", "Impression PROFORMA")

'À partir de la feuille de saisie_information
With ActiveWorkbook.Worksheets("Saisie_information")
'Boucle sur la plage F12:F14
For Each C In .Range("F12:F14")
'Si la cellule est égale à True
If C.Value = True Then
'La première feuille doit avoir la valeur 0
'car arry "Arr" est de base zéro
A = A + 1 - 1
'Lancement de l'impression de la feuille
'C.Offset(, 1).Value représente la cellule de la colonne G
Sheets(Arr(A)).PrintOut , , C.Offset(, 1).Value,
Collate:=False, IgnorePrintAreas:=False
End If
Next
End With
End Sub
'----------------------------------------

MichD
Droopy191
2020-08-22 06:24:00 UTC
Permalink
Merci

J'ai compris mon erreur avec Application.Dialogs(xlDialogPrint).Show
Et je teste votre macro dès lundi.

Par contre, Je ne vois pas comment est demandé le choix de l'imprimante
dans votre proposition.
--
DR
MichD
2020-08-22 11:12:02 UTC
Permalink
Post by Droopy191
Merci
J'ai compris mon erreur avec Application.Dialogs(xlDialogPrint).Show
Et je teste votre macro dès lundi.
Par contre, Je ne vois pas comment est demandé le choix de l'imprimante
dans votre proposition.
Si tu dois faire le choix de l'imprimante, insère ceci au début de la
procédure :

'---------------------------------
Dim OK As Boolean
'Affiche la liste des imprimantes disponibles
OK =Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show

'Si l'usager ferme la fenêtre par "OK", l'impression est lancée.
If OK = False Then
'Si l'usager ferme la fenêtre par "Annuler", Arrêt de la procédure.
Exit Sub
End If
'---------------------------------

MichD
Droopy191
2020-08-24 08:12:03 UTC
Permalink
Bonjour,


Au final, ca donne ca.
Merci de votre aide


Sub Impression_Docs()
' Impression des feuilles

Dim Arr(), C As Range, A As Long, OK As Boolean
' Liste des feuilles à imprimer, ajouter des noms de feuilles si besoin,
et ajouter les paramètres en F12:G1X pour cette nouvelle feuille
Arr = Array("Demande Transport", "BL", "PROFORMA")
' initialisation du numéro de feuille, le premier élément du tableau arr
est arr(0)
A = 0


'Affiche la liste des imprimantes disponibles
OK = Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show

'Si l'usager ferme la fenêtre par "OK", l'impression est lancée.
If OK = False Then
'Si l'usager ferme la fenêtre par "Annuler", Arrêt de la procédure.
Exit Sub
End If


'À partir de la feuille de saisie_information
With ActiveWorkbook.Worksheets("Saisie_information")
'Boucle sur la plage F12:F14
For Each C In .Range("F12:F14")
'Si la cellule est égale à True
If C.Value = True Then

'Lancement de l'impression de la feuille
'C.Offset(, 1).Value représente la cellule de la colonne G
Sheets(Arr(A)).PrintOut , , C.Offset(, 1).Value,
Collate:=False, IgnorePrintAreas:=False

'Passage à la prochaine feuille
A = A + 1
End If
Next
End With

Sheets("Saisie_information").Select

End Sub
--
DR
Loading...