Bonjour,

J'ai réussi à créer un UserForm contenant entre autres une liste de 3 options pour déclencher au choix le traitement A, le B ou les deux.
J'ai également créé une structure de contrôle pour permettre de confirmer la suppression de l'existant avant de procéder à un nouveau traitement.
Merci aux tutos de ce site

Tout est fonctionnel, mais je voudrai optimiser mon code avant de l'annoter, afin de permettre d'éventuelles évolutions (je pense notamment à l'ajout d'autres traitements, tout en gardant le système des boutons radio, leur nombre étant par définition très limité).
En clair, je me demande s'il n'est pas possible de contourner la redondance dans mes boucles de contrôles, étant donné que seule la liste des feuilles à contrôler varie.

Merci pour vos remarques et suggestions, et bonne journée !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Private Sub Bt_1Recup_Click()
    'Récupère les données des classeurs sélectionnés
 
    'Tous
    If Bt_Opt_Tous.Value = True Then
        'Suppression de l'existant
        For Each Ws1 In ActiveWorkbook.Worksheets
            If Ws1.Name = "StructA" Or Ws1.Name = "ValsA" Or _
             Ws1.Name = "StructB" Or Ws1.Name = "ValsB" Then
                Msg = "Supprimer les listes existantes ?"
                Reponse = MsgBox(Msg, vbYesNo + vbExclamation + vbDefaultButton2, "Confirmation de suppression")
                If Reponse = vbNo Then
                    Msg = "Traitement annulé par l'utilisateur"
                    TxtBox_Info = Msg
                    Exit Sub
                Else
                    Application.DisplayAlerts = False
                    For Each Ws2 In ActiveWorkbook.Worksheets
                        If Ws2.Name = "StructA" Or Ws2.Name = "ValsA" Or _
                         Ws2.Name = "StructB" Or Ws2.Name = "ValsB" Then
                            Ws2.Delete
                        End If
                    Next Ws2
                    Application.DisplayAlerts = True
                End If
            End If
        Next Ws1
 
        'Traitement
        Application.ScreenUpdating = False
        Call Trait_A
        Call Trait_B
        Application.ScreenUpdating = True
 
 
    ' A
        ElseIf Bt_Opt_ANA.Value = True Then
        'Suppression de l'existant
        For Each Ws1 In ActiveWorkbook.Worksheets
            If Ws1.Name = "StructA" Or Ws1.Name = "ValsA" Then
                Msg = "Supprimer les listes existantes ?"
                Reponse = MsgBox(Msg, vbYesNo + vbExclamation + vbDefaultButton2, "Confirmation de suppression")
                If Reponse = vbNo Then
                    Msg = "Traitement annulé par l'utilisateur"
                    TxtBox_Info = Msg
                    Exit Sub
                Else
                    Application.DisplayAlerts = False
                    For Each Ws2 In ActiveWorkbook.Worksheets
                        If Ws2.Name = "StructA" Or Ws2.Name = "ValsA" Then
                            Ws2.Delete
                        End If
                    Next Ws2
                    Application.DisplayAlerts = True
                End If
            End If
        Next Ws1
 
        'Traitement
        Application.ScreenUpdating = False
        Call Trait_A
        Application.ScreenUpdating = True
 
    'B
        Else:
        'Suppression de l'existant
        For Each Ws1 In ActiveWorkbook.Worksheets
            If Ws1.Name = "StructB" Or Ws1.Name = "ValsB" Then
                Msg = "Supprimer les listes existantes ?"
                Reponse = MsgBox(Msg, vbYesNo + vbExclamation + vbDefaultButton2, "Confirmation de suppression")
                If Reponse = vbNo Then
                    Msg = "Traitement annulé par l'utilisateur"
                    TxtBox_Info = Msg
                    Exit Sub
                Else
                    Application.DisplayAlerts = False
                    For Each Ws2 In ActiveWorkbook.Worksheets
                        If Ws2.Name = "StructB" Or Ws2.Name = "ValsB" Then
                            Ws2.Delete
                        End If
                    Next Ws2
                    Application.DisplayAlerts = True
                End If
            End If
        Next Ws1
 
        'Traitement
        Application.ScreenUpdating = False
        Call Trait_B
        Application.ScreenUpdating = True
    End If
End Sub