Code VBA qui fonctionne a moitié

Bonjour

dans ce code les textbox se colorent bien si elles sont vides mais pas si elles ne sont pas vides

ou est mon erreur?

Merci pour votre aide

Private Sub UserForm_Initialize()

Dim i As Integer
    Dim txtBox As MSForms.TextBox

    ' Boucle à travers les TextBox de 1 à 20
    For i = 1 To 5
        ' On essaie de récupérer le TextBox correspondant
        On Error Resume Next
        Set txtBox = Me.Controls("TextBox" & i)
        On Error GoTo 0

        ' Vérifie si le TextBox existe
       ' If Not txtBox Is Nothing Then
            ' Colorie le TextBox en fonction de son contenu
            If txtBox.Value = "" Then
                txtBox.BackColor = RGB(255, 255, 0) ' Bleu si vide
            Else
             If txtBox.Value <> "" Then
                txtBox.BackColor = RGB(255, 255, 255) ' Blanc si non vide
            End If
        End If
   'End If

Next i
End Sub

Bonjour,

Ne disposant pas de ton fichier, je me demande si ton textbox n'est pas réellement vide ("") mais ne contiendrait pas un espace "vide" (" ")
Donc sii c'est le cas essaies de transformer la ligne

If txtBox.Value = "" Then

en

If txtBox.Value = " " Then

En espérant que cela fonctionne, bonne journée

Bonjour,

C'est mieux d'écrire "ElseIf" tout collé, autrement tu empiles les "IF" pour rien.

De plus, dans ce cas précis il n'y a pas besoin d'expliciter la 2e condition puisque "tout ce qui n'est pas vide est nécessairement plein" donc tu peux juste écrire

If txtBox.Value = "" Then
  txtBox.BackColor = RGB(255, 255, 0) ' Jaune si vide
Else
  txtBox.BackColor = RGB(255, 255, 255) ' Blanc si non vide
End If

Mais bon théoriquement ton code devrait fonctionner… Je l'ai testé sur un Userform et moi j'ai bien un fond blanc pour les textboxes non-vides, et jaune sur les vides…

Edit : Salut @Jacky, bonne remarque, c'est probablement que ta textbox n'est pas vide ! N'oublie pas aussi que tes commentaires ne correspondent pas au code et cela peut porter à confusion : tu boucles bien sur 5 textboxes, pas 20 ! (et tu colories en jaune, pas bleu !)

Bonjour Joco7915 ,

C'est assez pénible de ne pas avoir de classeur représentatif pour connaitre les tenants et les aboutissants.

Sinon un code simple :

Private Sub UserForm_Initialize()
Dim i&, x As Control
   On Error Resume Next
   For i = 1 To 5          ' la mise en couleur des TextBox (to 5/To 20) on ne sait pas ??!?!!!??
      Set x = Nothing: Set x = Controls("Textbox" & i)
      If x.Text = "" Then x.BackColor = vbCyan Else x.BackColor = vbWhite
   Next i
   On Error GoTo 0
End Sub

Bonjour Saboh,

Que veux tu me préciser avec

N'oublie pas aussi que tes commentaires ne correspondent pas au code et cela peut porter à confusion : tu boucles bien sur 5 textboxes, pas 20 ! (et tu colories en jaune, pas bleu !)

Bien cordialement

Bonjour Saboh,

Que veux tu me préciser avec

N'oublie pas aussi que tes commentaires ne correspondent pas au code et cela peut porter à confusion : tu boucles bien sur 5 textboxes, pas 20 ! (et tu colories en jaune, pas bleu !)

Bien cordialement

A mon avis le code fonctionne même s'il est perfectible (cf. propositions de mafraise et moi). Le problème pourrait venir du fait que la macro boucle sur les 5 premiers textboxes (i de 1 à 5), et les colories. S'il y en a 20 comme indiqué dans le commentaire, les 15 autres ne sont pas traités par la macro. D'où le "problème".

Ça montre l'intérêt d'utiliser des variables plutôt que des valeurs "magiques" dans le code. En écrivant par exemple "For i = 1 To Me.Controls.Count" on s'assure de boucler sur tous les contrôles, qu'importe qu'on en ajoute ou non. Bien sûr il faut adapter le reste du code, notamment en vérifiant le type de contrôles, mais c'est moins sujet à erreurs.

Merci pour vos solutions

Je suis encore un bleu en VBA

Crdlt

Pas de soucis, ce sont des pistes d'améliorations, pas des critiques ! Bonne journée

Merci Saboh,

Evidemment s'il y a 20 textbox alors qu'il n'en traite que 5, il y a problème
Mais en ce qui me concerne je n'avais pas pris en considération sa remarque où il parlait de 20 textbox en pensant qu'il s'agissait d'une étourderie de sa part

Au plaisir et bonne journée
A+

Rechercher des sujets similaires à "code vba qui fonctionne moitie"