Nommer une valeur "non vide" dans une condition if
Bonjour à tous
Amis de la prog, j'espère que vous allez bien . Me voilà une nouvelle fois coincé avec un bout de code qui me fait tourner en rond.
J'ai des textbox qui s'alimentent si l'on double click sur une ligne de ma listview.
Je souhaite bloquer un textbox ("textbox7") de mon formulaire en fonction de 2 conditions :
la 1ère, qui marche bien, bloque (locked et enabled ) en fonction de la valeur numérique d'une autre texbox (textbox4) par contre je voudrais une 2ème condition pour que s'il y a déjà du texte dans la textbox7, elle soit là encore bloquée.
Avec mon code ça marche mais quand je rafraichis les champs ou quand je reclique sur une ligne de ma listview la textbox 7 reste bloquée, le text a bien disparu mais la fonction locked et enabled semblent etre trestées activé. Il doit me manquer une boucle ?
Help please
Bonne journée à tous
Private Sub TextBox4_Change()
TextBox4.ForeColor = red
If TextBox4.Value < 3 Or TextBox7.Value >= 0 Then
TextBox7.Locked = True
TextBox7.Enabled = False
TextBox7.Value = ""
TextBox7.BackColor = &HC0FFC0
TextBox8.Locked = True
TextBox8.Enabled = False
TextBox8.Value = ""
TextBox8.BackColor = &HC0FFC0
Else
TextBox7.Locked = False
TextBox7.Enabled = True
TextBox7.BackColor = &H80000005
TextBox8.Locked = False
TextBox8.Enabled = True
TextBox8.BackColor = &H80000005Bonjour,
Quand tu réalimentes les textbox à partir de la listview, il faut que tu redonnes accès (propriétés locked, enabled et color puisque tu en changes suivant qu'il est ou non actif) explicitement le textbox7 comme tu le fais dans les 3 lignes après le Else de l'extrait de code ci-dessous. Tu ne rencontres pas le même pbm avec TextBox8 ?
Re,
Merci Cylfo pour ton aide et ton retour.
pas de souci avec la textbox8 sauf si je la route en condition (Or TextBox7.Value >= 0).
J'ai recoller le code sous la procédure if et dans mon appel listview, je vois que ça marche mieux dans le sens ou je vois bien le changement de couleur mais le text est toujours bloqué. Pour déclarer une valeur texte comme non vide > 0 suffit ?
Désolé si je ne comprends pas bine mais pour "redonner accès explicitement à la textbox7" je dois recoller ces lignes de codes ci dessous sous la fin de ma condition et/ ou dans ma listview quand je lance les appels ou directement dans la textbox 7
TextBox7.Locked = False
TextBox7.Enabled = True
TextBox7.BackColor = &H80000005Merci encore pour le coupe de main
Belle fin de journée
Bonjour,
Un objet TextBox (comme son nom l'indique TextBox7.Value <> ""
Sans le fichier (anonymisé s'il contient des données nominatives ou confidentielles) c'est difficile de répondre avec exactitude. Pour redonner accès au TextBox7, il faut que tu insères les lignes dans la procédure qui charge les données dans les TextBox à partir de la ListView. Je ne peux pas être plus précis sans voir le code ...
Bonjour,
Un grand merci à toi Sylfo, tes explications étaient claires (déjà dans le 1er message) mais j'ai compris grace au 2ème. Top aussi pour identifier des valeurs non nules, j'en avais besoin dans un autre ligne de code.
Ca marche nickel.
Par contre j'ai voulu rajouter un msgbox si mes textbox sont pleines mais il s'affiche 2 fois, une 1ère fois quand je clique sur une lignede ma listview pour alimenter mes texbox et une deuxième fois quand je réinitialise ou qd je reclique sur une autre ligne de là listview.
Je laisse encore le post ouvert qqs jours si des fois quequ'1 à déjà eu le problème.
Encore un gd merci à toi Sylflo et a ce site qui est vraiment très riche.
Qu'est-ce que tu entends par "si mes textbox sont pleins", après qu'ils soient tous alimentés ?
L'affichage du MsgBox est dans quelle procédure ? Vérifies aussi que tu ne l'as pas mis à 2 endroits différents.
re,
"si mes textbox sont pleins" => après avoir double cliqué sur ma listview cela alimente mes textbox, certaines des texbox ont des valeurs (c'est là que je dit qu'elles sont pleines, désolé pour le vocabulaire qui ne doit pas être adapté!) et d'autres sont vides. J'ai mis le message msg box sous ma procédure de blocage des textbox. J'ai bien vérifié mais la commande n'y est qu'une fois
Private Sub TextBox4_Change()
TextBox4.ForeColor = red
If TextBox4.Value < 3 Or TextBox7.Value >= 0 Then
TextBox7.Locked = True
TextBox7.Enabled = False
TextBox7.Value = ""
TextBox7.BackColor = &HC0FFC0
TextBox8.Locked = True
TextBox8.Enabled = False
TextBox8.Value = ""
TextBox8.BackColor = &HC0FFC0
msgbox ("plus de possibilité")
Else
TextBox7.Locked = False
TextBox7.Enabled = True
TextBox7.BackColor = &H80000005
TextBox8.Locked = False
TextBox8.Enabled = True
TextBox8.BackColor = &H80000005merci
Belle fin de journée
bonsoir,
Private Sub TextBox4_Change() : Le message se déclenche à chaque fois que la valeur de TextBox4 est modifiée (donc y compris si tu lui affectes ""). Si TextBox4 est alimenté à partir d'une donnée de la ListView c'est normal que le message se déclenche autant fois que tu cliques sur une ligne de la ListView et si tu dans la procédure de chargement des données de la listView tu as une instruction préalable du type TextBox4.Value = "" le message sera affiché 2 fois, à la raz de TextBox4 et à à son initialisation par la valeur de la ListView. Si cela ne te permet pas de résoudre le problème, un fichier anonymisé si besoin sera nécessaire.Cdlt,
Cylfo
Bonjour,
Merci Cyflo pour les conseils, c'est très clair. j'ai trouvé un moyen de contourner le pb avec un click sur le frame dans lequel il y a mes textbox concernées.
en faisant comme je n'ai pas le souci du double affichage par contre je pense avoir fait une erreur dans mon instruction car tout fonctionne dès que la valeur de mes textbox =5 par contre les autres valeurs -txb =4; =3;=2) posent problème, on dirait que je n'arrive pas à passer après l'instruction du texbox =5
peut être que mon code est mauvais
Private Sub Frame2_Click()
If TextBox15.Value = 5 And Me.TextBox11.Locked = True Then
MsgBox ("plus de place")
ElseIf TextBox15.Value = 5 And Me.TextBox9.Locked = True Then
MsgBox ("il resste 1 place")
ElseIf TextBox15.Value = 5 And Me.TextBox7.Locked = True Then
MsgBox ("il resste 2 places")
ElseIf TextBox15.Value = 5 And Me.TextBox14.Locked = True Or Me.TextBox13.Locked = True Then
MsgBox ("il resste 3 places")
ElseIf TextBox15.Value = 5 And Me.TextBox14.Locked = True And Me.TextBox13.Locked = True Then
MsgBox ("il resste 4 places")
ElseIf TextBox15.Value = 4 And Me.TextBox9.Locked = True Then
MsgBox ("plus de place")
ElseIf TextBox15.Value = 4 And Me.TextBox7.Locked = True Then
MsgBox ("il reste 1 place")
ElseIf TextBox15.Value = 4 And Me.TextBox14.Locked = True Or Me.TextBox13.Locked = True Then
MsgBox ("il reste 2 places")
ElseIf TextBox15.Value = 4 And Me.TextBox14.Locked = True And Me.TextBox13.Locked = True Then
MsgBox ("il reste 3 places")
ElseIf TextBox15.Value = 3 And Me.TextBox7.Locked = True Then
MsgBox ("plus de place")
ElseIf TextBox15.Value = 3 And Me.TextBox14.Locked = True Or Me.TextBox13.Locked = True Then
MsgBox ("il resste 1 place")
ElseIf TextBox15.Value = 3 And Me.TextBox14.Locked = True And Me.TextBox13.Locked = True Then
MsgBox ("il resste 2 places")
ElseIf TextBox15.Value = 2 And Me.TextBox14.Locked = True Or Me.TextBox13.Locked = True Then
MsgBox ("plus de place")
Else: TextBox15.Value = 2 And Me.TextBox14.Locked = True And Me.TextBox13.Locked = True
MsgBox ("il resste 1 place")
End IfMerci pour le coup de main
Bonne journée à tous
Sur un bout de code et sans savoir ce que contiennent les textbox, je ne sais pas répondre à part que l'instruction suivante est vérifiée (=vrai=) si Me.TextxtBox13.Locked = True (donc même si TextBox15 vaut 4 et/ou TextBox14.locked = False).
ElseIf TextBox15.Value = 5 And Me.TextBox14.Locked = True Or Me.TextBox13.Locked = True Then
MsgBox ("il resste 3 places")
Bonjour à tous,
Encore une fois Cylfo merci pour tes explications j'ai compris mon pb et mon doublon. J'ai pu modifier mes conditions
Merci tous
Belle journée,