Et d'un. Bon.
Le deuxième, maintenant : 1998 (exemple) --->> mil neuf cent quatre-vingt-dix-huit et non mille neuf cent quatre-vingt-dix-huit
S'attendre (comme d'hab) au troisième, etc ... :lol:
Version imprimable
Et d'un. Bon.
Le deuxième, maintenant : 1998 (exemple) --->> mil neuf cent quatre-vingt-dix-huit et non mille neuf cent quatre-vingt-dix-huit
S'attendre (comme d'hab) au troisième, etc ... :lol:
Re
unparia, non, non je n'avais pas occulté ta remarque.
Ici, je m'en suis tenu à 2 idées principales :
- éviter d'inclure dans un formulaire des actions indépendantes ;
- éviter une prolifération de boutons Je suis sorti, il y a peu, d'une gestion de plein de contrôles "CheckBox"
Pour en revenir à ta remarquable* boutade, il suffit de supprimer la boucle et changer l'option de la propriété "Multiselect.
Maintenant se pose la question de l'intérêt de passer par un formulaire ; mais c'est une autre histoire !
*que j'ai remarquée s'entend ;). Les boutades… j'aime surtout quand elles ont un caractère plutôt constructif qu'ironique :lol:.
pour le fun j'en ai fit un avec une listbox
;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Option Explicit Sub TEST2() Dim donne As Boolean, x x = DialogPrintMultiSheet2(ThisWorkbook, donne) If donne = True Then Sheets(x).PrintPreview ':MsgBox Join(x, ",") End Sub Function DialogPrintMultiSheet2(ByRef Wbk As Workbook, donne As Boolean) Dim Obj As Object, bout As Object, j&, UsF, i& 'on créé la boite de dialog Set UsF = ThisWorkbook.VBProject.VBComponents.Add(3) With UsF: .Properties("Caption") = "Selection De Sheets à Imprimer": .Properties("Width") = 200: .Properties("Height") = (Wbk.Sheets.Count + 1) * 25: End With 'on créé les checkbox au nombre de sheets Set Obj = UsF.designer.Controls.Add("Forms.ListBox.1", "listesheets", True) With Obj: .Top = 0: .Left = 10: .Width = 100: .MultiSelect = 1: .ListStyle = 1: End With 'on crée le bouton valider Set bout = UsF.designer.Controls.Add("Forms.CommandButton.1", "valider", True) With bout: .Left = UsF.Properties("Width") - 80: .Top = 12: .Width = 66: .Height = 20: .Caption = "Ok": .BackColor = vbGreen: End With 'on crée le bouton Annuler Set bout = UsF.designer.Controls.Add("Forms.CommandButton.1", "Annuler", True) With bout: .Left = UsF.Properties("Width") - 80: .Top = 42: .Width = 66: .Height = 20: .Caption = "Annuler": .BackColor = RGB(255, 150, 150): End With With UsF.CodeModule j = .CountOfLines .insertlines j + 1, "public tbl as String" .insertlines j + 2, "public donne as boolean " .insertlines j + 3, "Private Sub Valider_Click()" & vbCrLf & "dim i" & vbCrLf & " With listesheets" & vbCrLf & " For i = 0 To .ListCount - 1" & vbCrLf & " If .Selected(i) Then tbl = tbl & "" "" & .List(i)" & vbCrLf & " Next" _ & vbCrLf & " End With" & vbCrLf & "donne=true:if tbl="" "" or tbl="""" then donne=false" & vbCrLf & "Me.Hide" & vbCrLf & "End Sub" .insertlines j + 13, "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer):Cancel=true:donne=false: Me.Hide:End Sub" .insertlines j + 14, "Private Sub Annuler_Click():Cancel=true:donne=false: Me.Hide :End Sub" End With VBA.UserForms.Add (UsF.Name) With UserForms(UserForms.Count - 1) For i = 1 To Wbk.Sheets.Count: .listesheets.AddItem Wbk.Sheets(i).Name: Next .Show donne = .donne If donne = True Then DialogPrintMultiSheet2 = Split(Trim(.tbl), " ") Else MsgBox "annulée" End With ThisWorkbook.VBProject.VBComponents.Remove (UsF) End Function