[RESOLU] Zoom maxi à l'impression en fonction d'une zone d'impression variable

piga25

XLDnaute Barbatruc
Bonjour le forum

J'ai une feuille d'étiquettes qui se renseigne automatiquement en fonction du produit choisi. Certaines de ces lignes s'ajustent automatiquement en hauteur avec centrage sur plusieurs colonnes.
Je dois imprimer ces étiquettes suivant un format mini bien défini (en fonction de la capacité de l'emballage). Pour l'impression, j'utilise toujours une feuille autocollante de format A4. Afin d'optimiser au maximum cette feuille il y a:
- de 0 à 3 l : 8 étiquettes / page (orientation portrait) correspond à la zone_impr_1
- de 3 à 50 l : 4 étiquettes / page (Orientation paysage) correspond à la zone_impr_2
- de 50 à 500 l : 2 étiquettes / page (orientation portrait) correspond à la zone_impr_3
- Plus de 500 l : 1 étiquette / page (Orientation paysage) correspond à la zone_impr_3
J'ai bien trouvé un code qui normalement permet d'ajuster au maximum la zone d'impression à la page (http://www.excel-downloads.com/forum/77596-impression-ajuster-1-page.html) mais je n’arrive pas à le modifier pour mon application.
Ce que je souhaiterai avoir c’est au lancement de l’impression (clic sur bouton) pouvoir choisir entre les zone_impr_ 1 à 4 et que cette zone s’imprime au zoom maximum possible et dans la bonne orientation.
Merci
 

Pièces jointes

  • Imprime étiquette.xls
    80 KB · Affichages: 65
Dernière édition:

Hippolite

XLDnaute Accro
Re : Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonjour,
Je ne suis pas arrivé à faire fonctionner de façon satisfaisante ton code de zoom automatique.
Voilà une version où les zooms doivent être préprogrammés.
A+
 

Pièces jointes

  • Imprime étiquette+.xls
    100.5 KB · Affichages: 100

piga25

XLDnaute Barbatruc
Re : Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonjour hippolite et le forum

Déjà merci pour ce code. Je test dans le fichier de ma base.
Je donnerai le résultat.

Tout comme toi, j'étais reparti sur une façon avec des zooms définis. Le seul inconvéniant dans cette façon c'est lorsque certaines lignes de l'étiquette augmentent en taille.
 

piga25

XLDnaute Barbatruc
Re : Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonsoir hippolite et le forum

Ton code fonctionne bien dans ton fichier mais lorsque je l'ai intégré dans mon application j'ai trois soucis:
1 : Lorsque j'imprime la fiche, j'ai l'USF (Nb d'étiquettes) qui s'affiche. Néanmoins cela n'a aucune conséquence pour l'impression.
2 : Pour l'impression des étiquettes cela modifie systématiquement les valeurs des zone_Impr_1 à 3.
3 : Pour terminer, lorsqu'il y a plusieurs lignes dans une cellule, le format ne correspond plus. Je pense qu'en réglant le zoom au mini lorsqu'il y a une ligne par cellule, cela de manière à avoir la taille mini autorisée. C'est pour cette raison qu'au départ j'étais partie sur l'idée d'un réglage automatique du zoom afin de palier à l'ajustement automatique des hauteurs de ligne.

Edit :
Ci joint le fichier version modifié 4.2:
Le cas 1 est résolu, j'ai changer l'emplacement de la commande d'apparition de l'USF


MERCI
 

Pièces jointes

  • HSCT Excel2003 Version 4.2.zip
    241.5 KB · Affichages: 57
Dernière édition:

Hippolite

XLDnaute Accro
Re : Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonjour,
Totalement automatique, remplacer dans le module du post#2 :
VB:
Option Explicit
Public oChoix As Integer

Public Sub MiseEnPage()
    Dim Zmin As Integer, Zmax As Integer, Zmoy As Integer
    Dim Zone As String, Orient As String
    Dim oZoom As Integer
    Dim L, H

    Zmax = 400
    Zmin = 80
    
'Choix de la zône en fonction du nombre d'étiquettes
    UserForm1.Show
    Select Case oChoix
    Case 0    'pas de sélection
        Exit Sub
    Case 1    '1 étiquette
        Zone = Sheets("Etiquette").Range("Zone_impr_4").Address
    Case 2    '2 étiquettes
        Zone = Sheets("Etiquette").Range("Zone_impr_3").Address
    Case 3    '4 étiquettes
        Zone = Sheets("Etiquette").Range("Zone_impr_2").Address
    Case 4    '8 étiquettes
        Zone = Sheets("Etiquette").Range("Zone_impr_1").Address
    End Select
    
'Détermination Portrait/Payssage
    L = Range(Zone).Width
    H = Range(Zone).Height
    If L > H Then
        Orient = xlLandscape
    Else
        Orient = xlPortrait
    End If
    
'Mise en page
    Application.ScreenUpdating = False
    With Feuil2.PageSetup
        .PrintArea = Zone
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = 0
        .RightMargin = 0
        .TopMargin = 0
        .BottomMargin = 0
        .HeaderMargin = 0
        .FooterMargin = 0
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = Orient
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .PrintErrors = xlPrintErrorsDisplayed
        .Zoom = False       'mise sur une seule feuille
        .FitToPagesTall = 1 'nécessaire pour la détermination
        .FitToPagesWide = 1 'ultérieure du zoom
    End With

'Déterminarion du zoom
    Do While (Zmax - Zmin) > 1
        Zmoy = Int((Zmax + Zmin) / 2)
        Feuil2.PageSetup.Zoom = Zmoy
        Feuil2.PageSetup.PrintArea = Zone ' réactualise indirectement les sauts de page
        If Feuil2.HPageBreaks.Count = 0 And Feuil2.VPageBreaks.Count = 0 Then
            Zmin = Zmoy
        Else
            Zmax = Zmoy
        End If
    Loop
    Zmoy = Zmoy - 1  'marge pour les arrondis
    Feuil2.PageSetup.Zoom = Zmoy
    
    Application.ScreenUpdating = True
End Sub
A+
 
Dernière édition:

piga25

XLDnaute Barbatruc
Re : [RESOLU] Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonjour à tous,

En effet c'est encore mieux lorsqu'il y a des zone nommées.


Option Explicit
Public oChoix As Integer

Public Sub MiseEnPage()
Dim Zmin As Integer, Zmax As Integer, Zmoy As Integer
Dim Zone As String, Orient As String
Dim oZoom As Integer
Dim L, H

Zmax = 400
Zmin = 80

'Choix de la zône en fonction du nombre d'étiquettes
UserForm1.Show
Select Case oChoix
Case 0 'pas de sélection
Exit Sub
Case 1 '1 étiquette
Zone = [Zone_impr_4].Address
Case 2 '2 étiquettes
Zone = [Zone_impr_3].Address
Case 3 '4 étiquettes
Zone = [Zone_impr_2].Address
Case 4 '8 étiquettes
Zone = [Zone_impr_1].Address
End Select

'Détermination Portrait/Payssage
L = Range(Zone).Width
H = Range(Zone).Height
If L > H Then
Orient = xlLandscape
Else
Orient = xlPortrait
End If

'Mise en page
Application.ScreenUpdating = False
With Feuil2.PageSetup
.PrintArea = Zone
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = 0
.RightMargin = 0
.TopMargin = 0
.BottomMargin = 0
.HeaderMargin = 0
.FooterMargin = 0
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = Orient
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.PrintErrors = xlPrintErrorsDisplayed
.Zoom = False 'mise sur une seule feuille
.FitToPagesTall = 1 'nécessaire pour la détermination
.FitToPagesWide = 1 'ultérieure du zoom
End With

'Déterminarion du zoom
Do While (Zmax - Zmin) > 1
Zmoy = Int((Zmax + Zmin) / 2)
Feuil2.PageSetup.Zoom = Zmoy
Feuil2.PageSetup.PrintArea = Zone ' réactualise indirectement les sauts de page
If Feuil2.HPageBreaks.Count = 0 And Feuil2.VPageBreaks.Count = 0 Then
Zmin = Zmoy
Else
Zmax = Zmoy
End If
Loop
Zmoy = Zmoy - 1 'marge pour les arrondis
Feuil2.PageSetup.Zoom = Zmoy

Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Hippolite

XLDnaute Accro
Re : [RESOLU] Zoom maxi à l'impression en fonction d'une zone d'impression variable

Bonjour JM
Effectivement, le début du code peut être optimisé.
J'avais centré mon attention sur les sauts de page qui posaient des problèmes, j'en ai oublié d'optimiser le reste.
A+
 

Statistiques des forums

Discussions
312 275
Messages
2 086 707
Membres
103 377
dernier inscrit
fredy45