VBA : définir zone d'impression pour des TCD

Amauty

XLDnaute Junior
Bonjour à Tous,

Je suis en train de coder une macro qui me permettent de définir les zones d'impression de plusieurs feuilles de mon classeur. Mon souci est le suivant, la plupart de mes feuilles comportent des TCD et la zone d'impression automatique généré par ce code :

Dim sh As Worksheet

For Each sh In Worksheets
If sh.Visible Then sh.Select
ActiveSheet.PageSetup.PrintArea = _
ActiveSheet.UsedRange.Address
Next sh

est beaucoup trop large. Je souhaite adapté cette zone d'impression aux seules cellules non vide de la feuille. Je crois qu'automatiquement, la zone d'impression prend en compte le champs possible de mes TCD.

Merci par avance pour votre aide

Amaury
 

david84

XLDnaute Barbatruc
Re : VBA : définir zone d'impression pour des TCD

Bonjour,
c'est peut-être UsedRange qui te joue des tours.
Regarde sur le site de JB ici comment utiliser Find pour rechercher la dernière cellule non vide de ta feuille. Tu pourras ensuite te servir de cette variable pour définir ta zone (voir également le classeur Find dernier.xls à télécharger où tu peux comparer les réponses avec UsdRange).
A+
 

Amauty

XLDnaute Junior
Re : VBA : définir zone d'impression pour des TCD

Je ne parviens pas à saisir l'utilisation de range. La question que je me pose régulièrement est la suivante :
intuitivement, pour sélectionner une plage de cellule allant de A1 à la dernière cellule utilisé de la feuille, je code comme suit :

range([A1]:Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row, Cells.Find("*", , , , xlByColumns,xlPrevious).Column)).select

Bien entendu cela ne fonctionne pas...

merci pour l'aide salvatrice !
Amaury
 

david84

XLDnaute Barbatruc
Re : VBA : définir zone d'impression pour des TCD

Re
étudie en détail les macros proposées par JB dans son fichier et dans le lien indiqué (notamment en haut de page) :
Code:
Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row, Cells.Find("*", , , , xlByColumns,xlPrevious).Column)).select
te ramène la dernière cellule non vide de la plage.
Si tu veux sélectionner une plage et non une cellule, il te faut donc lui indiquer ta 1ère cellule de la plage à sélectionner. Si celle cellule est A1, cela donne donc :
Code:
Range(Cells(1, 1), Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Select
ou
Code:
Range([A1], Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Select
si tu veux utiliser Range en evaluate (entre crochets) plutôt que cell ou
Code:
Range(Range("A1"), Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Select
End Sub
avec un Range utilisé classiquement.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 950
Membres
103 683
dernier inscrit
Cescodelvar