XL 2013 Adapter la zone d'impression aux données

Yvan1

XLDnaute Occasionnel
Bonjour,
Je souhaite adapter la zone d'impression en fonction des données présentes.
Dans l'exemple joint, en fonction du critère choisi dans la colonne A, la zone doit se limiter aux x premières colonnes.
Exemple :
- Si on choisit le produit A, zone définie de A2:F18
- Si on choisit le produit B, zone définie de A2:G23
- Si on choisit le produit C, zone définie de A2:H20
Quelqu'un a-t-il une idée ?
Merci d'avance,
Yvan
 

Pièces jointes

  • Classeur1.xlsx
    8.8 KB · Affichages: 10
Solution
@patricktoulon @ :),

Pourquoi programmes-tu les zones d'impression en "dur" ?

Selon moi, le code suivant s'adapte à n'importe quel filtre, enfin je pense...
VB:
Private Sub DefPrintArea()
Dim i&, j&
   With Sheets("Feuil1")
      For j = Range("j1").Column To 1 Step -1
         If .Cells(Rows.Count, j).End(xlUp).Row > 2 Then Exit For
      Next j
      i = .Cells(Rows.Count, "a").End(xlUp).Row
      If i > 2 And j > 0 Then .PageSetup.PrintArea = .Range("a2").Resize(i - 1, j).Address
   End With
End Sub

Phil69970

XLDnaute Barbatruc
Bonjour @Yvan1

Je te propose ce fichier
J'ai commenté le code donc tu peux facilement l'adapter si besoin
Tu sélectionnes ton filtre en B1 et tu cliques sur le bouton impression

Merci de ton retour
 

Pièces jointes

  • Adapte zone impression V1.xlsm
    17.9 KB · Affichages: 3

Yvan1

XLDnaute Occasionnel
Bonjour Phil69970,
Merci pour cette proposition, mais l'objectif est que cela se fasse de façon dynamique, en fonction des données...
Je continue à chercher de mon côté.
En tout cas, merci pour le temps passé.
Yvan
 

Nain porte quoi

XLDnaute Junior
Hello,

ça devrait faire l'affaire
VB:
Sub Imprime_Zone()
    
    Dim Num_Der_Col, Num_Der_Lig, Der_Col, Der_Lig
    
    Num_Der_Col = ActiveCell.SpecialCells(xlLastCell).Column
    Num_Der_Lig = ActiveCell.SpecialCells(xlLastCell).Row
    
    For Der_Col = Num_Der_Col To 1 Step -1
        Der_Lig = Cells(Rows.Count, Der_Col).End(xlUp).Row
        If Der_Lig > 2 Then Exit For
    Next Der_Col
    
    Zone_Imp = Range(Cells(2, 1), Cells(Num_Der_Lig, Der_Col)).Address
    ActiveSheet.PageSetup.PrintArea = Zone_Imp
    ActiveSheet.PrintPreview
    
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
il est inutile dans ce cas présent de déterminer les lignes seules les colonnes compte
Excel n'imprime que ce qu'il y a à imprimer
autrement dit toute les lignes masquées ne le sont pas

ajoutez autant de case que nécessaire

les address de zone doivent être en absolu("$")

remplacer "PrintPreview" par "Printout"

VB:
Sub paramPageSetup()
    Dim Addr$, Lettre$
    Lettre = Feuil1.Range("A3:J" & Feuil1.UsedRange.Rows.Count).SpecialCells(xlVisible).Cells(1).Text
       With Sheets("Feuil1").PageSetup
        Select Case Lettre
        Case "A": Addr = "$A:$F"
        Case "B": Addr = "$A:$G"
        Case "C": Addr = "$A:$H"
        Case "D":
        Case "E"
            'etc..
        Case Else: Addr = "$A:$J"
        End Select

        .PrintArea = Addr          'défini la Zone d'impression
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .LeftMargin = 0
        .RightMargin = 0
        .TopMargin = 0
        .BottomMargin = 0
        .Orientation = xlPortrait
    End With
    '*****
End Sub

Sub Impression()
    paramPageSetup
    DoEvents    'permetre  à  l'application le temps de faire le job de definition de zone d'impression
    Sheets("Feuil1").PrintPreview
End Sub


étant donné que même pour le printpreview l'event beforePrint est déclenché
on aurait pu lancer paramsetup dans cett event mais il n'en ai rien la zone dans cet event n'est plus définissable même en faisant un cancel et un paramsetup et un printout par vba
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour @Phil69970
j'ai testé ton fichier post #4 déja

je cite le demandeur :
Exemple :
- Si on choisit le produit A, zone définie de A2:F18
- Si on choisit le produit B, zone définie de A2:G23
- Si on choisit le produit C, zone définie de A2:H20
toi tu imprime jusqu’à "J" soit "T9" pour "A , B ou C" avec ton fichier Post#4
Bref chez moi ça ne fonctionne pas ton truc
1713255620798.png
 

mapomme

XLDnaute Barbatruc
Supporter XLD
@patricktoulon @ :),

Pourquoi programmes-tu les zones d'impression en "dur" ?

Selon moi, le code suivant s'adapte à n'importe quel filtre, enfin je pense...
VB:
Private Sub DefPrintArea()
Dim i&, j&
   With Sheets("Feuil1")
      For j = Range("j1").Column To 1 Step -1
         If .Cells(Rows.Count, j).End(xlUp).Row > 2 Then Exit For
      Next j
      i = .Cells(Rows.Count, "a").End(xlUp).Row
      If i > 2 And j > 0 Then .PageSetup.PrintArea = .Range("a2").Resize(i - 1, j).Address
   End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @mapomme
la demande n'est pas une adaptation a ce qui est visible mais bien des colonnes définies selon la lettre filtrée en colonne "A"
je recite le demandeur
Exemple :
- Si on choisit le produit A, zone définie de A2:F18
- Si on choisit le produit B, zone définie de A2:G23
- Si on choisit le produit C, zone définie de A2:H20
Quelqu'un a-t-il une idée ?
@Phil69970
demo de ton fichier en video
+ explication sur le fait que l'on peut pas gérer ça dans le beforePrint (ce qui aurait été genial)
 

patricktoulon

XLDnaute Barbatruc
re
perso pour moi il n'y a rien a comprendre quand la demande est claire et explicitement exprimée
je cite
Exemple :
- Si on choisit le produit A, zone définie de A2:F18
- Si on choisit le produit B, zone définie de A2:G23
- Si on choisit le produit C, zone définie de A2:H20
Quelqu'un a-t-il une idée ?
maintenant oui ça correspond a l'usedrange des lignes filtrée sur la colonne "A" je te l'accorde
 

Discussions similaires

Réponses
16
Affichages
485

Statistiques des forums

Discussions
312 243
Messages
2 086 541
Membres
103 244
dernier inscrit
lavitzdecreu