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.
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.
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.