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
Partager