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
Bonjour à toutes & à tous, bonjour @Yvan1,
J'y vais de ma solution, sans coder les plages en dur car :
Donc il faut que se soit évolutif ...
J'ai converti la plage de donnée en tableau structuré "Tb_Produit" (j'aime bien les tableaux structurés 😉)
J'ai ajouté une colonne pour savoir si la ligne est filtrée ou non :
VB:
=SOUS.TOTAL(103;Tb_Produit[[#Cette ligne];[Produit]:[T9]])<>0
J'ai créé un nom (J'aime bien les noms 😉) qui définit ma zone d'impression :
Code:
Ma_ZI : =DECALER(Tb_Produit[#Tout];0;0;;NbCols)

J'utilise l'événement Workbook.BeforePrint
VB:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
     If ActiveSheet.CodeName = "Feuil1" Then
          With Feuil1
               .PageSetup.PrintArea = [Ma_Zi].Address
          End With
     End If
End Sub

Voilà, si les valeurs pour un produit évolue, la zone s'adaptera.
A bientôt

EDIT
En fait j'ai créé 2 noms
NbCols : =MAX(SI((Tb_Produit[[Produit]:[T9]]<>"")*Tb_Produit[Visible];COLONNE(Tb_Produit[[Produit]:[T9]]);0))
 

Pièces jointes

Dernière édition:
- 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