Choix des onglets à imprimer depuis UserForm

Salut les adeptes d'Excel !

Je cherche à faire une macro qui permettrait via un Userform de choisir les onglets du classeur à imprimer.

J'ai donc regardé un peu sur le net ce que je trouvais à ce sujet là, et même si je n'ai pas trouvé exactement ce que je cherchais,

j'ai vu des bonnes pistes, alors j'ai tenté ma chance.

Mais n'ayant pas du tout l'habitude d'utiliser les UserForm, ou autre variable de type "Tableau",

je bloque un petit peu.

Donc, je suis à la recherche du coup de pouce qui va bien !

Voici le code (qui ne marche pas) où je me suis arrété :

Sub userform_initialize()

'--- Déclaration des variables
Dim s As Object

'--- Génération de la liste des onglets
With ListBox1
    .MultiSelect = fmMultiSelectExtended
    .Clear
    For Each Feuille In Sheets
        .AddItem Feuille.Name
    Next
End With

End Sub

'Action quand on clique sur le Bouton 
Private Sub CommandButton1_Click()

'--- Déclaration des variables
Dim i As Integer
Dim Feuille As Variant

'--- Impression des onglets sélectionnés
With ListBox1
    Application.EnableEvents = False
    For i = 1 To .ListCount
        If .Selected(i) Then
            Feuille(i) = Sheets(i).Name
        End If
    Next
    '--- Impression des feuilles listées
    With Sheets(Feuille)
        .PrintPreview
    End With
    Application.EnableEvents = True
End With

End Sub

Ca plante au niveau du

Feuille(i) = Sheets(i).Name

Et je vous joins le fichier bien entendu.

Merci d'avance à ceux ou celles qui tenteront de m'aider !

Bonjour

Une version simplifiée

Private Sub CommandButton1_Click()
'--- Impression des onglets sélectionnés
Dim I As Integer

  Me.Hide
  With ListBox1
    For I = 0 To .ListCount - 1
        If .Selected(I) Then
          Sheets(.List(I)).PrintPreview
        End If
    Next I
  End With
End Sub

Bonjour Banzai64,

Ta solution marche, cependant je souhaiterai que les onglets sélectionnés soient tous imprimés en une seule fois,

pour plusieurs raisons :

1) Dans mon fichier final, il y aura un pied de page avec "[Page]/[Pages]"

Donc avec la solution actuelle, j'aurai "1/1" pour chaque page

2) L'impression se fera la plupart des cas en PDF

Donc il ne faut avoir qu'un seul fichier

3) Un grand nombre d'onglets vont être présents dans le fichier (une centaine)

Donc il ne faut pas que ce soit trop contraignant pour l'utilisateur

C'est pour cette raison que j'ai tenté d'utiliser un tableau (Variable Feuille),

que je souhaite remplir par les onglets sélectionnés, puis lancer l'impression des feuilles listées dans ce tableau :

Sheets(Feuille).PrintPreview

Mais je n'ai pas réussi à renseigner ce tableau, c'est sur ce point que j'aurai besoin d'aide...

Bonsoir

A vérifier

'Action quand on clique sur le Bouton "Créer"
Private Sub CommandButton1_Click()
'--- Déclaration des variables
Dim I As Integer
Dim Feuille() As Variant
Dim NbFeuille As Integer

'--- Impression des onglets sélectionnés
  With ListBox1
    For I = 0 To .ListCount - 1
      If .Selected(I) Then
        ReDim Preserve Feuille(NbFeuille)
        Feuille(NbFeuille) = .List(I)
        NbFeuille = NbFeuille + 1
      End If
    Next I
  End With
  Unload Me
    '--- Impression des feuilles listées
  With Sheets(Feuille)
        .PrintPreview
  End With
End Sub

Merci beaucoup,

c'est plus qu'une aide, c'est le boulot complet que tu as fait...

Je me pencherai dès demain matin pour comprendre commet tu as réaliser ça,

car je ne connais pas du tout "ReDim Preserve",

puis je suis curieux de savoir pourquoi il faut faire une boucle

"For I = 0 To .ListCount - 1" et non pas "For i = 1 To .ListCount"

En tout cas merci beaucoup pour m'avoir consacrer de ton temps !

j'en profite pour dire que même si je ne poste pas très souvent sur le forum,

je le consulte régulièrement car c'est une mine d'or.

Souvent je lis les nouveaux messages des personnes ayant des problèmes,

mais je ne suis jamais assez bon pour pouvoir aider.

Ca viendra

A+

Bonsoir

piratman a écrit :

puis je suis curieux de savoir pourquoi il faut faire une boucle

"For I = 0 To .ListCount - 1" et non pas "For i = 1 To .ListCount"

Listcount indique le nombre d'éléments dont la numérotation commence à 0

piratman a écrit :

car je ne connais pas du tout "ReDim Preserve"

Permet de redimensionner la (dernière) dimension d'un tableau sans perdre les éléments déjà dans le tableau

Merci !

Petite question Bonus :

Est-il possible de supprimer "l'entourage" de chaque valeur de la ListBox ?

EDIT :

J'ai trouvé la solution, j'utilise fmMultiSelectMulti au lieu de fmMultiSelectExtended,

puis j'ai rajouter ListBox1.ListIndex = -1 après la génération de la liste.

Bonjour (pour commencer la journée)

Je n'en sais rien, j'ai supprimé la ListBox et je l'ai recréée

A voir

Bonjour Banzai64,

nos posts se sont croisés, j'ai édité mon précédent post pour dire comment je m'en étais sorti.

Merci à toi.

Rechercher des sujets similaires à "choix onglets imprimer userform"