Griser calendrier, textbox et combobox à partir d'un bouton
Bonjour à tous,
mon soucis est le suivant :
je souhaiterais griser toute une ligne de calendrier, textbox, combobox quand l'utilisateur ne l'a pas sélectionner.
L'accès à ses calendrier, textbox & co se ferrait uniquement si l'utilisateur à cliquer sur le bouton ajouter calendrier.
En pièce jointe Voici à quoi ressemble ma demande:
la première ligne sert à rentrer la première absence. Si l'utilisateur veux rentrer une seconde absence il clique sur le bouton 1 et accède à la ligne entière qui était au préalable grisé. A l'inverse, si il veux supprimer une ligne et faire un reset des données ainsi que griser l'accès il lui suffira de cliquer sur la bouton 2.
J'ai déja trouvé un code et adapter pour la partie de droite,
c'est à dire si la case jour est rempli, la case heure est grisé, sauf qu'elle ne se loop pas, c'est a dire que si je supprime la donnée rentré dans la case jour, la case heure est grisée pour définitif, voici mon code que j'utilise :
Private Sub Jour1_change()
'si une valeur quelconque est sélectionné, heure1 est active
If Jour1.Value = "X" Then
Me.Heure1.Enabled = True
Else
'sinon, inactive, me permet d'éviter l'activation de la page, il prends en compte la fonction de la page sélectionnée
Me.Heure1.Enabled = False
Heure1.BackColor = RGB(217, 217, 217)
End If
End SubVoila messieurs, (la partie deux était une petite aparté, je bosse dessus pour y remédier)
merci par avance de votre aide
Bonjour,
Je ne suis pas sûr d'avoir compris à 100% ton problème, mais si tu veux créer deux boutons : un pour autoriser la modification des champs, l'autre pour l'interdire, alors il te suffit de coder la fonction de ton bouton comme ceci :
Private Sub CommandButtonInterdire_Click()
<TonComposant>.Enabled = False
<TonComposant>.BackColor = RGB(217, 217, 217)
End SubPour le bouton « Autoriser », tu repasse la propriété Enabled à True, et tu remet ta couleur originale.
Par contre il te faudra lister tout les composants à bloquer dans ta fonction, et ce n'est pas forcément optimal. Tu peux donc les regrouper dans des Frames, et changer directement la propriété Enabled de la Frame qui contient tes composants.
Je te laisse tester tout ça, et si ça ne te convient pas, n'hésite pas à me corriger.
Merci pour ta réponse,
du coup j'ai opéré comme tel :
dans le Private Sub UserForm_Initialize() j'ai mis
'permet de mettre les calendriers en inaccessible en saisie (et automatiquement en grisé)
Calendrier3.Enabled = False
Calendrier4.Enabled = False
Calendrier5.Enabled = False
Calendrier6.Enabled = False
'permet de mettre les textbox "heure_dep" inaccessible en écriture
heure_dep2.Enabled = False
'permet de mettre en arrière plan la couleur grise
heure_dep2.BackColor = RGB(217, 217, 217)
heure_fin2.Enabled = False
heure_fin2.BackColor = RGB(217, 217, 217)et dans la fonction du bouton j'ai mis ceci :
'permet de mettre le calendrier 3 et 4 disponible en écriture
Calendrier3.Enabled = True
Calendrier4.Enabled = True
'Permet de mettre le textbox "heure_dep2" disponible en écriture
heure_dep2.Enabled = True
'permet de mettre la couleur d'arrière plan en blanc
heure_dep2.BackColor = RGB(255, 255, 255)donc cela fonctionne correctement, maintenant ce que je souhaiterais c'est que lorsque je clique sur le bouton n°2,
cela repasse en grisé et fasse un reset des cellules. Pour le grisé j'ai fait cela
'permet de mettre le calendrier 3 et 4 inaccessible en écriture
Calendrier3.Enabled = False
Calendrier4.Enabled = False
'Permet de mettre le textbox "heure_dep2" inaccessible en écriture
heure_dep2.Enabled = False
'permet de mettre la couleur d'arrière plan en gris
heure_dep2.BackColor = RGB(217, 217, 217)tout marche mais pour la fonction reset je n'ai pas le code ..
et seconde question sais tu comment agir sur ma macro (qui permettait de grisé soit la case jours ou soit celle des heures)
pour qu'elle fasse une boucle? je m'explique car c'est peux etre mal expliqué:
si je rentre une valeur dans la case de droite, ma case de gauche se grise, et inversement.
Par contre lorsque je supprime la valeur, la case reste grisé, ce dont je voudrait c'est quelle repasse en "accessible automatiquement.
merci de ton aide
pour la premiere partie de ma demande j'ai fini par trouvé:
il suffit de mettre
heure_dep2.text=""cependant pour la seconde partie de la problématique je n'ai pas de solution ...
OK je comprends mieux ce que tu souhaites faire maintenant.
Je t'invite à construire tes fonctions comme cela :
Private Sub TextBox2_Change()
If TextBox2.Value = "" Then
'Active TextBox1
TextBox1.Enabled = True
TextBox1.BackColor = RGB(255, 255, 255)
Else
'Désactive TextBox1
TextBox1.Enabled = False
TextBox1.BackColor = RGB(127, 127, 127)
End If
End SubEn supposant que TextBox1 et TextBox2 soient sur la même ligne. Ce code interdit la modification de ta première Textbox quand tu entre du texte dans la seconde, et autorise à nouveau la modification une fois que la seconde Textbox se vide.
Je ne sais pas si ça te convient (parce que tu me parlais de réinitialiser le contenu des cellules grisées, sauf que les cellules grisées sont forcément vides avec ce code).
En tout cas, si tu veux vraiment t'assurer que les cellules sont vides, tu peux les vider avec :
TextBox.Value = ""c'est presque bon
en faite ça ne marque que dans un sens.
si je met une valeur a gauche, la case de droite se grise > je supprime la valeur, la case de droite redevient blanche. donc ça c'est ok
par contre lorsque je met une valeur à droite, la case de gauche se grise, mais ne redevient pas blanche lorsque je supprime la case de droite ..
Oui effectivement, je ne t'ai donné que le code pour la TextBox2, mais celui-ci est bien entendu applicable pour la TextBox1 :
Private Sub TextBox1_Change()
If TextBox1.Value = "" Then
'Active TextBox2
TextBox2.Enabled = True
TextBox2.BackColor = RGB(255, 255, 255)
Else
'Désactive TextBox2
TextBox2.Enabled = False
TextBox2.BackColor = RGB(127, 127, 127)
End If
End Subc'est parfait, merci beaucoup !