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.

sans titre sans titre2

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

Bonjour,

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

sans titre

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

Bonjour à tous

Une variante, à tester.

Bye !

17classeur1-v1.xlsm (35.12 Ko)

Super, ça marche!

Merci à vous deux.

Rechercher des sujets similaires à "etaler valeurs colonne"