Ajuster la zone d'impression dynamiquement selon le nombre de lignes

Bonjour,

Dans le fichier ci-joint :

• onglet "base" : on retrouve l'ensemble des données

• onglet "CDFx" : on a le détail pour un Centre De Frais donné

Chaque CDF a un nombre de lignes différent alors je voudrais que la zone d'impression se positionne toujours sur la dernière ligne pour chaque CDF.

Vous voyez comment procéder ?

Merci bien.

23bkta001.xlsx (128.07 Ko)

Bonjour,

Tu sélectionnes la feuille dont tu veux définir la zone d'impression et tu exécutes ce code :

Sub Test()

    With ActiveSheet

        .PageSetup.PrintArea = ""
        .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(.Cells(1, 7).Value + 5, 8)).Address

    End With

End Sub

Superbe

Question complémentaire : il y a moyen de l'exécuter sur plusieurs onglets en une seule fois ?

(J'ai une vingtaine d'onglets)

EDIT :

Pourrais-tu m'expliquer à quoi correspondent les chiffres ? Car ça ne marche pas bien dans mon fichier réel (mise en forme un peu différente).

Bonjour,

une proposition :

@ bientôt

LouReeD

On est à 99% de l'objectif

Merci !

J'ai juste changé la référence de la lettre de la dernière colonne et ça marche dans mon fichier réel.

Dernière chose, est-il possible d'exclure des onglets ? Ou lister les onglets à traiter ?

Bonjour,

A tester :

Sub Test()

    Dim TblFe
    Dim I As Integer

    TblFe = Array("CDF1", "CDF3") '<--- ici les différents noms de feuille visés

    For I = 0 To UBound(TblFe)

        With Worksheets(TblFe(I))

            .PageSetup.PrintArea = ""
            .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(.Cells(1, 7).Value + 5, 8)).Address

        End With

    Next I

End Sub

Bonjour,

j'avais pas vu ceci :

.Cells(.Cells(1, 7).Value

Le nombre de lignes "utiles" du tableau !!!!

@ bientôt

LouReeD

J'étais parti exactement comme toi en remontant depuis le bas pour trouver la dernière cellule non vide mais en regardant ses formule j'ai vu qu'il indiquait le nombre de lignes donc, plus simple à faire

Bonjour,

c'est là que je vois mes lacunes en philo et autre, thèse, anti thèse synthèse...

Vu votre nom vous trouvez la conclusion de suite !

@ bientôt

LouReeD

@Theze

Merci pour la proposition sur la sélection des onglets.

Mais, tout d'abord, j'aurais besoin connaître le fonctionnement du code car je ne suis pas parvenu à l'adapter à mon fichier réel.

cf https://forum.excel-pratique.com/viewtopic.php?p=660774#p660774

Bonjour,

Voici le code commenté, j'espère que ça va t'aider :

Sub Test()

    Dim TblFe
    Dim I As Integer

    TblFe = Array("CDF1", "CDF3") '<--- ici les différents noms de feuille visés

    For I = 0 To UBound(TblFe)

        With Worksheets(TblFe(I))

            .PageSetup.PrintArea = "" 'supprime une éventuelle zone d'impression
            '.Cells(1, 1) ---> représente la cellule A1 (ligne 1, colonne 1)
            '.Cells(.Cells(1, 7).Value ---> récupère la valeur de la cellule G1
            'à laquelle on rajoute 5 car la plage commence à la ligne 5 donc décalage nécessaire pour ne pas tronquer en partie basse
            'le chiffre 8 représente la colonne H puisque Cells() attend deux arguments (optionnels) qui sont en premier le numéro de ligne et en second le numéro de colonne
            'et ".Address" car "PrintArea" attend une adresse de plage sous forme de String
            .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(.Cells(1, 7).Value + 5, 8)).Address

        End With

    Next I

End Sub
Rechercher des sujets similaires à "ajuster zone impression dynamiquement nombre lignes"