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

  • Initiateur de la discussion Initiateur de la discussion Yvan1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
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
 
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 @ 🙂,

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
 
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)
Pour afficher ce contenu, nous aurons besoin de votre consentement pour définir des cookies tiers.
Pour plus d'informations, consultez notre page sur les cookies.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
747
Retour