Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Connaître avec VB le nb de pages d'impression d'une feuille

6 réponses
Avatar
Decaplan
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de tout
ou partie des feuilles d'un classeur (paramétrable par l'utilisateur). Je
voudrais pouvoir numéroter les pages, mais voilà...la numérotation est
fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre de
pages d'impression d'une feuille pour laquelle la zone d'impression et tous
les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan

6 réponses

Avatar
François
Bonjour Decaplan,

Voici ce que j'ai. Cela ne répondra qu'à une partie de ta question (en
cliquant sur Imprimer, un msg apparaît pour aviser l'usager du nombre de
pages qui sera imprimées. De plus, ce code cache des colonnes qui n'ont pas
besoin d'être imprimées :

Private Sub CmdImprimer_Click()
Dim r As Integer
Dim nbpages As Variant

Unload Me
Application.ScreenUpdating = False

Worksheets("Inventaire").Range("h65536").End(xlUp) = ""
Worksheets("Inventaire").Range("bd65536").End(xlUp) = ""

'si cellule vide cache la ligne
For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If IsEmpty(Cells(r, "h")) Then Rows(r).Hidden = True
Next r

'cache les colonnes suivantes
Columns("j:bc").Hidden = True
Columns("be:bf").Hidden = True
Columns("a:a").ColumnWidth = 4.29
Columns("b:b").ColumnWidth = 5.01
Columns("c:c").ColumnWidth = 6.15
Columns("d:d").ColumnWidth = 10.9
Columns("e:e").ColumnWidth = 11.6
Columns("f:f").ColumnWidth = 13.5
Columns("G:G").ColumnWidth = 13.01
Columns("h:h").ColumnWidth = 10.01
Columns("i:i").ColumnWidth = 10.57
Columns("j:j").ColumnWidth = 19.99
Columns("bd:bd").ColumnWidth = 13.86
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.4)
.RightMargin = Application.InchesToPoints(0.4)
.TopMargin = Application.InchesToPoints(0.4)
.BottomMargin = Application.InchesToPoints(0.4)
.Zoom = 77
.FitToPagesWide = 1
.FitToPagesTall = 1
End With

'variable nombre de pages qui sera imprimées
nbpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")

'message à l'usager
If nbpages = 1 Then
If MsgBox("IL Y AURA " & nbpages & " PAGE D'IMPRIMÉE. VOULEZ-VOUS
CONTINUER ?", vbYesNo + vbQuestion, "Avertissement : Nombre de pages
imprimées") = vbNo Then
Rows().Hidden = False
Columns().Hidden = False
With Worksheets("Inventaire")
.Range("h65536").End(xlUp).Offset(0, 0).Activate
ActiveCell.ClearContents
ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
ActiveCell.Offset(0, 48).Activate
ActiveCell.ClearContents
ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
.Range("a2").Activate
End With
Exit Sub
End If
Else
If MsgBox("IL Y AURA " & nbpages & " PAGES D'IMPRIMÉES. VOULEZ-VOUS
CONTINUER ?", vbYesNo + vbQuestion, "Avertissement : Nombre de pages
imprimées") = vbNo Then
Rows().Hidden = False
Columns().Hidden = False
With Worksheets("Inventaire")
.Range("b65536").End(xlUp).Offset(1, 0).Activate
ActiveCell.Offset(0, 6).Activate
ActiveCell.ClearContents
ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
ActiveCell.Offset(0, 48).Activate
ActiveCell.ClearContents
ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
.Range("a2").Activate
End With
Exit Sub
End If

ActiveSheet.PrintOut
End If

'affiche les lignes et les colonnes cachées
Rows().Hidden = False
Columns().Hidden = False

End Sub

François

"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan



Avatar
Daniel
Bonjour.
Essaie :

Sub NombrePages()
MsgBox ExecuteExcel4Macro("Get.Document(50)")
End Sub

Cordialement.
Daniel
"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan



Avatar
Decaplan
Merci à François et à Daniel.

Decaplan

"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan



Avatar
Michel Pierron
Bonsoir Decaplan;

Private Function NbPages(Wsh As Worksheet) As Long
NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
End Function

Sub Test()
MsgBox NbPages(ActiveSheet) & " pages !", 64
End Sub

MP

"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan



Avatar
Decaplan
Merci.

Decaplan
"Michel Pierron" a écrit dans le message de news:

Bonsoir Decaplan;

Private Function NbPages(Wsh As Worksheet) As Long
NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
End Function

Sub Test()
MsgBox NbPages(ActiveSheet) & " pages !", 64
End Sub

MP

"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan







Avatar
Decaplan
Bonjour,

Cette solution fonctionne excellement...mais !
Il y a un mais, du moins, me semble-t-il, il faut avoir impriméou
prévisualsé au moins une fois la feuille dont on veut connaître le nombre de
pages d'impression avant d'utiliser la propriété VPageBreaks. Faute de quoi,
le résultat est invariablement 1
Y-a-t-il un moyen de contourner cette difficulté?
Merci de vos lumières.
Amicalement.

Decaplan
"Michel Pierron" a écrit dans le message de news:

Bonsoir Decaplan;

Private Function NbPages(Wsh As Worksheet) As Long
NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
End Function

Sub Test()
MsgBox NbPages(ActiveSheet) & " pages !", 64
End Sub

MP

"Decaplan" a écrit dans le message de news:
44efeab0$0$27390$
Bonjour,

Je souhaite créer un un utilitaire destiné à commander l'impression de
tout ou partie des feuilles d'un classeur (paramétrable par
l'utilisateur). Je voudrais pouvoir numéroter les pages, mais voilà...la
numérotation est fonction des pages sélectionnées pour l'impression.
Ma question: Existe-t-il un moyen d'extraire dans une variable, le nombre
de pages d'impression d'une feuille pour laquelle la zone d'impression et
tous les paramètre d'impression ne doivent pas être modifiés?
Merci d'avance pour votre éclairage.

Decaplan