Bonjour,

je vous expose mon problème.

Dans mon application j'ai X userform (nom normalisé de type usf1, usf2, etc...) qui peuvent contenir, chacun, de 1 à n TextBox avec des noms formalisés (de type txtC1P1 ou txtC2P1 - C correspondant à l'usf et P à l'indice du textbox dans l'usf) ainsi que 3 boutons.

Chaque bouton appelle une procédure qui va effectuer des actions sur l'un des textbox sans savoir lequel. Je suis obligé de boucler sur les contrôles de l'userform et de détecter sur lequel faire les actions.

Si je mets la procédure dans chaque userform, aucun soucis cela fonctionne mais j'ai du code dupliquée. Si je mets la procédure dans un module (avec le nom de l'usf en paramètre), j'ai une erreur 91 lors du parcours des contrôles sur l'userform qui lance la procédure, à priori car il est ouvert.

La question est de savoir comment, dans un module, boucler sur les contrôles d'un userform qui est ouvert ?

Voici le code utilisé qui, je précise, fonctionne très bien sur des userform non chargé :

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
For Each VBCmp In ThisWorkbook.VBProject.VBComponents
        If VBCmp.Type = vbext_ct_MSForm Then
            If VBCmp.Name = nameUsf Then
                For Each ctrl In VBCmp.Designer.Controls
                    If TypeName(ctrl) = "TextBox" Then
                        If Left(ctrl.Name, 5) = "txtCh" Then
                            texte = ctrl.SelText
                            numTxtBox = numTxtBox + 1
 
                            If texte <> "" Then
                                texteTotal = ctrl.Text
                                position = ctrl.SelStart
                                Exit For
                            End If
                        End If
                    End If
                Next ctrl
            End If
        End If
    Next VBCmp