Bonjour,

J'ai une application qui compte plus de 70 userforms et chacun comporte plusieurs CommandButtons.

J'ai une liste des boutons pour chaque userform du projet. Je veux pouvoir mettre à jour cette liste quand une nouvelle userform est ajoutée.

Le tout doit se faire par programmation.

Voici ce que j'ai préparé: (Les variables ont été déclarées)

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
For i = 1 To Data(Formulaire).NbreRec     'Fichier contenant les listes de boutons pour chaque userform
    Call GetChamp(Formulaire, i, Form.Nom_Du_Formulaire)     'Lecture du nom du formulaire
    For Each LaForm In Application.VBE.ActiveVBProject.VBComponents
        If LaForm.Name = Trim(Data(Formulaire).Champs(Form.Nom_Du_Formulaire)) Then
            Gosub Lister
        End If
    Next LaForm
Next
 
Exit Sub
 
Lister:
For Each Contrôle In LaForm.Controls
    If TypeOf Contrôle Is MSForms.CommandButton Or (TypeOf Contrôle Is MSForms.Label And LCase(Left(Contrôle.Name, 9)) = "lblbouton") Then
        If Contrôle.Name <> "CmdNouveau" And _
            Contrôle.Name <> "CmdSupprimer" And _
            Contrôle.Name <> "CmdModifier" And _
            Contrôle.Name <> "CmdAnnuler" And _
            Contrôle.Name <> "CmdSauver" And _
            Contrôle.Name <> "CmdRecherche" And _
            Contrôle.Name <> "CmdImprimer" And _
            Contrôle.Name <> "CmdQuitter" And _
            Contrôle.Name <> "CmdEnregistrer" And _
            Contrôle.Name <> "CmdCharger" And _
            Contrôle.Name <> "CmdPlus" And _
            Contrôle.Name <> "CmdMoins" And _
            Contrôle.Name <> "CmdMod" And _
            Contrôle.Name <> "CmdX" And _
            Contrôle.Name <> "CmdDébut" And _
            Contrôle.Name <> "CmdFin" And _
            Left(Contrôle.Name, 9) <> "CmdRetour" Then
 
'Recherche des boutons existants (Ces procédures sont fiables)
            Call GetChamp(Formulaire, i, Form.Nom_Du_Formulaire)
            Call GetChamp(Formulaire, i, Form.No_Table)
            ReDim Conditions(2)
            Conditions(1).NoChamp = Cnfg.No_Formulaire
            Conditions(1).Opérateur = "="
            Conditions(1).Valeur = i
            Conditions(2).NoChamp = Cnfg.Bouton
            Conditions(2).Opérateur = "="
            Conditions(2).Valeur = Contrôle.Name
            Call ListerRecords(Liste(), TableLocale, Conditions(), False)
'Si le bouton n'est pas listé alors il est ajouté et sauvé
            If Liste(0) = 0 Then
'Les paramètres du bouton sont enregistrés dans des contrôles puis sauvés dans le fichier.
                ComboFormulaire.Value = i
                txtDescription = "du formulaire " & Chr(34) & Mid(Trim(Data(Formulaire).Champs(Form.Nom_Du_Formulaire)), 5) & Chr(34)
                txtBouton = Contrôle.Name
                If Left(Contrôle.Name, 9) = "lblBouton" Then
                    txtLégende = "L'onglet " & Chr(34) & Contrôle.Caption & Chr(34)
                Else
                    txtLégende = "Le bouton " & Chr(34) & Contrôle.Caption & Chr(34)
                End If
                ComboActifOuInactif.Value = 1
                Nouveau = True
                Call SauverDossier
                Call FinaliserSauvegarde(TabNavig, TabPrivé, TableLocale, TableauFiltré(), NumCrit, Critère(), ÉtatDesBoutons)   'Procédure interne nécessaire à la sauvegarde.
            End If
        End If
    End If
Next Contrôle
Le problème c'est que la variable objet LaForm est Nothing même si j'en obtient le nom.
Je ne peux pas en tirer les contrôles qu'elle contient.

Y a-t-il une solution ?

Merci pour vos lumières.