-
comprendre code vba
bonjour je voudrais comprendre le code vba suivant:
Function PrintSelectedSheets()
Dim I As Long
Dim TopPos As Long
Dim SheetCount As Long
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim CB As CheckBox
Dim Numcop As Long
Dim X
Application.Dialogs(xlDialogPrinterSetup).Show
Application.ScreenUpdating = False
If ActiveWorkbook.ProtectStructure Then
MsgBox "Workbook is protected.", vbCritical
Exit Function
End If
Set CurrentSheet = ActiveSheet
X = CurrentSheet.Name
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
SheetCount = 0
TopPos = 40
For I = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(I)
If Application.CountA(CurrentSheet.Cells) <> 0 And CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 150, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
TopPos = TopPos + 13
End If
Next I
PrintDlg.Buttons.Left = 240
With PrintDlg.DialogFrame
.Height = Application.Max(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "Sélectez les Fuielles de calcul à imprimer"
End With
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
Numcop = Application.InputBox("Entrez le nombre de copies à imprimer:", "Combien de copies?", 1, Type:=1)
If Numcop = 0 Then
ElseIf Len(Numcop) > 0 Then
End If
CurrentSheet.Activate
Dim cnt As Integer
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
For Each CB In PrintDlg.CheckBoxes
If CB.Value = xlOn Then
If cnt = 0 Then
Worksheets(CB.Caption).Select
Else
Worksheets(CB.Caption).Select Replace:=False
End If
cnt = cnt + 1
End If
Next CB
ActiveWindow.SelectedSheets.PrintOut copies:=Numcop
End If
Else
MsgBox "Toutes les feuilles de calcul sont vides."
End If
Application.DisplayAlerts = False
PrintDlg.Delete
Sheets(X).Select
Application.DisplayAlerts = True
End Function
-
Bonjour,
Pour information tu es dans le forum VB.net et pas dans le forum VBA.
https://chatgpt.com/share/67c41a56-7...5-9f9762a6987f
-
le lien est mort :mouarf:
Tu peux lancer la fonction en pas à pas si besoin aussi, et regarder les valeurs des variables.
Ce que ça fait:
- ouverture de la boite de dialogue d'impression
- si la structure du classeur est protégé, on ne fait rien
- on ajoute une feuille de type dialogue
- on compte les feuilles visibles qui contiennent des données et ajoute autant de checkbox (cases à cocher) sur la boite de dialogue
- ça ajoute sur cette feuille une frame (un cadre) "selectez les fuielles de calcul à imprimer" (aie ça pique les yeux cet orthographe), 2 boutons, une zone de saisie pour le nombre de copies
- on sélectionne ensuite les feuilles sélectionnées (sélection multiple) et ça lance l'impression du nombre de copies de copies saisi de ces feuilles
- supprime la feuille de dialogue
- redonne le focus à la feuille initiale