XL 2019 Bouton VBA pour imprimer une feuille

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.
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
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
 

hokousai

XLDnaute Nouveau
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
 

Staple1600

XLDnaute Barbatruc
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 ?
 

hokousai

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

Fichiers joints

Staple1600

XLDnaute Barbatruc
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)
;)
 

Staple1600

XLDnaute Barbatruc
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
 

Staple1600

XLDnaute Barbatruc
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 ;)
 

hokousai

XLDnaute Nouveau
Re,
Ok c'est fait et cela fonctionne

J'ai juste remplacé
VB:
TextBox1 = 1
par
VB:
TextBox1 = ""
Pour que le la case soit vide au démarrage de la boite de dialogue.

Merci pour ton aide précieuse
 

Staple1600

XLDnaute Barbatruc
Re

Je ne parlais pas de cet ajout mais de celui-ci
Copies:=TextBox1.Value
Et j'avais mis 1 comme valeur par défaut pour éviter que cela bug avec cet ajout :rolleyes:
 

Staple1600

XLDnaute Barbatruc
Re

Donc je répète ma question:
Est-ce que tu as testé l'impression?
(avec un nombre supérieur à 1 saisi dans TextBox1)
 

Discussions similaires


Haut Bas