XL 2019 Bouton VBA pour imprimer une feuille

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

hokousai

XLDnaute Nouveau
Bonsoir le forum,

Je souhaiterai utiliser l’UserForm du classeur " Projet vierge " dans mon projet.

Mais je n’arrive pas transposer les codes dans l’UserForm de ma feuille " Index "

Un peu d’aide me retirai une épine du pied.

Merci par avance.
 

Pièces jointes

Bonsoir le fil

hokousai
Pourquoi n'as-tu pas copié cette procédure dans le code de l'userform?
(évidemment, il faudra ensuite changer le noms des feuilles dans ton code)
VB:
Private Sub UserForm_Initialize()

Sheets("4,planning").PageSetup.PrintArea = ""
Sheets("2,gamme prévisionnelle").PageSetup.PrintArea = ""

Dim S As Object
ListBox1.MultiSelect = fmMultiSelectExtended

For Each S In Sheets
  ListBox1.AddItem S.Name
Next

If Feuil6.Range("BD12").Value = "" Then
    Sheets("4,planning").PageSetup.PrintArea = "$A$1:$BC$80"
    Sheets("4,planning").PageSetup.Orientation = xlLandscape
Else
    Sheets("4,planning").PageSetup.PrintArea = "$A$1:$DC$80"
    Sheets("4,planning").PageSetup.Orientation = xlLandscape
End If

Sheets("2,gamme prévisionnelle").PageSetup.PrintArea = "$A$1:$F$61"
Sheets("2,gamme prévisionnelle").PageSetup.Orientation = xlPortrait


End Sub
 
VB:
Private Sub apercu_Click()

Dim i As Integer

UserForm1.Hide

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

UserForm1.Show

End Sub

Private Sub imprimer_Click()

Dim i As Integer
UserForm1.Hide

If Application.Dialogs(xlDialogPrinterSetup).Show = False Then
    Exit Sub
Else
    With ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then Sheets(.List(i)).PrintOut
        Next
    End With
    UserForm1.Show
End If
End Sub


Private Sub ListBox1_Click()

For i = 0 To .ListCount - 1
   If ListBox1.Selected(i) Then Sheets(.List(i)).Select
   Next
End With

End Sub
Private Sub UserForm_Initialize()

Sheets("3,Index").PageSetup.PrintArea = ""
Sheets("4,CONTROL AVAN SERVIC SALAD BAR").PageSetup.PrintArea = ""

Dim S As Object
ListBox1.MultiSelect = fmMultiSelectExtended

For Each S In Sheets
  ListBox1.AddItem S.Name
Next

If Feuil3.Range("BD12").Value = "" Then
    Sheets("3,Index").PageSetup.PrintArea = "$A$1:$BC$80"
    Sheets("3,Index").PageSetup.Orientation = xlLandscape
Else
    Sheets("3,Index").PageSetup.PrintArea = "$A$1:$DC$80"
    Sheets("3,Index").PageSetup.Orientation = xlLandscape
End If

Sheets("4,CONTROL AVAN SERVIC SALAD BAR").PageSetup.PrintArea = "$A$1:$F$61"
Sheets("4,CONTROL AVAN SERVIC SALAD BAR").PageSetup.Orientation = xlPortrait


End Sub
J’ai collé les codes dans le Userform

Mais une boite de dialogue Débogage s’afficher quand je clique sur le bouton.

"Erreur d'éxécution '9’ :

L'indice n'appartient pas à le sélection"

De déboguer m’indique ==> UserForm1.Show

UserForm1.Show.jpg
 
Re,

Essaies (juste pour faire un test) de remplacer ta procédure Initialize par celle-ci
VB:
Private Sub UserForm_Initialize()
Dim S As Worksheet
ListBox1.MultiSelect = fmMultiSelectExtended
For Each S In Worksheets
ListBox1.AddItem S.Name
Next
End Sub
Est-ce que l'erreur survient toujours quand tu cliques sur le CommandButton2 sur la feuille Index ?
 
Bonjour @Staple1600 et le file,

@Staple1600, le code que tu m’as donné fonctionne nickel.
Merci beaucoup.

De plus pas besoin de modifier le code quand je rajoute des feuilles.

Autre chose, je souhaiterai indiquer dans le UserForm_Initialize() un code pour cacher la feuille "Index"

Et une dernière chose : qui je pense est plus complexe, indiquer dans le UserForm le nombre de feuilles à imprimer.

UserForm3.Show.jpg




Merci par avance.
 

Pièces jointes

Bonjour le fil

hokousai
Pour ne pas avoir la feuille Index, avec cette modif, cela devrait être bon.
VB:
Private Sub UserForm_Initialize()
Dim S As Worksheet
ListBox1.MultiSelect = fmMultiSelectExtended
For Each S In Worksheets
If Not S.Name = "Index" Then
ListBox1.AddItem S.Name
End If
Next
End Sub

PS: Si je puis me permettre
Si dans le nom de tes feuilles, AVAN veut dire AVANT (le contraire d'après) , merci de mettre le T, car cela choque mon œil droit que j'ai fort sensible 😉
A moins que ce ne soit par manque de place
(Parce CONTROL et SERVIC sont eux aussi amputés de leur lettre finale)
😉
 
Re

Deux ajout et une modification
Je te laisse tester en "vrai", notamment l'impression
VB:
Private Sub UserForm_Initialize()
Dim S As Worksheet
ListBox1.MultiSelect = fmMultiSelectExtended
For Each S In Worksheets
If Not S.Name = "Index" Then
ListBox1.AddItem S.Name
End If
Next
TextBox1 = 1
End Sub

Private Sub imprimer_Click()
Dim i As Integer
UserForm1.Hide

If Application.Dialogs(xlDialogPrinterSetup).Show = False Then
    Exit Sub
Else
    With ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then Sheets(.List(i)).PrintOut Copies:=TextBox1.Value
        Next
    End With
    UserForm1.Show
End If
End Sub
 
Re

Evidemment, il faut remplacer les procédures!
On ne peut pas avoir deux procédures avec le même nom.
Donc soit tu supprimes ta procédure imprimer_Click pour la remplacer par celle de mon message
Ou plus simple tu rajoutes dans la tienne, l'ajout qu'on voit apparaître dans mon message.
Je te laisse cherche quel est-il 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
32
Affichages
975
Retour