Etaler les valeurs d'une colonne sur plusieurs
Bonjour,
J'ai 456977 lignes de remplie sur une seule colonne. J'aimerais imprimer les 456977 lignes, sauf qu'il me faut + de 9500 feuilles (A4) à mettre dans l'imprimante. J'aimerais donc mettre le plus de valeur possible sur la même feuille de façon à utiliser le moins de feuille possible.
Vous trouverez ci-joint une photo des premières lignes mon fichier excel. Je vous remercie d'avance pour votre aide.
Théo.
Bonjour,
Voici une piste qui doit sûrement être adaptée ! Voir les commentaires dans le code. Test à faire sur une copie de ton classeur :
Private Sub SautDePage()
Dim Plage As Range
Dim Hauteur As Long
Dim Largeur As Long
Dim I As Long
Dim Col As Long
Dim Lig As Long
With ActiveSheet
Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
'déplace la feuille pour forcer l'affichage des sauts de page automatiques
ActiveWindow.ScrollRow = Plage.Rows.Count
ActiveWindow.ScrollRow = 1
'récupère le nombre de lignes et de colonne qui définisseut la zone d'impression d'une feuille
'comme les valeurs sont sur une seule colonne, insère une ligne et rempli avec du texte bidon
'afin de pouvoir récupérer le nombre de colonnes
'ATTENTION, les cellules doivent impérativement être de même hauteur et les colonnes de même largeur
.Cells.RowHeight = 15
.Cells.ColumnWidth = 12
.Cells(1, 1).EntireRow.Insert
.Range(.Cells(1, 1), .Cells(1, 100)).Value = "Titre"
Hauteur = .HPageBreaks(1).Location.Row - 1
Largeur = .VPageBreaks(1).Location.Column
.Cells(1, 1).EntireRow.Delete
'affiche un message si la hauteur de la zone d'impression n'a pas pû être recupèrée et fin !
If Hauteur = 0 Then
MsgBox "Il n'a pas été possible de définir la hauteur de la zone d'impression avant le saut de page !"
Exit Sub
End If
Col = 1
Lig = 1
For I = Hauteur To Plage.Count Step Hauteur
Col = Col + 1
If Col = Largeur Then
Col = 1
Lig = Lig + Hauteur
End If
'transfert des valeurs et suppression
Range(Cells(Lig, Col), Cells(Lig + Hauteur - 1, Col)).Value = Range(Cells(I + 1, 1), Cells(I + Hauteur, 1)).Value
Range(Cells(I + 1, 1), Cells(I + Hauteur, 1)).Value = ""
Next I
End With
End SubBonjour,
Je vous remercie, je vais essayer.
Pourriez vous me faire la même chose pour pouvoir imprimer sur un format A3?
Merci énormément pour votre aide.
Théo
Bonjour,
Voici une piste qui doit sûrement être adaptée ! Voir les commentaires dans le code. Test à faire sur une copie de ton classeur :
Private Sub SautDePage() Dim Plage As Range Dim Hauteur As Long Dim Largeur As Long Dim I As Long Dim Col As Long Dim Lig As Long With ActiveSheet Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 'déplace la feuille pour forcer l'affichage des sauts de page automatiques ActiveWindow.ScrollRow = Plage.Rows.Count ActiveWindow.ScrollRow = 1 'récupère le nombre de lignes et de colonne qui définisseut la zone d'impression d'une feuille 'comme les valeurs sont sur une seule colonne, insère une ligne et rempli avec du texte bidon 'afin de pouvoir récupérer le nombre de colonnes 'ATTENTION, les cellules doivent impérativement être de même hauteur et les colonnes de même largeur .Cells.RowHeight = 15 .Cells.ColumnWidth = 12 .Cells(1, 1).EntireRow.Insert .Range(.Cells(1, 1), .Cells(1, 100)).Value = "Titre" Hauteur = .HPageBreaks(1).Location.Row - 1 Largeur = .VPageBreaks(1).Location.Column .Cells(1, 1).EntireRow.Delete 'affiche un message si la hauteur de la zone d'impression n'a pas pû être recupèrée et fin ! If Hauteur = 0 Then MsgBox "Il n'a pas été possible de définir la hauteur de la zone d'impression avant le saut de page !" Exit Sub End If Col = 1 Lig = 1 For I = Hauteur To Plage.Count Step Hauteur Col = Col + 1 If Col = Largeur Then Col = 1 Lig = Lig + Hauteur End If 'transfert des valeurs et suppression Range(Cells(Lig, Col), Cells(Lig + Hauteur - 1, Col)).Value = Range(Cells(I + 1, 1), Cells(I + Hauteur, 1)).Value Range(Cells(I + 1, 1), Cells(I + Hauteur, 1)).Value = "" Next I End With End Sub
Re,
Il te faut paramétrer l'imprimante que tu souhaites utiliser en indiquant dans les propriétés le format de papier que tu veux et ensuite, tu annule l'impression et tu lance la proc que je t'ai donné car les sauts de pages seront définis pour un format A3
Voici le message affiché sur mon écrans lorsque j’exécute la macro
Re,
Il te faut paramétrer l'imprimante que tu souhaites utiliser en indiquant dans les propriétés le format de papier que tu veux et ensuite, tu annule l'impression et tu lance la proc que je t'ai donné car les sauts de pages seront définis pour un format A3
Super, ça marche!
Merci à vous deux.