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

macro pour imprimer plusieurs onglets d'un fichier Excel

2 réponses
Avatar
godefroylg
Bonjour,

Je ne sais pas vraiment me servir des macros, tout juste les copier et
les coller pour obtenir le r=E9sultat que je souhaite !

En l'occurence, je souhaiterais pouvoir cliquer sur un bouton pour
imprimer quelques onglets (pas tous) d'un fichier Excel.

Si il existe une macro pour =E7a, ce serait g=E9nial !!! Et si je pouvais
la comprendre pour l'utiliser, ce serait encore mieux !!

Par avance, merci beaucoup.

2 réponses

Avatar
Hervé
Bonsoir,
Le code ci-dessous n'est pas vraiment simple mais il est commenté.
Ce code permet de sélectionner les feuilles à imprimer ou aperçu avant
impression en créant des cases à cocher de façon dynamique afin de prendre
en compte les ajouts et supressions de feuilles. Pour l'utiliser tu as juste
à coller les différents codes dans les modules indiqués.
Tout d'abords, ajoute un module standard dans le VBE
Ensuite, ajoute une Form sans te soucier de la taille, sur laquelle tu pose
:
- un bouton nommé "CmdImprimer" auquel tu supprime le caption et tu y colle
l'image de l'imprimante en procédant de la manière suivante :
Clic dorit sur une barre d'outils (n'importe laquelle), "Personaliser..."
puis clic droit sur le bouton Imprimer et "Copier l'image du bouton", fermer
la boite et aller dans le VBE, sélectionner le bouton "CmdImprimer" et dans
la propriété "Picture" supprimer (Aucun) et faire Ctrl + C, l'image est
maintenant sur le bouton.
- un bouton nommé "CmdApercu" et procéder de la même manière que ci-dessus
- une case à cocher nommée "ChkCacher" avec pour caption "Inclure les
feuilles cachées"
- un ComboBox nommé "CmbControle"
- un TextBox nommé "TxtHautForm"
- un Frame nommé "Cadre"
et tout ceci sans te préocuper de la taille, de la position et des
info-bulles, ils seront dimensionnés et positionnés de façon dynamique.

Cela peut te paraître très compliqué mais en étant méthodique il n'y aura
aucun problème.

Les trois lignes ci-dessous sont, comme indiqué, à mettre dans le module
standard, ensuite tu pourra poser un bouton dans une barre d'outils et tu
pourra lui affecter cette macro.
'****** A METTRE DANS UN MODULE STANDARD******
Sub Afficher_FormImprimer()
UserForm1.Show
End Sub
'********************************

Le reste du code (jusqu'à la ligne d'étoiles) est à mettre dans le module de
la Form. Des valeurs seront inscrites dans la base de registre (3) afin de
mémorisés le nombre de cases à cocher par ligne, la hauteur de la Form et la
valeur de la case à cocher "ChkCacher"
Attention au saut de ligne de Outlook ! si une ou plusieurs lignes sont
écrits en rouge pas d'affolement, il suffit que se soit remis sur une seule
ligne.
'****** A METTRE DANS LE MODULE DE LA FORM******
'API pour récupérer les dimensions de l'écran
'pour le centrage du formulaire
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long

'Constantes pour le centrage du formulaire
Private Const LG_ECRAN = 0
Private Const HT_ECRAN = 1

'nom de la feuille active (pour la réactiver)
'tableau pour les feuilles cachées
Dim FeActive As String
Dim TblCacher() As String

'Constantes pour le dimenssionnement des contrôles
Const ESP_BTN As Integer = 2
Const LARGEUR As Integer = 70
Const HAUTEUR As Integer = 15
Const ESPACE As Integer = 6
Const DIM_BTN As Integer = 20
Const LG_BTN As Integer = 40
Const HT_BTN As Integer = 15
Const BARRE As Integer = 16

Private Sub UserForm_Initialize()

Dim I As Integer

With Me
With .CmbControle
For I = 1 To 10
.AddItem I
Next I
'récupère les valeurs dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
.Value = CInt(GetSetting("FormulaireImpression", _
"Controles", "Nombre", 4))
End With
.TxtHautForm.Value = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))
.ChkCacher.Value = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))
End With

CreerControles

FeActive = ActiveSheet.Name

End Sub

Private Sub CmdImprimer_Click()

Dim I As Integer

'appelle la proc pour sélectionner les feuilles choisies
'et affiche la boîte d'impression en activant le bouton
'du menu "Fichier". Passe la variable "I" en référence pour
'savoir le nombre de feuilles sélectionnées
FeuillesSelect I

If I = 0 Then
MsgBox "Aucune feuille n'a été sélectionnée !"
Exit Sub
End If

Me.Hide

Application.CommandBars("Worksheet Menu Bar") _
.Controls("&Fichier").Controls("&Imprimer...").Execute

'cache à nouveau les feuilles qui l'étaient
On Error Resume Next
For I = 1 To UBound(TblCacher)
Worksheets(TblCacher(I)).Visible = False
Next I

'ré-active la feuille qui était sélectionnée
'à l'ouverture du formulaire
Worksheets(FeActive).Select (True)

Me.Show

End Sub

Private Sub CmdApercu_Click()

Dim I As Integer

'appelle la proc pour sélectionner les feuilles choisies
'et affiche l'aperçu en activant le bouton du menu "Fichier"
'passe la variable "I" en référence pour savoir le nombre
'de feuilles sélectionnées
FeuillesSelect I

If I = 0 Then
MsgBox "Aucune feuille n'a été sélectionnée !"
Exit Sub
End If

Me.Hide

Application.CommandBars("Worksheet Menu Bar") _
.Controls("&Fichier").Controls("&Aperçu avant impression").Execute

'cache à nouveau les feuilles qui l'étaient
On Error Resume Next
For I = 1 To UBound(TblCacher)
Worksheets(TblCacher(I)).Visible = False
Next I

'ré-active la feuille qui était sélectionnée
'à l'ouverture du formulaire
Worksheets(FeActive).Select (True)

Me.Show

End Sub

Private Sub CmbControle_Click()
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Controles", "Nombre", _
Me.CmbControle.Value

CreerControles

End Sub

Private Sub TxtHautForm_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Hte As Integer
Dim Tempo As Integer

Tempo = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))

On Error Resume Next
With Me.TxtHautForm
Hte = CInt(.Value)
'gère l'erreur si du texte a été saisie
If Err.Number = 13 And .Value <> "" Then
MsgBox "Seul des nombres peuvent être saisies !", _
vbExclamation, "Incompatibilité de type."
.Value = Tempo
Exit Sub
End If
If .Value <> "" Then
If Hte < 75 Then
MsgBox "Valeur trop petite pour un affichage correct " & _
"des cases à cocher dans le formulaire !" & vbCrLf & _
"La dimension minimale est 75", vbExclamation, "Valeur
insuffisante."
.Value = Tempo
Exit Sub
End If
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Form", "Hauteur", CInt(.Value)
CreerControles
End If
End With
End Sub

Private Sub ChkCacher_Click()
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Feuille", "Cacher", Me.ChkCacher.Value
CreerControles
End Sub

Private Sub CreerControles()
Dim Feuille As Worksheet
Dim CelNonVide As Range
Dim FeAfficher As Integer
Dim LForm As Integer
Dim Nombre As Integer, HauteurMax As Integer
Dim Haut As Integer, Gauche As Integer
Dim Cacher As Boolean

'récupère les valeurs dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
Nombre = CInt(GetSetting("FormulaireImpression", _
"Controles", "Nombre", 4))
HauteurMax = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))
Cacher = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))

Haut = ESPACE
Gauche = ESPACE
LForm = (LARGEUR * Nombre) + (ESPACE * Nombre)

'vide le cadre si une modif est faite le formulaire affiché
With Me.Cadre
.Controls.Clear
.ScrollBars = fmScrollBarsNone
End With

'recherche tout dabord si au moins une cellule n'est pas vide
'si la feuille est visible et si elle contient des données, la
'case est activée sinon elle est désactivée. Si on veux afficher
'les feuilles cachées (case cochée) effectue le même manoeuvre
'que pour les feuilles visibles
'"FeAfficher" sert à compter le nombre de cases à cochées qui vont
'être ajoutées pour permettre un réajustement de la hauteur
For Each Feuille In Worksheets
Set CelNonVide = Feuille.Cells.Find _
("*", Feuille.[A1], xlFormulas, , , xlPrevious)
If Feuille.Visible = True Then
FeAfficher = FeAfficher + 1
If CelNonVide Is Nothing Then
CreerCases Feuille.Name, Haut, Gauche, _
LForm, False, False, False
Else
CreerCases Feuille.Name, Haut, Gauche, _
LForm, False, False, True
End If
Else
If Me.ChkCacher.Value = True Then
FeAfficher = FeAfficher + 1
If CelNonVide Is Nothing Then
CreerCases Feuille.Name, Haut, Gauche, _
LForm, True, True, False
Else
CreerCases Feuille.Name, Haut, Gauche, _
LForm, True, True, True
End If
End If
End If
Next Feuille


'vérifie si il peut y avoir une ligne de cases
'à cocher inférieure au nombre défini et réajuste
'la dimension
If FeAfficher Mod Nombre <> 0 Then Haut = Haut + HAUTEUR + ESPACE

PositionDimensions LForm, Haut, HauteurMax, Nombre

Set Feuille = Nothing
Set CelNonVide = Nothing

End Sub
Sub CreerCases(NomFeuille As String, Haut As Integer, Gauche As Integer, _
LargeurForm As Integer, Gras As Boolean, Barrer As Boolean, _
Activer As Boolean)

Dim CaseACocher As MSForms.CheckBox
'crée les cases à cocher et les paramètres
Set CaseACocher = Me.Cadre.Controls.Add _
("Forms.CheckBox.1", _
"Chk" & NomFeuille)
With CaseACocher
.Left = Gauche
.Top = Haut
.Width = LARGEUR
.Height = HAUTEUR
.Caption = NomFeuille
.Enabled = Activer
With .Font
.Name = "Arial Narrow"
.Size = 8
.Strikethrough = Barrer
.Bold = Gras
End With
End With
'calcul du positionnement
If Gauche >= LargeurForm - (LARGEUR + ESPACE) Then
Gauche = ESPACE
Haut = Haut + (HAUTEUR + ESPACE)
Else
Gauche = Gauche + (LARGEUR + ESPACE)
Haut = Haut
End If

Set CaseACocher = Nothing

End Sub
Private Sub PositionDimensions(LargeurForm As Integer, Haut As Integer, _
HauteurMax As Integer, NBCtrl As Integer)

Dim TopCadre As Integer

'dimensionne le formulaire
'positionne et dimensionne
'les différents contrôles
With Me
.Width = LargeurForm + 5
.Height = Haut + ((HAUTEUR + (ESPACE * 2)) * 2)
.Caption = "Feuilles à imprimer."

'bouton "Imprimer"
With .CmdImprimer
.ControlTipText = "Imprimer"
.Top = 0
.Left = 0
.Height = DIM_BTN
.Width = DIM_BTN
.Caption = ""
'.Picture = LoadPicture("C:Dossier1Dossier2Image1.bmp")
.PicturePosition = fmPicturePositionAboveCenter
End With

'bouton "Aperçu"
With .CmdApercu
.ControlTipText = "Aperçu"
.Top = 0
.Left = DIM_BTN + ESP_BTN
.Height = DIM_BTN
.Width = DIM_BTN
.Caption = ""
'.Picture = LoadPicture("C:Dossier1Dossier2Image2.bmp")
.PicturePosition = fmPicturePositionAboveCenter
End With

'ComboBox pour le nombre de cases à cocher sur une ligne
With .CmbControle
.ControlTipText = "Nombre de contrôles sur la même ligne"
.Height = HT_BTN
.Width = LG_BTN
End With

'TextBox pour définir la hauteur du formulaire
With .TxtHautForm
.ControlTipText = "Hauteur du formulaire " & _
"(Appuyer sur Entrée pour redessiner le " & _
"formulaire ou quitter le contrôle)"
.Height = HT_BTN
.Width = LG_BTN
End With

'case à cocher pour afficher ou non les feuilles cachées
With .ChkCacher
.Height = HT_BTN
.Width = 115
.Caption = "Inclure les feuilles cachées"
End With

'positionne ces contrôles en fonction du nombre
'de cases à cocher qui seront sur la même ligne
Select Case NBCtrl
Case 1, 2
TopCadre = (HT_BTN + ESP_BTN) * 3
If NBCtrl = 1 Then
LargeurForm = LARGEUR + ESPACE + BARRE
Else
LargeurForm = ((LARGEUR + ESPACE) * 2) + BARRE
End If
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = HT_BTN + ESP_BTN
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .ChkCacher
.Top = (HT_BTN * 2) + (ESP_BTN * 2)
.Left = 0
End With
Case 3
TopCadre = (HT_BTN + ESP_BTN) * 2
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = HT_BTN + ESP_BTN
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .ChkCacher
.Top = 0
.Left = (DIM_BTN * 2) + LG_BTN + (ESP_BTN * 3)
End With
Case Else
TopCadre = DIM_BTN + ESP_BTN
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = 0
.Left = (DIM_BTN * 2) + LG_BTN + (ESP_BTN * 3)
End With
With .ChkCacher
.Top = 0
.Left = ((DIM_BTN + LG_BTN) * 2) + (ESP_BTN * 4)
End With

End Select

'cadre contenant les cases à cocher
With .Cadre
.Top = TopCadre
.Left = 0
If Me.Height > HauteurMax Then
Me.Height = HauteurMax
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = Haut
.Height = HauteurMax - (TopCadre + 18)
.Width = LargeurForm + BARRE
Me.Width = LargeurForm + (BARRE + 3)
Else
.Height = Me.Height - (TopCadre + 18)
.Width = LargeurForm
End If
End With

'centre le formulaire sur l'écran
.Top = ((GetSystemMetrics(HT_ECRAN) * 0.75) / 2) - (.Height / 2)
.Left = ((GetSystemMetrics(LG_ECRAN) * 0.75) / 2) - (.Width / 2)
End With

End Sub

Sub FeuillesSelect(NBSelect As Integer)
Dim Ctrl As Control
Dim Sel As Boolean
Dim Cacher As Boolean
Dim I As Integer

'récupère la valeur dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
Cacher = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))

For Each Ctrl In Me.Cadre.Controls
'si la case à cocher est true
If Ctrl.Value = True Then
'totalise le nombre de pages sélectionnées
'(la valeur de I est passée par référence
'et modifiée par NBSelect)
NBSelect = NBSelect + 1
With Worksheets(Ctrl.Caption)
'dé-sélectionne la feuille active du classeur
'au moment de l'ouverture du formulaire
If Sel = False Then
'si la feuille est une feuille cachée, et si
'la case est cochée, récupère le nom de la feuille
'afin de la re-cacher plus tard et la rend visible
'afin de permettre sa sélection pour l'impression
If Cacher = True And .Visible = False Then
I = I + 1
ReDim Preserve TblCacher(1 To I)
TblCacher(I) = Ctrl.Caption
.Visible = True
End If
.Select (True)
'une fois la feuille active dé-sélectionnée et la
'1ère feuille sélectionnée, autorise la sélection multiple
Sel = True
End If
If Cacher = True And .Visible = False Then
I = I + 1
ReDim Preserve TblCacher(1 To I)
TblCacher(I) = Ctrl.Caption
.Visible = True
End If
.Select (False)
End With
End If
Next
Set Ctrl = Nothing
End Sub
'********************************


Hervé.


a écrit dans le message de
news:
Bonjour,

Je ne sais pas vraiment me servir des macros, tout juste les copier et
les coller pour obtenir le résultat que je souhaite !

En l'occurence, je souhaiterais pouvoir cliquer sur un bouton pour
imprimer quelques onglets (pas tous) d'un fichier Excel.

Si il existe une macro pour ça, ce serait génial !!! Et si je pouvais
la comprendre pour l'utiliser, ce serait encore mieux !!

Par avance, merci beaucoup.
Avatar
peyrez13
Hervé a écrit le 12/12/2006 à 21h10 :
Bonsoir,
Le code ci-dessous n'est pas vraiment simple mais il est commenté.
Ce code permet de sélectionner les feuilles à imprimer ou
aperçu avant
impression en créant des cases à cocher de façon dynamique
afin de prendre
en compte les ajouts et supressions de feuilles. Pour l'utiliser tu as juste
à coller les différents codes dans les modules indiqués.
Tout d'abords, ajoute un module standard dans le VBE
Ensuite, ajoute une Form sans te soucier de la taille, sur laquelle tu pose
:
- un bouton nommé "CmdImprimer" auquel tu supprime le caption
et tu y colle
l'image de l'imprimante en procédant de la manière suivante :
Clic dorit sur une barre d'outils (n'importe laquelle),
"Personaliser..."
puis clic droit sur le bouton Imprimer et "Copier l'image du bouton",
fermer
la boite et aller dans le VBE, sélectionner le bouton
"CmdImprimer" et dans
la propriété "Picture" supprimer (Aucun) et faire Ctrl
+ C, l'image est
maintenant sur le bouton.
- un bouton nommé "CmdApercu" et procéder de la
même manière que ci-dessus
- une case à cocher nommée "ChkCacher" avec pour
caption "Inclure les
feuilles cachées"
- un ComboBox nommé "CmbControle"
- un TextBox nommé "TxtHautForm"
- un Frame nommé "Cadre"
et tout ceci sans te préocuper de la taille, de la position et des
info-bulles, ils seront dimensionnés et positionnés de
façon dynamique.

Cela peut te paraître très compliqué mais en étant
méthodique il n'y aura
aucun problème.

Les trois lignes ci-dessous sont, comme indiqué, à mettre dans le
module
standard, ensuite tu pourra poser un bouton dans une barre d'outils et tu
pourra lui affecter cette macro.
'****** A METTRE DANS UN MODULE STANDARD******
Sub Afficher_FormImprimer()
UserForm1.Show
End Sub
'********************************

Le reste du code (jusqu'à la ligne d'étoiles) est à mettre
dans le module de
la Form. Des valeurs seront inscrites dans la base de registre (3) afin de
mémorisés le nombre de cases à cocher par ligne, la
hauteur de la Form et la
valeur de la case à cocher "ChkCacher"
Attention au saut de ligne de Outlook ! si une ou plusieurs lignes sont
écrits en rouge pas d'affolement, il suffit que se soit remis sur une
seule
ligne.
'****** A METTRE DANS LE MODULE DE LA FORM******
'API pour récupérer les dimensions de l'écran
'pour le centrage du formulaire
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long

'Constantes pour le centrage du formulaire
Private Const LG_ECRAN = 0
Private Const HT_ECRAN = 1

'nom de la feuille active (pour la réactiver)
'tableau pour les feuilles cachées
Dim FeActive As String
Dim TblCacher() As String

'Constantes pour le dimenssionnement des contrôles
Const ESP_BTN As Integer = 2
Const LARGEUR As Integer = 70
Const HAUTEUR As Integer = 15
Const ESPACE As Integer = 6
Const DIM_BTN As Integer = 20
Const LG_BTN As Integer = 40
Const HT_BTN As Integer = 15
Const BARRE As Integer = 16

Private Sub UserForm_Initialize()

Dim I As Integer

With Me
With .CmbControle
For I = 1 To 10
.AddItem I
Next I
'récupère les valeurs dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
.Value = CInt(GetSetting("FormulaireImpression", _
"Controles", "Nombre", 4))
End With
.TxtHautForm.Value = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))
.ChkCacher.Value = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))
End With

CreerControles

FeActive = ActiveSheet.Name

End Sub

Private Sub CmdImprimer_Click()

Dim I As Integer

'appelle la proc pour sélectionner les feuilles choisies
'et affiche la boîte d'impression en activant le bouton
'du menu "Fichier". Passe la variable "I" en
référence pour
'savoir le nombre de feuilles sélectionnées
FeuillesSelect I

If I = 0 Then
MsgBox "Aucune feuille n'a été sélectionnée
!"
Exit Sub
End If

Me.Hide

Application.CommandBars("Worksheet Menu Bar") _
.Controls("&Fichier").Controls("&Imprimer...").Execute

'cache à nouveau les feuilles qui l'étaient
On Error Resume Next
For I = 1 To UBound(TblCacher)
Worksheets(TblCacher(I)).Visible = False
Next I

'ré-active la feuille qui était sélectionnée
'à l'ouverture du formulaire
Worksheets(FeActive).Select (True)

Me.Show

End Sub

Private Sub CmdApercu_Click()

Dim I As Integer

'appelle la proc pour sélectionner les feuilles choisies
'et affiche l'aperçu en activant le bouton du menu "Fichier"
'passe la variable "I" en référence pour savoir le
nombre
'de feuilles sélectionnées
FeuillesSelect I

If I = 0 Then
MsgBox "Aucune feuille n'a été sélectionnée
!"
Exit Sub
End If

Me.Hide

Application.CommandBars("Worksheet Menu Bar") _
.Controls("&Fichier").Controls("&Aperçu avant
impression").Execute

'cache à nouveau les feuilles qui l'étaient
On Error Resume Next
For I = 1 To UBound(TblCacher)
Worksheets(TblCacher(I)).Visible = False
Next I

'ré-active la feuille qui était sélectionnée
'à l'ouverture du formulaire
Worksheets(FeActive).Select (True)

Me.Show

End Sub

Private Sub CmbControle_Click()
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Controles",
"Nombre", _
Me.CmbControle.Value

CreerControles

End Sub

Private Sub TxtHautForm_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Hte As Integer
Dim Tempo As Integer

Tempo = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))

On Error Resume Next
With Me.TxtHautForm
Hte = CInt(.Value)
'gère l'erreur si du texte a été saisie
If Err.Number = 13 And .Value <> "" Then
MsgBox "Seul des nombres peuvent être saisies !", _
vbExclamation, "Incompatibilité de type."
.Value = Tempo
Exit Sub
End If
If .Value <> "" Then
If Hte < 75 Then
MsgBox "Valeur trop petite pour un affichage correct " & _
"des cases à cocher dans le formulaire !" & vbCrLf & _
"La dimension minimale est 75", vbExclamation, "Valeur
insuffisante."
.Value = Tempo
Exit Sub
End If
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Form",
"Hauteur", CInt(.Value)
CreerControles
End If
End With
End Sub

Private Sub ChkCacher_Click()
'inscrit la valeur dans la base de registre dans la clé :
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
SaveSetting "FormulaireImpression", "Feuille",
"Cacher", Me.ChkCacher.Value
CreerControles
End Sub

Private Sub CreerControles()
Dim Feuille As Worksheet
Dim CelNonVide As Range
Dim FeAfficher As Integer
Dim LForm As Integer
Dim Nombre As Integer, HauteurMax As Integer
Dim Haut As Integer, Gauche As Integer
Dim Cacher As Boolean

'récupère les valeurs dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
Nombre = CInt(GetSetting("FormulaireImpression", _
"Controles", "Nombre", 4))
HauteurMax = CInt(GetSetting("FormulaireImpression", _
"Form", "Hauteur", 100))
Cacher = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))

Haut = ESPACE
Gauche = ESPACE
LForm = (LARGEUR * Nombre) + (ESPACE * Nombre)

'vide le cadre si une modif est faite le formulaire affiché
With Me.Cadre
.Controls.Clear
.ScrollBars = fmScrollBarsNone
End With

'recherche tout dabord si au moins une cellule n'est pas vide
'si la feuille est visible et si elle contient des données, la
'case est activée sinon elle est désactivée. Si on veux
afficher
'les feuilles cachées (case cochée) effectue le même
manoeuvre
'que pour les feuilles visibles
'"FeAfficher" sert à compter le nombre de cases à
cochées qui vont
'être ajoutées pour permettre un réajustement de la
hauteur
For Each Feuille In Worksheets
Set CelNonVide = Feuille.Cells.Find _
("*", Feuille.[A1], xlFormulas, , , xlPrevious)
If Feuille.Visible = True Then
FeAfficher = FeAfficher + 1
If CelNonVide Is Nothing Then
CreerCases Feuille.Name, Haut, Gauche, _
LForm, False, False, False
Else
CreerCases Feuille.Name, Haut, Gauche, _
LForm, False, False, True
End If
Else
If Me.ChkCacher.Value = True Then
FeAfficher = FeAfficher + 1
If CelNonVide Is Nothing Then
CreerCases Feuille.Name, Haut, Gauche, _
LForm, True, True, False
Else
CreerCases Feuille.Name, Haut, Gauche, _
LForm, True, True, True
End If
End If
End If
Next Feuille


'vérifie si il peut y avoir une ligne de cases
'à cocher inférieure au nombre défini et réajuste
'la dimension
If FeAfficher Mod Nombre <> 0 Then Haut = Haut + HAUTEUR + ESPACE

PositionDimensions LForm, Haut, HauteurMax, Nombre

Set Feuille = Nothing
Set CelNonVide = Nothing

End Sub
Sub CreerCases(NomFeuille As String, Haut As Integer, Gauche As Integer, _
LargeurForm As Integer, Gras As Boolean, Barrer As Boolean, _
Activer As Boolean)

Dim CaseACocher As MSForms.CheckBox
'crée les cases à cocher et les paramètres
Set CaseACocher = Me.Cadre.Controls.Add _
("Forms.CheckBox.1", _
"Chk" & NomFeuille)
With CaseACocher
.Left = Gauche
.Top = Haut
.Width = LARGEUR
.Height = HAUTEUR
.Caption = NomFeuille
.Enabled = Activer
With .Font
.Name = "Arial Narrow"
.Size = 8
.Strikethrough = Barrer
.Bold = Gras
End With
End With
'calcul du positionnement
If Gauche >= LargeurForm - (LARGEUR + ESPACE) Then
Gauche = ESPACE
Haut = Haut + (HAUTEUR + ESPACE)
Else
Gauche = Gauche + (LARGEUR + ESPACE)
Haut = Haut
End If

Set CaseACocher = Nothing

End Sub
Private Sub PositionDimensions(LargeurForm As Integer, Haut As Integer, _
HauteurMax As Integer, NBCtrl As Integer)

Dim TopCadre As Integer

'dimensionne le formulaire
'positionne et dimensionne
'les différents contrôles
With Me
.Width = LargeurForm + 5
.Height = Haut + ((HAUTEUR + (ESPACE * 2)) * 2)
.Caption = "Feuilles à imprimer."

'bouton "Imprimer"
With .CmdImprimer
.ControlTipText = "Imprimer"
.Top = 0
.Left = 0
.Height = DIM_BTN
.Width = DIM_BTN
.Caption = ""
'.Picture = LoadPicture("C:Dossier1Dossier2Image1.bmp")
.PicturePosition = fmPicturePositionAboveCenter
End With

'bouton "Aperçu"
With .CmdApercu
.ControlTipText = "Aperçu"
.Top = 0
.Left = DIM_BTN + ESP_BTN
.Height = DIM_BTN
.Width = DIM_BTN
.Caption = ""
'.Picture = LoadPicture("C:Dossier1Dossier2Image2.bmp")
.PicturePosition = fmPicturePositionAboveCenter
End With

'ComboBox pour le nombre de cases à cocher sur une ligne
With .CmbControle
.ControlTipText = "Nombre de contrôles sur la même ligne"
.Height = HT_BTN
.Width = LG_BTN
End With

'TextBox pour définir la hauteur du formulaire
With .TxtHautForm
.ControlTipText = "Hauteur du formulaire " & _
"(Appuyer sur Entrée pour redessiner le " & _
"formulaire ou quitter le contrôle)"
.Height = HT_BTN
.Width = LG_BTN
End With

'case à cocher pour afficher ou non les feuilles cachées
With .ChkCacher
.Height = HT_BTN
.Width = 115
.Caption = "Inclure les feuilles cachées"
End With

'positionne ces contrôles en fonction du nombre
'de cases à cocher qui seront sur la même ligne
Select Case NBCtrl
Case 1, 2
TopCadre = (HT_BTN + ESP_BTN) * 3
If NBCtrl = 1 Then
LargeurForm = LARGEUR + ESPACE + BARRE
Else
LargeurForm = ((LARGEUR + ESPACE) * 2) + BARRE
End If
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = HT_BTN + ESP_BTN
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .ChkCacher
.Top = (HT_BTN * 2) + (ESP_BTN * 2)
.Left = 0
End With
Case 3
TopCadre = (HT_BTN + ESP_BTN) * 2
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = HT_BTN + ESP_BTN
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .ChkCacher
.Top = 0
.Left = (DIM_BTN * 2) + LG_BTN + (ESP_BTN * 3)
End With
Case Else
TopCadre = DIM_BTN + ESP_BTN
With .CmbControle
.Top = 0
.Left = (DIM_BTN + ESP_BTN) * 2
End With
With .TxtHautForm
.Top = 0
.Left = (DIM_BTN * 2) + LG_BTN + (ESP_BTN * 3)
End With
With .ChkCacher
.Top = 0
.Left = ((DIM_BTN + LG_BTN) * 2) + (ESP_BTN * 4)
End With

End Select

'cadre contenant les cases à cocher
With .Cadre
.Top = TopCadre
.Left = 0
If Me.Height > HauteurMax Then
Me.Height = HauteurMax
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = Haut
.Height = HauteurMax - (TopCadre + 18)
.Width = LargeurForm + BARRE
Me.Width = LargeurForm + (BARRE + 3)
Else
.Height = Me.Height - (TopCadre + 18)
.Width = LargeurForm
End If
End With

'centre le formulaire sur l'écran
.Top = ((GetSystemMetrics(HT_ECRAN) * 0.75) / 2) - (.Height / 2)
.Left = ((GetSystemMetrics(LG_ECRAN) * 0.75) / 2) - (.Width / 2)
End With

End Sub

Sub FeuillesSelect(NBSelect As Integer)
Dim Ctrl As Control
Dim Sel As Boolean
Dim Cacher As Boolean
Dim I As Integer

'récupère la valeur dans la base de registre dans le clé
'HKEY_CURRENT_USERSoftwareVB and VBA Program
SettingsFormulaireImpression
Cacher = CBool(GetSetting("FormulaireImpression", _
"Feuille", "Cacher", False))

For Each Ctrl In Me.Cadre.Controls
'si la case à cocher est true
If Ctrl.Value = True Then
'totalise le nombre de pages sélectionnées
'(la valeur de I est passée par référence
'et modifiée par NBSelect)
NBSelect = NBSelect + 1
With Worksheets(Ctrl.Caption)
'dé-sélectionne la feuille active du classeur
'au moment de l'ouverture du formulaire
If Sel = False Then
'si la feuille est une feuille cachée, et si
'la case est cochée, récupère le nom de la feuille
'afin de la re-cacher plus tard et la rend visible
'afin de permettre sa sélection pour l'impression
If Cacher = True And .Visible = False Then
I = I + 1
ReDim Preserve TblCacher(1 To I)
TblCacher(I) = Ctrl.Caption
.Visible = True
End If
.Select (True)
'une fois la feuille active dé-sélectionnée et la
'1ère feuille sélectionnée, autorise la sélection
multiple
Sel = True
End If
If Cacher = True And .Visible = False Then
I = I + 1
ReDim Preserve TblCacher(1 To I)
TblCacher(I) = Ctrl.Caption
.Visible = True
End If
.Select (False)
End With
End If
Next
Set Ctrl = Nothing
End Sub
'********************************


Hervé.


a écrit dans le message de
news:
Bonjour,

Je ne sais pas vraiment me servir des macros, tout juste les copier et
les coller pour obtenir le résultat que je souhaite !

En l'occurence, je souhaiterais pouvoir cliquer sur un bouton pour
imprimer quelques onglets (pas tous) d'un fichier Excel.

Si il existe une macro pour ça, ce serait génial !!! Et si je
pouvais
la comprendre pour l'utiliser, ce serait encore mieux !!

Par avance, merci beaucoup.


Bonjour Hervé,

Je suis tout simplement ravi du code que vous avez crée il m'a été d'une aide divine...mais oui il y a un mais j'aimerais y apporter une petite modification mais je n'y parvient pas. J'ai pourtant bien analysé le code et compris dans l'ensemble. mais voila il y a un "bug", lorsque l'on selectionne une des feuille dans le userform pour afficher l'apercu c'est ok mais lorsqu'on ferme l'apercu l'userform ce trouve ouvert sur une fenetre excel grise et il n'y a plus trace du document à moins de fermer le userform...j'aimerais que lorsqu'on ferme l'apercu le userform se trouve ouvert sur le fichier excel en question comme il l'était avant de cliquer sur le bouton aperçu. Voyiez vous ?

Le sujet date de 2006 mais j'espere de l'aide :) a trés vite