VBA - impression

ginteo

XLDnaute Nouveau
Salut,

J'essaie de paramétrer une impression d'un tableau en fonction de la dernière cellule renseigné (le tableau est déjà prédéfini avec bordure, une impression classique imprime tout le tableau, mais je veux que jusqu'à la dernière ligne renseignée)

Code:
Sub impression()
With ActiveSheet
    .PageSetup.PrintArea = .Range("A1:L" & _
        .Range("a64000").End(xlUp).Row).Address
    .PrintOut
End With
End Sub

Je n'arrive pas à insérer une formule (qui indique dernière position de la cellule remplie) pour remplacer range("64000")

J'ai deux feuille avec deux formule différentes qui indique cette position max

Pour ça j'ai la formule excel
Code:
={MAX(SI(ESTVIDE(A:L);0;LIGNE(A:L)))}
la commande exécution indique/convertit en vda
Code:
Debug.Print Range("p13").Formula 
donne
=CONCATENATE("a"&MAX(IF(ISBLANK(A:L),0,ROW(A:L))))

et pour une autre feuille
Code:
=CONCATENER("A"&MAX(bilan!$M$5:$M$2996)+8)
le +8 car j'ai huit ligne avant le début du tableau
Code:
convertit en vda en
=CONCATENATE("A"&MAX(bilan!$M$5:$M$2996)+8)



C'est mon 1er jour e VDA je suis nul et j'y comprend pas grand chose ^^
 

Lone-wolf

XLDnaute Barbatruc
Bonjour ginteo et bienvenue sur le XLD :) - bonjour le Forum :)

Andmetton que tu aie 100 ligne pleines, pourquoi en met-tu 64000??

Sub impression()
Dim plage As Range
With ActiveSheet
Set plage = .Range("A1:L" & .Range("L" & Rows.Count).End(xlUp).Row)
.PageSetup.PrintArea = plage.Address
.PrintOut
End With
End Sub

Toujours inscrire comme ceci Range("L" & Rows.Count), pour indiquer la dernière cellule remplie.

Quand dans certaines colonnes il y a des cellules vides, il faut renseigner la colonne qui a plus de lignes inscrites. Admettons que ce soit la colonne G.

derlig = .Range("g" & Rows.Count).End(xlup).Row
Set plage = .Range("A1:L" & derlig)
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bienvenu au forum également dans VBA.
VBA n'est pas si compliqué que l'on croit.
>>> .PageSetup.PrintArea = .Range("A1:L" & _
.Range("a64000").End(xlUp).Row).Address
supprime le rouge dans ton code
Il faut indiquer seulement la ligne et non l'adresse
Bruno
EDIT salut Lone-Wolf pourtant j'ai fait F5
 

youky(BJ)

XLDnaute Barbatruc
hello, yes Jacky
Ceci fonctionne aussi
.PageSetup.PrintArea = "$A$1:$L$" & .Range("a64000").End(xlUp).Row
En effet Rows.count convient mieux pourtant j'utilise souvent 65000 par habitude
C'est pas souvent d'aller déjà si loin
Bruno
 

Lone-wolf

XLDnaute Barbatruc
Re Bruno

Mais comme je l'ai expliqué à notre ami, si tu as 10 lignes à imprimer, pourquoi en mettre 65000? Si tu vois ce que je veux dire. Le max de lignes d'impression pour 1 page, je crois que c'est 51, si ne dit pas de bétises.

@youky(BJ) - Edit: avec marges étroites en mode paysage, 43 lignes max pour 1 page et 63 en mode portrait.
 
Dernière édition:

ginteo

XLDnaute Nouveau
Pour l'histoire des 64000 c'est un nombre aléatoire que j'ai mis et vu dans une macro d'impression.

Les lignes à imprimer je ne les connais pas, car la longueur du tableau peut varier de 50 à xxxxx (mais limité à 1996 lignes)
Mais comme le tableau est déjà mis en forme ça imprime tout le tableau (soit 46 pages = 1996 ligne) même avec (range("a64000) ça n'imprime pas plus

Ce que je veux c'est imprimer jusqu'à la dernière ligne remplie du tableau (et ce même s'il y a des lignes vides dans le tableau).
Dans le code VBA je ne vois pas où il faut mettre/remplacer ce paramètre par la formule

=CONCATENATE("A"&MAX(bilan!$M$5:$M$2996)+8)
ou bien
=CONCATENATE("a"&MAX(IF(ISBLANK(A:L),0,ROW(A:L))))

ces deux formules determine la position de la dernière ligne remplie
donc donne A103 ou bien A425 etc...., je voulais remplacer cette formule à la place de A64000 pour voir si ça marche

Toujours inscrire comme ceci Range("L" & Rows.Count), pour indiquer la dernière cellule remplie.
L'idée est là mais la dernière cellule remplie correspond à ma formule
si je laisse à l'état ça imprimme tout le tableau car la mise en forme (bordure + remplissage) compte pour une cellule remplie même si la cellule est vide
 

Lone-wolf

XLDnaute Barbatruc
Bonjour ginteo

Lit le dernier paragraphe de mon message. ;)

Mais pour une meilleure compréhension, joint un fichier avec le résultat éscompté dans données confidentielles.
Nous on est pas devins pour voir quelles cellules sont vides. Si tu as un tableau comme celui en image.
Il est tout à fait logique que la macro prenne en considération les cellules vides.

tableau.gif


Ici si tu met derlig = .Range("a" & Rows.Count).End(xlup).Row, la macro va copier le tableau jusqu'à la ligne 5 et si tu met derlig = .Range("b" & Rows.Count).End(xlup).Row elle copiera le tableau jusqu'à la ligne 6.
 
Dernière édition:

ginteo

XLDnaute Nouveau
Ah non j'ai compris mon problème

j'ai deux tableau, ça marche très bien avec l'un (tableau à remplir)

Mais il y a un souci avec l'autre car c'est un tableau automatique (il se rempli grâce à des formules)
Il y a 1996 ligne mais "Rows.Count" doit compter les cellules avec des formules dedans.

Est-il possible de remplacer Rows.Count par autre chose ?
Je vais essayer de joindre le tableau
 

Statistiques des forums

Discussions
311 733
Messages
2 082 010
Membres
101 866
dernier inscrit
XFPRO