Microsoft 365 Adapter mon code

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Marvin57

XLDnaute Occasionnel
Bonjour tout le monde,

est-ce que quelqu'un pourrait m'aider à modifier le code ci-dessous, afin qu'il prenne en compte les textbox définis.

VB:
Private Sub TextBox2_Change()
      If InStr(Me.TextBox2.Value, "BIO") Then
      Me.TextBox2.BackColor = RGB(255, 0, 0)
      End If
End Sub

Je voudrai que ce code prenne en compte les textbox suivants ;

Du textbox1 au textbox35
et
Du textbox46 au textbox80

Donc petite explication;

si les textbox ci-dessus contiennent le mot BIO les textbox devraient se colorier en rouge.

Merci d'avance à vous pour votre aide.
Marvin57
 
Solution
il mets bien les textbox qui comportent le mot BIO en rouge, mais garde également les textbox en rouge qui ne comportent plus le mot BIO.
Je n'ai fait qu'utiliser votre code mais si vous voulez aussi la couleur blanche quand "BIO" est absent :
VB:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_Change()
    If InStr(TB, "BIO") Then TB.BackColor = RGB(255, 0, 0) Else TB.BackColor = RGB(255, 255, 255)
End Sub
Ensuite les modules de classe, je n'y connais rien.
C'est le moment de vous y mettre, placez dans le module de classe Classe1 :
VB:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_Change()
    If InStr(TB, "BIO") Then TB.BackColor = RGB(255, 0, 0)
End Sub
Et dans le code de l'UserForm :
VB:
Dim TB(69) As New Classe1

Private Sub UserForm_Initialize()
Dim c As Control, nn, n
For Each c In Me.Controls
If c.Name Like "TextBox#*" Then
    nn = Val(Replace(c.Name, "TextBox", ""))
    If nn < 36 Or nn > 45 And nn < 81 Then
        Set TB(n).TB = c
        n = n + 1
    End If
End If
Next
End Sub
 
C'est le moment de vous y mettre, placez dans le module de classe Classe1 :
VB:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_Change()
    If InStr(TB, "BIO") Then TB.BackColor = RGB(255, 0, 0)
End Sub
Et dans le code de l'UserForm :
VB:
Dim TB(69) As New Classe1

Private Sub UserForm_Initialize()
Dim c As Control, nn, n
For Each c In Me.Controls
If c.Name Like "TextBox#*" Then
    nn = Val(Replace(c.Name, "TextBox", ""))
    If nn < 36 Or nn > 45 And nn < 81 Then
        Set TB(n).TB = c
        n = n + 1
    End If
End If
Next
End Sub
Re ,

Merci pour vos codes job75.

Mais j'aurai deux points a vous demander si vous voulez bien.

1) pourriez vous me mettre les commentaires a côté des lignes de code afin que je comprenne bien le fonctionnement.

2) J'ai essayé dans mon fichier réel. Cela fonctionne lors du premier affichage des données dans les textbox. Mais, si je change l'affichage une seconde fois, il mets bien les textbox qui comportent le mot BIO en rouge, mais garde également les textbox en rouge qui ne comportent plus le mot BIO.
 
Bonjour
tu peux gérer cela dans ton userform aussi
pour commencer
dans VBE tu va sélectionner tout tes textbox concernés ou un par un comme tu veux
et tu va leur mettre un Tag (voir capture ci dessous )tu met le mot que tu veux moi je met "classe"
demo.gif


ensuite tu ouvre le module userform et tu lui colle ca
en prenant soin de changer pour le nom de ton userform
VB:
Public WithEvents Txtb As MSForms.TextBox   'ajoute un event pour collection textbox
Dim cls() As New UserForm1                  'variable tableaux des instances de classe

Private Sub UserForm_Activate()
Dim ctrl, a&
For Each ctrl In Me.Controls                                    'boucle sur tout les controls du userform
 If ctrl.Tag = "classe" Then                                    'si le control a un Tag"classe alors
 a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).Txtb = ctrl  'on dimention le tableau cls  de plus 1 et on inscrit l'object ctrl(qui est forcement un textbox)
 End If
 Next
End Sub
'ici un event semblable au event textbox sauf qu'il va servir pour tous puisque chaque instance en possède 1
Private Sub txtb_Change()
Txtb.BackColor = Array(vbRed, vbWhite)(Abs(InStr(1, Txtb.Value, "bio", vbTextCompare) = 0))
End Sub
'terminé tes textbox devriendrons rouge si il y a "bio" dans leur valeur
et voila ton backcolor rouge/blanc dynamique est en place

demo.gif
 

Pièces jointes

Bonjour
tu peux gérer cela dans ton userform aussi
pour commencer
dans VBE tu va sélectionner tout tes textbox concernés ou un par un comme tu veux
et tu va leur mettre un Tag (voir capture ci dessous )tu met le mot que tu veux moi je met "classe"
Regarde la pièce jointe 1178984


ensuite tu ouvre le module userform et tu lui colle ca
en prenant soin de changer pour le nom de ton userform
VB:
Public WithEvents Txtb As MSForms.TextBox   'ajoute un event pour collection textbox
Dim cls() As New UserForm1                  'variable tableaux des instances de classe

Private Sub UserForm_Activate()
Dim ctrl, a&
For Each ctrl In Me.Controls                                    'boucle sur tout les controls du userform
 If ctrl.Tag = "classe" Then                                    'si le control a un Tag"classe alors
 a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).Txtb = ctrl  'on dimention le tableau cls  de plus 1 et on inscrit l'object ctrl(qui est forcement un textbox)
 End If
 Next
End Sub
'ici un event semblable au event textbox sauf qu'il va servir pour tous puisque chaque instance en possède 1
Private Sub txtb_Change()
Txtb.BackColor = Array(vbRed, vbWhite)(Abs(InStr(1, Txtb.Value, "bio", vbTextCompare) = 0))
End Sub
'terminé tes textbox devriendrons rouge si il y a "bio" dans leur valeur
et voila ton backcolor rouge/blanc dynamique est en place

Regarde la pièce jointe 1178986
Bonjour patricktoulon,

Merci à vous aussi pour votre aide. Malheureusement il m'affiche une erreur.
J'ai bien changé le nom du userform
VB:
Public WithEvents Txtb As MSForms.TextBox   'ajoute un event pour collection textbox
Dim cls() As New USF_COMMANDES                  'variable tableaux des instances de classe

mais je ne comprends pas !

voici l'erreur qu'il affiche

ERREUR CODE.jpg
 
il mets bien les textbox qui comportent le mot BIO en rouge, mais garde également les textbox en rouge qui ne comportent plus le mot BIO.
Je n'ai fait qu'utiliser votre code mais si vous voulez aussi la couleur blanche quand "BIO" est absent :
VB:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_Change()
    If InStr(TB, "BIO") Then TB.BackColor = RGB(255, 0, 0) Else TB.BackColor = RGB(255, 255, 255)
End Sub
 
a mona vis tu a un controls qui n'est pas un textbox qui a pris le tag classe
vérifie bien
as tu testé mon fichier avant d'adapter ?
ensuite il faut savoir que je n'inscrit rien dans les textbox, mais ils me servent a afficher des données d'une base.
C'est à dire je clique sur un boutton et il prend les données dans la source et les affichent dans les textbox.

l'erreur est ici ?
 
Je n'ai fait qu'utiliser votre code mais si vous voulez aussi la couleur blanche quand "BIO" est absent :
VB:
Public WithEvents TB As MSForms.TextBox
[/QUOTE]
Re,

Merci beaucoup job75, tout fonctionne comme souhaité.

J'avais essayé plusieurs changements avec votre code comme par exemple ceci

[CODE]Public WithEvents TB As MSForms.TextBox

Private Sub TB_Change()
    If InStr(TB, "BIO") Then TB.BackColor = RGB(255, 0, 0)
    Else TB.BackColor = RGB(255, 255, 255)
End Sub

donc si je comprends bien je n'aurai pas du placer le else en dessous ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
35
Affichages
2 K
Réponses
13
Affichages
491
Réponses
3
Affichages
599
Réponses
2
Affichages
423
Retour