Bonjour,
Grâce à divers posts que j'ai consultés, je sais identifier la dernière colonne non vide d'une feuille. Mais il y a une étape de mon code où je ne parviens pas à le mettre en place. Sur une feuille Excel, j'ai plusieurs tableaux issus d'un premier traitement. Ces tableaux n'ont pas le même nombre de colonnes en raison de la longueur de certains champs issus du premier traitement (cf "FichierBase"). Je fais une macro insérant chaque tableau dans un nouvel onglet, et le titre de la feuille principale "résultats" est également recopié sur chaque nouvel onglet.
Je souhaite automatiser la zone d'impression et la définir sur la largeur du tableau (égal au nombre de colonnes non vides), mais c'est là que je ne parviens pas bien à compter le nombre de colonnes non vides: pour chaque onglet, le nombre de colonnes affichées (et donc imprimées) est égal au nombre de colonnes maximum dans les tableaux de l'onglet initial "résultats" (cf "FichierObtenu").
FichierBase.xlsm
FichierObtenu.xlsm
Alors pour économiser du papier, comment puis-je faire? Merci de votre aide!
Je mets également le code ici pour plus de lisibilité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 Sub SeparerSection() Dim i As Integer Dim j As Integer Dim NomOnglet As String Dim DerniereLigne As Integer Dim Feuille As Worksheet 'Mise en forme pour gérer la zone d'impression finale: fond transparent Sheets("Résultats").Activate Cells.Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With 'Dernière ligne absolue de la feuille DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row For i = 1 To DerniereLigne If Cells(i, 1).Font.Size = 14 Then NomOnglet = Cells(i, 1) Set Feuille = Sheets.Add(After:=Sheets(Sheets.Count)) Feuille.Name = NomOnglet Sheets("Résultats").Activate j = i + 1 Do While Cells(j, 1).Font.Size <> 14 j = j + 1 'Gestion de la fin du fichier If j = DerniereLigne Then Exit Do End If Loop Range(Rows(i), Rows(j - 2)).Select Selection.EntireRow.Cut Feuille.Paste Feuille.Activate Call MiseEnForme1 Set Feuille = Nothing 'Copier l'en-tête de l'onglet "Résultats" et l'insérer en haut de chaque nouvel onglet Sheets("Résultats").Select Selection.Delete Shift:=xlUp Sheets("Résultats").Select Rows("1:5").Select Selection.Copy Sheets(NomOnglet).Select Rows("1:1").Select Selection.Insert Shift:=xlDown Call MiseEnForme2 Sheets("Résultats").Activate End If Next End Sub Sub MiseEnForme1() Dim k As Integer Dim DerCol As Integer 'suppression des colonnes vides DerCol = Range("A1").SpecialCells(xlCellTypeLastCell).Column For k = DerCol To 1 Step -1 If Cells(65536, k).End(xlUp).Row = 1 Then Cells(1, k).EntireColumn.Delete End If Next End Sub Sub MiseEnForme2() Dim DerL As Integer Dim DerC As Integer 'Affichage en mode saut de page ActiveWindow.View = xlPageBreakPreview 'Définition de la zone d'impression DerL = Range("A1").SpecialCells(xlCellTypeLastCell).Row DerC = Range("A1").SpecialCells(xlCellTypeLastCell).Column ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(DerL, DerC)).Address Range("A1:F1").Select End Sub
Partager