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 ^^
 

youky(BJ)

XLDnaute Barbatruc
Re, Ginteo,
ceci doit fonctionner avec un exemple c'est plus facile de pigé.
VB:
Sub impression()
With ActiveSheet
    .PageSetup.PrintArea = "A1:L" & _
        Application.CountIf(.[A9:A1994], ">0") + 8
    .PrintPreview
    '.PrintOut
End With
End Sub
Bruno
 

ginteo

XLDnaute Nouveau
Merci Bruno et aux autres,

Ça marche très bien, même si je ne comprend rien au code ^^
Connaissez vous un ou plusieurs site pour bien appréhender le vba,
je comprend plus ou moins la structure mais il me manque les mots clefs pour en comprendre le sens

.PrintPreview est mieux que '.PrintOut pour imprimer et choisir l'imprimante

ps : la prochaine fois je mettrai directement le tableau pour illustrer :)
 

ginteo

XLDnaute Nouveau
Tant que j 'y suis, et pour savoir au cas où

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)

C'est pour mes deux autres tableaux, ça tombe bien c'est la colonne D (donc j'ai la macro)
Mais si par hasard ça pourrai une colonne entre A et L, il y a-t-il une astuce ?
 

youky(BJ)

XLDnaute Barbatruc
Sur mon précèdent message la macro verifiait en col A uniquement.
Celle-ci regarde par colonne de la col A à K et conserve que la +grande ligne.
Elle est valable que pour ton dernier onglet du fichier.(j'ai mis des commentaires explicatifs)
Attention en col L il y a des 1 jusqu'en ligne 1994 donc ma macro ne viens pas voir en L
Navigue sur XLD pour trouver des astuces VBA est puissant il faut surtout faire des tas d'essais pour voir le résultat.
Il y a longtemps que j'ai dépassé mon millionièmes bugs, c'est comme ca qu'on apprends le mieux.
Dans tes macros supprime les .select et les scroll l'enregistreur les mets direct.
VB:
Sub impression()
With ActiveSheet
For col = 1 To 11 'boucle des col A à K
     lg = Application.CountIf(Columns(col), ">-999999") + 8
     'comme formule =NB.SI(colonne(k);">-999999")
   If lig < lg Then lig = lg  'on garde que le plus grand
Next
    .PageSetup.PrintArea = "A1:L" & lig
    .PrintPreview 'aperçu Avant impression
    '.PrintOut  'imprime
End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, ginteo, Lone-Wolf, Youky(BJ)

Peut-être que ce soir, ginteo aura mis ses lunettes, ce qui lui évitera de superbement m'ignorer ;)
(voir le message d'hier de 23h06)
Donc macro ici testée sur la feuille nommée: Programme action
Code:
Sub b()
ActiveSheet.PageSetup.PrintArea = [A1].Resize(Application.Max([A:A]) + 8, 12).Address
ActiveSheet.PrintPreview
End Sub