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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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+
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
22
Affichages
4 K
Retour