Définir zone d'impression variable

FL123

XLDnaute Nouveau
Bonjour à tous,

Je souhaite créer une macro afin de définir une zone d'impression avec colonnes variables.

En effet, les lignes 1 à 43 resteront toujours les mêmes, en revanche, les colonnes à imprimer sont uniquement les colonnes non vides, à partir de la colonne A.

Ici le code que j'ai entré, ne fonctionnant pas :(

Sub defimpress()

Application.ScreenUpdating = False
For i = 1 To 43
Cells(i, 16000).Select
Selection.End(xlLeft).Select
If Selection.Column > fin Then fin = Selection.Column
Next i
Application.ScreenUpdating = True

Set impression = Range([A1], Cells(43, fin))
ActiveSheet.PageSetup.PrintArea = impression.Address

End Sub


Merci à tous pour votre aide :)
 

Dranreb

XLDnaute Barbatruc
Re : Définir zone d'impression variable

Bonjour
Essayez comme ça:
VB:
Sub DefImpress()
With ActiveSheet: .PageSetup.PrintArea = PlgUti(.[A1], .[1:43]).Address: End With
End Sub
Avec :
VB:
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing) As Range
Rem. Cherche la partie utilisée d'une plage, c'est à dire celle qui s'étend jusqu'à la dernière cellule renseignée de plus qu'une chaîne vide.
'    PlageDép: Plage de départ. Seule la 1ère cellule spécifiée est prise en compte pour la déterminer, et suffit donc pour une utilisation VBA.
'            Pour utilisation en formules, il est néanmoins nécessaire de spécifier la plage depuis celle ci jusqu'au reste des colonnes entières.
'    PlageExam: Plus grande plage susceptible de contenir la plage cherchée.
'            Facultatif: UsedRange assumé par défaut.
Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
On Error GoTo RienTrouvé
If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
On Error GoTo 0
NbL = LMax - PlageDép.Row + 1: If NbL < 1 Then GoTo CEstToutVide
NbC = CMax - PlageDép.Column + 1: If NbC < 1 Then GoTo CEstToutVide
Set PlgUti = PlageDép.Resize(NbL, NbC)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
End Function
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Définir zone d'impression variable

Bonjour, FL123, Dranreb :), le Forum,

Bienvenue sur XLD, FL123.

Peut-être, également, ainsi :

Code:
Option Explicit
Sub Imprimer_nombre_colonnes_variable()
Range(Range("a1"), Range("a43").End(xlToRight)).PrintPreview 'lance l'aperçu
'Range(Range("a1"), Range("a43").End(xlToRight)).PrintOut  'lance l'impression
End Sub

A bientôt :)

P. S. : Bonjour, Efgé :D
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Définir zone d'impression variable

Bonjour FL123, Dranreb, Bonjour 00 :)
Je n'ai peut être pas tout saisi mais...
Définir une zone d'impression bidon (Fichier / Zone d'impression / definir)
Definir une plage dynamique nommée Plg (insertion / Nom / definir)
=DECALER(Feuil1!$A$1;;;43;NBVAL(Feuil1!$1:$1))
Puis remplacer la formule de la zone d'impression par =Plg
Cordialement
 

Pièces jointes

  • Classeur1.xls
    34.5 KB · Affichages: 55
  • Classeur1.xls
    34.5 KB · Affichages: 49
  • Classeur1.xls
    34.5 KB · Affichages: 51

FL123

XLDnaute Nouveau
Re : Définir zone d'impression variable

Bonjour à tous,

Je vous remercie pour vos réponses !

Dranreb j'ai utilisé ton code, en revanche DoubleZero ton code m'a permis de lancer l'aperçu et l'impression à partir de celui-ci, c'est parfait !

Efgé merci aussi à toi pour ta réponse, mon fichier est quasiment fait entièrement de macros, j'ai donc préféré continuer avec celles-ci, mais ta solution fonctionne également j'ai essayé !

Merci à tous !
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 926
Membres
103 043
dernier inscrit
nouha nj