Bonjour,
J'ai intégré dans une macro un Userform, renommé Milestone_Edit, qui contient 2 lignes de 8 Textbox , un bouton "Edit", un bouton "Next" et un bouton "Close".
Dans la ligne supérieure je vais rechercher les valeurs de données situées sur une feuille Excel, certaines TextBox ne contiennent pas de valeurs et ce ne sont pas toujours les mêmes.
J'interdit la saisie dans les TextBox du Haut.
Si une texte Box de la ligne supérieure est vide j'interdit la saisie de donnée la TextBox correspondante de la ligne du bas et lui affecte une couleur grise.

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
For i = 0 To 16
            If Equipment_Edit.ComboBox1.Value = BL.Offset(i, 0) Then
            Milestone_Edit.Label13.Caption = Equipment_Edit.ComboBox1.Value
 
            Milestone_Edit.TextBox9.Value = ""
            Milestone_Edit.TextBox9.Value = BL.Offset(i, 3)
            Milestone_Edit.TextBox9.Enabled = False
                If Milestone_Edit.TextBox9.Value = "" Then
                Milestone_Edit.TextBox1.Enabled = False
                Milestone_Edit.TextBox9.BackColor = &H80000016
                Milestone_Edit.TextBox1.BackColor = &H80000016
                Else
                Milestone_Edit.TextBox1.Enabled = True
                Milestone_Edit.TextBox9.BackColor = &H80000005
                Milestone_Edit.TextBox1.BackColor = &H80000005
                End If
           .....
 
            Milestone_Edit.TextBox16.Value = ""
            Milestone_Edit.TextBox16.Value = BL.Offset(i, 10)
            Milestone_Edit.TextBox16.Enabled = False
                If Milestone_Edit.TextBox16.Value = "" Then
                Milestone_Edit.TextBox8.Enabled = False
                Milestone_Edit.TextBox8.BackColor = &H80000016
                Milestone_Edit.TextBox16.BackColor = &H80000016
                Else
                Milestone_Edit.TextBox8.Enabled = True
                Milestone_Edit.TextBox16.BackColor = &H80000005
                Milestone_Edit.TextBox8.BackColor = &H80000005
                End If
 
           End If
        Next i
Après avoir corrigé le code dont le grisage ne fonctionnait pas comme souhaité ( Philippe Tulliez ), j'ai essayé de le simplifier, par curiosité et pour m'améliorer, en utilisant le code suivant mais cela ne fonctionne pas et me renvoie une erreur "Propriété ou Méthode non gérée par cet objet"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Dim y As OLEObject
           For Each y In Milestone_Edit
               If y.Value = "" Then
               y.Object.BackColor = vbGray
              End If
           Next y
Merci pour votre aide et vos conseils
Eric