backcolor dans textbox conditions multiples

Y

Yvon

Guest
Bonsoir à tous

J'ai plusieurs textbox qui changent de couleurs pour autoriser la saisie, elles sont commandées par une cellule qui change de valeur suivant l'action d'un menu déroulant.

Quelle est la syntaxe pour ne pas à refaire une ligne de code par numéro.

Pour être plus clair comment remplacer ci dessous en une ou deux igne :

multiprest.TextBox2.BackColor = &HFF&
If sheets(1).Range('G28').Value = 31 Then multiprest.TextBox2.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 32 Then multiprest.TextBox2.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 33 Then multiprest.TextBox2.BackColor = &HFFFFFF

Par avance merci
a++
Yvon
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Yvon,

Je ne sais pas si c'est volontaire ou si c'est une erreur, mais tu mets 3 fois la même couleur d'arrière-plan. En me basant sur ce que tu as écrit, je te donne le code suivant :

If Sheets(1).Range('G28') Mod 31 <= 2 then
  multiprest.TextBox2.BackColor = &HFFFFFF
End If


Sans connaître le reste du code et les autres valeurs que peut prendre la cellule G28, difficile de proposer autre chose :unsure:

Amicalement
Charly

Edition : En 1 ligne, cela donne
If Sheets(1).Range('G28') Mod 31 <= 2 then multiprest.TextBox2.BackColor = &HFFFFFF

Message édité par: Charly2, à: 21/11/2005 04:23

Message édité par: Charly2, à: 21/11/2005 04:25
 
Y

Yvon

Guest
Salut Charly,

C'est fou quand on à la tête dans le guidon l'explication parait limpide, et après une réponse, je m'aperçois que c'est pas super clair.

Pour être clair et limpide :

J'ai un userform avec 3 texbox, dont la couleur initiale est rouge (saisie interdite), lorque la saisie est autorisée elle passe au blanc en respectant les conditions du menu déroulant, qui renvoi un npmbre dans une cellule ce qui donne :

La cellule est Sheets(1).Range('G28')

= 30 = textbox1 + texbox3 blanc, textbox2 rouge
=31 = textbox1 + textbox2 blanc, texbox3 rouge
= 32 = textbox2 blanc, textbox1 + texbox3 rouge
=33 = textbox2+ texbox3 blanc, textbox1 rouge

Les autres valeurs n'appellent pas le USF

En espérant avoir été plus clair
Mon souci, malgré le bon numéro les variations de couleurs ne sont pas dans le bon ordre et je pense que c'est du à la mulmtiplication des conditions.

Je te livre le code lié au menu déroulant:
Sub multiprestations()
'appelle du USF'
If Range('K11') >= 3 Then
If Range('G28') <> 31 Then Range('E28') = Range('G28')
If Range('G28') >= 30 Then
If Range('G28') <= 33 Then multiprest.Show
With Me
'fond JE'
multiprest.TextBox1.BackColor = &HFF&
If sheets(1).Range('G28').Value = 30 Then multiprest.TextBox1.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 31 Then multiprest.TextBox1.BackColor = &HFFFFFF
'Fond loc salle journée'
multiprest.TextBox2.BackColor = &HFF&
If sheets(1).Range('G28').Value = 31 Then multiprest.TextBox2.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 32 Then multiprest.TextBox2.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 33 Then multiprest.TextBox2.BackColor = &HFFFFFF
'Fond loc salle 1/2 journée'
multiprest.TextBox3.BackColor = &HFF&
If sheets(1).Range('G28').Value = 30 Then multiprest.TextBox3.BackColor = &HFFFFFF
If sheets(1).Range('G28').Value = 33 Then multiprest.TextBox3.BackColor = &HFFFFFF
End With
End If
End If


End Sub

Merci du coup de main
a++
Yvon
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Yvon, bonsoir à toutes et à tous :)

Yvon, je ne comprends pas bien ton code. Pourquoi ne mets-tu pas le code d'initialisation des TextBox(es) dans le code de ton USF multiprest ?

Enfin, je te propose une solution (pas forcément la meilleure) pour répondre à tes conditions :

If (Range('G28') >= 30) And (Range('G28') <= 33) Then
&nbsp;&nbsp;multiprest.Show
&nbsp;&nbsp;With Me
&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox1.BackColor = &HFFFFFF
&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox2.BackColor = &HFFFFFF
&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox3.BackColor = &HFFFFFF
&nbsp;&nbsp;&nbsp;&nbsp;Select Case Sheets(1).Range('G28')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox2.BackColor = &HFF&
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case 31
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox3.BackColor = &HFF&
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case 32
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox1.BackColor = &HFF&
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox3.BackColor = &HFF&
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case 33
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiprest.TextBox1.BackColor = &HFF&
&nbsp;&nbsp;&nbsp;&nbsp;End Select
&nbsp;&nbsp;End With
End If

Questions facultatives : à quoi sert le 'With Me' ? Arrives-tu à initialiser tes TextBoxes après multiprest.Show ?

Amicalement
Charly
 
Y

Yvon

Guest
Salut Charly,

Comme tu le sais déjà, je n'est pas encore un VBA super académique et je bricole beaucoup, mais j'évolue petit à petit.

Le code dans multiprest initialize, j'ai essayé et cela ne permet pas de se tromper, la position reste figée, une fois pour toute il faut fermer et réouvrir pour avoir une autre configuration.

Mes textbox s'initialisent, à l'ouverture mais les couleurs changent de façon quellque peut anarchique, elles ne respectent pas l'ordre donné, mais apparaissent sans logique mais tout y est.

Ton code donne le même résultat, je pense que la solution est simple et on est tout proche, il faut que je bosse, je vais bien finir par trouver.

en tout cas merci du coup de main, c'est sympa, je te tiens au jus si je trouve.

a++
Yvon
 

Charly2

Nous a quittés en 2006
Repose en paix
Re Yvon,

Non, non, non !!! La couleur de tes TextBoxes est déterminée à l'initialisation de l'USF, mais si, dans le code de ton USF, tu modifies la valeur de la cellule G28, tu peux créer une procédure qui met à jour leurs couleurs en fonction de cette nouvelle valeur ; tu vois, ce n'est pas figé ;)

@+
Charly

Message édité par: Charly2, à: 22/11/2005 02:06
 
Y

Yvon

Guest
Cela marche mais une fois, à la première sélection, il faudrai que le code se réinitialise à chaque selection du menu déroulant, est ce que cela est faisable.

J'ai trafiqué un peu ton code initial de la façon suivante :
Case 30
multiprest.TextBox1.BackColor = &HFFFFFF
multiprest.TextBox2.BackColor = &HFF&
multiprest.TextBox3.BackColor = &HFFFFFF
Case 31
multiprest.TextBox1.BackColor = &HFFFFFF
multiprest.TextBox2.BackColor = &HFFFFFF
multiprest.TextBox3.BackColor = &HFF&
Case 32
multiprest.TextBox1.BackColor = &HFF&
multiprest.TextBox2.BackColor = &HFFFFFF
multiprest.TextBox3.BackColor = &HFF&
Case 33
multiprest.TextBox1.BackColor = &HFF&
multiprest.TextBox2.BackColor = &HFFFFFF
multiprest.TextBox3.BackColor = &HFFFFFF
End Select
End With
End If
End If
End Sub

a++
Yvon
 

Charly2

Nous a quittés en 2006
Repose en paix
Re-Re :)

Naturellement que c'est faisable, mais ce serait plus facile si tu mettais en ligne les parties essentielles de ton fichier, après avoir supprimé les données dont nous n'avons pas besoin...

@+
Charly

Message édité par: Charly2, à: 22/11/2005 02:10
 
Y

Yvon

Guest
Charly2 écrit:
Re Yvon,

Non, non, non !!! La couleur de tes TextBoxes est déterminée à l'initialisation de l'USF, mais si, dans le code de ton USF, tu modifies la valeur de la cellule G28, tu peux créer une procédure qui met à jour leurs couleurs en fonction de cette nouvelle valeur ; tu vois, ce n'est pas figé ;)

@+
Charly<br><br>Message édité par: Charly2, à: 22/11/2005 02:06

Quand tu me répondais j'insérais un post, nos réponses se sont croisées.

Heu..tu as surement raison, mais le code dans le usf.initialize est le même que celui la ?, ou il est différent, pourquoi cela restait figé.

J'essaye à nouveau et on en reparle

a++
yvon
 
Y

Yvon

Guest
Charly2 écrit:
Re-Re :)

Naturellement que c'est faisable, mais ce serait plus facile si tu mettais en ligne les parties essentielles de ton fichier, après avoir supprimé les données dont nous n'avons pas besoin...

@+
Charly<br><br>Message édité par: Charly2, à: 22/11/2005 02:10

Je sais mais le fichier initial fait plus de 5 méga, et franchement ce soir je suis out, j'ai le neuronne qui déconnecte, je te propose de te faire un ptit fichier demain...enfin tout à l'heure, quoi

Je te remercie pour ton aide Charly

a++
Yvon
 

Charly2

Nous a quittés en 2006
Repose en paix
Encore moi :)

Voici ce qui me pose question :

- ton menu déroulant est-il dans une feuille, un autre USF ou dans multiprest (je considère que non pour cette dernière solution),

- tu fais multiprest.show, pourquoi ? Je m'explique : lorsque je charge un USF, je fais 'Load USFName' et ainsi, je sais que c'est le 1er appel. Quand un USF est chargé mais qu'il perd le focus, je le rappelle ensuite par 'Show'. De cette manière, je suis sûr de ne pas me tromper en relisant le code car si j'utilise 'Show', c'est que mon USF est déjà en mémoire. Ceci est ma façon de procéder et je ne dis pas qu'elle est la meilleure ;)

- si ton menu déroulant n'est pas dans ton USF, comment y retournes-tu après chargement de multiprest (un USF est toujours modal, c-à-d qu'il fonctionne de manière exclusive tant qu'il n'est pas fermé ou caché).

Voilà. J'espère que tu comprends mieux pourquoi un exemple serait le bienvenu :)

Sur ce, je te souhaite une bonne nuit pour laisser tes neurones au repos (humm !)

@+
Charly
 

Ours masqué

XLDnaute Junior
Je sais pas si je suis le bienvenu pour vous aider. Je débute moi aussi mais j'ai planché de nombreuses heures sur un problème similaire. Notamment avec changement de couleur pseudo aléatoire.

Mes solutions ont été :
- de refaire la userform pour la faire de façon académique (il y avait des textbox en plus qui s'étaient cachées sous d'autres ! C'est pas sympa de leur part.) Ca ne changeait rien directement mais on ne sais jamais !:eek:

- ensuite, j'ai effectivement utilisé initialize() qui est très pratique puis les fonctions exit() et afterupdate() sur les texbox et ça ça marche bien. J'ai retrouvé toute la stabilité de mon fichier (ça plantait aussi...). Seul particularité de taille : pense bien à faire attention aux priorités entre exit, beforeupdate et afterupdate

Code:
Option Explicit

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Dans les TextBox de DATE, autorise uniquement les touches numériques et /
    KeyAscii = AutoriseFrappe(KeyAscii)
End Sub


Private Sub UserForm_Initialize()
' Limitation des
' Initialisation des couleurs de la fenêtre Données Pilote (Echéances...)
With DonnéesPilote
    .Caption = Range('C1').Value
    .TextBox1.BackColor = Range('A6').Interior.Color
    .TextBox1.MaxLength = 10
End With
End Sub

Private Sub TextBox1_Change()
' Mettre le fond blanc pour que la couleur ne soit plus valable : une MAJ s'impose
TextBox1.BackColor = 16777215
End Sub

Private Sub TextBox1_AfterUpdate()
' Mise à jour de la couleur dans la feuille ainsi que dans le textbox
' dès que le focus quitte le textbox
' C'est la seule façon de faire que j'ai trouvée qui fonctionne
' mais ça ne vérifie pas encore complètement le format de la saisie

    Call Couleurs.InitPiloteCouleur(DonnéesPilote.Caption)
    TextBox1.BackColor = Range('A6').Interior.Color
End Sub

:pinch: Bon, en gros, je gère une équipe de personnes et j'ai dans une userform 9 textboxes qui affichent des dates. Initialize donne le nombre de caractères et la couleur de fond déjà attirbuée.
Si je saisis une nouvelle date, je ne peux mettre que des chiffres et / (fonction keypress et surtout autorisefrappe bien connue sur ce forum)
puis, qd le focus quitte la textbox, afterupdate relance la fonction qui code les couleurs, avec un case... comme vous avez fait, sur la feuille de calcul et je reporte la couleur dans la texbox.

J'espère que ça pourra vous aider ne serait-ce qu'un peu. Si je suis hors sujet, je suis désolé de vous avoir pris votre temps.
Bon courage et bonne journée :whistle:
 
Y

Yvon

Guest
Bonjour Charly, ours masqué, le forum,

Merci de ta participation Ours Masqué, toutes les bonnes volonté sont les bienvenues, et tu fait bien d'ajouter ta pierre à mon frèle édifice.

Je n'est pas le temps d'étudier ton code sur le champ, j'ai juste pris 5 minutes, pour laisser à charly, le fichier demandé, j''étudie ton code ce soir en rentrant et je te fait un retour, promis.

Le fichier demandé à suivre

Bonne soirée à tous
a++
Yvon
 
Y

Yvon

Guest
C'est comme dab le fichier est pas arrivé je recommence [file name=textboxcouleur.zip size=10617]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/textboxcouleur.zip[/file] [file name=textboxcouleur.zip size=10617]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/textboxcouleur.zip[/file]
 

Pièces jointes

  • textboxcouleur.zip
    10.4 KB · Affichages: 23

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Yvon et Ours Masqué :)

Ours Masqué, je te remercie pour ta contribution : ça fait toujours plaisir de voir qu'on est pas seul à s'intéresser à certaines questions ;)

Pour Yvon, je te joins un petit fichier qui, pour l'exemple donné, me semble répondre à ta demande. J'y ai rajouté la désactivation des TextBox(es) qui ne sont pas à modifier...

C'est certainement pas le top, mais c'est déjà un début :)

A+
Charly [file name=Yvon_textboxcouleur.zip size=15313]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Yvon_textboxcouleur.zip[/file]
 

Pièces jointes

  • Yvon_textboxcouleur.zip
    15 KB · Affichages: 21

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 762
Membres
103 661
dernier inscrit
fcleves