Microsoft 365 Adapter mon code

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

job75

XLDnaute Barbatruc
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
 

Marvin57

XLDnaute Occasionnel
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.
 

patricktoulon

XLDnaute Barbatruc
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

  • textbox rouge blanc instr(bio).xlsm
    16.3 KB · Affichages: 1

Marvin57

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
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
 

Marvin57

XLDnaute Occasionnel
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 ?
 

Marvin57

XLDnaute Occasionnel
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 ?
 

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35