CommandButton pour effacer les valeurs d'un formulaire

  • Initiateur de la discussion Marie
  • Date de début
M

Marie

Guest
Bonjour à tous, à nouveau je fais appel à vos connaissances pour tenter d'améliorer mon fichier.

J'ai un userform de type formulaire qui contient des textbox et des combobox et commandbutton.

Un commandbutton "OK" permet de valider les données encodées et d'alimenter un compteur.
J'aimerais que ce même CommandButton puisse, en plus d'alimenter le compteur, supprimer les valeurs des textbox et combobox afin que le userform soit à nouveau "vierge" pour de nouveaux encodages.

Est-ce possible ?

Merci à tous
Marie
 
A

Arnaud

Guest
salut,

Private Sub UserForm_Activate()
TextBox1.Value = ""
ComboBox1.Clear
End Sub

tu peux sinon le mettre a la fermeture avec l'envènement ( celui se lance qui si l'instance du userform est supprimé de la mémoire donc avec un Unload et non avec un UserForm1.Hide )

Private Sub UserForm_Terminate()
TextBox1.Value = ""
ComboBox1.Clear
End Sub
 
M

Marie

Guest
Salut Arnaud et le forum, merci de me lire

Ton code a pour effet de supprimer le contenu de mes combobox dés l'ouverture du userform.

Je souhaiterais que les valeurs soient effacées en cliquant sur mon commandbutton et pas en activant le userorm.

Est-ce possible ?
Marie
 
A

Arnaud

Guest
avec l'envenement

Private Sub CommandButton1_Click()
TextBox1.Value = ""
ComboBox1.Clear
End Sub

mais si l'utilisateur ferme ta userform à l'aide de la croix en haut a droite, tout t combo ou textbox seront encore remplis c pour ça que je te proposé cette solution.
 
M

Marie

Guest
Merci Arnaud

Cela fonctionne sauf pour deux combobox. Serait-ce parce que la commande "Listindex" est liée à celles-ci ?

J'ai le code suivant pour ces combobox :

Private Sub ComboBox1_Change()
' on a click sur le combo AUTEUR

If ComboBox1.ListIndex = -1 Then ' nouvel auteur
ComboBox2.Clear
TextBox5 = ""
TextBox1 = ""
ComboBox4 = ""
TextBox2 = ""
ComboBox7 = ""
TextBox3 = ""
TextBox4 = ""
Else
ComboBox2.Clear
L = ComboBox1.ListIndex + 2
auteur = Sheets("listes").Range("B" & L)
Range("A1").Activate

' recherche dans la feuille demande de la 1' ligne pour cette auteur
On Error Resume Next
Cells.Find(What:=auteur, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
On Error GoTo 0
num_lig = ActiveCell.Row ' n° ligne

' rempli le combox titre
i = num_lig
While Range("B" & i).Value = auteur
ComboBox2.AddItem Range("C" & i)
i = i + 1
Wend
ComboBox2.ListIndex = -1 ' affiche le 1' titre

' rempli les infos de la ligne
TextBox5 = Range("A" & num_lig)
TextBox1 = Range("D" & num_lig)
ComboBox4 = Range("E" & num_lig)
TextBox2 = Range("F" & num_lig)
ComboBox7 = Range("G" & num_lig)
TextBox3 = Range("H" & num_lig)
TextBox4 = Range("I" & num_lig)

End If

End Sub

J'avoue ne pas maîtriser du tout le VB
Merci beaucoup
Marie
 
@

@+Thierry

Guest
Bonjour Marie, Arnaud le Forum

J'ai peur de mal comprendre ta réponse Arnaud, en fait il me semble que Marie parle de CommandButton [OK] qui lui permet déjà de valider les entrée faites et d'incrémenter un compteur et elle souhaiterait en plus que ce même bouton lui permette aussi de "vider" les contrôles pour une nouvelle saisie sans décharger le UserForm...

Hors ta réponse semble indiquer de faire ceci à l'activation du UserForm ou à son déchargement... (Ce qui semble de plus inutile si les données sont entrées en RunTime elles disparraissent d'elles-même, même avec la fermeture pas la croix... (?)

Quand au Clear de ComboBox tu es aussi assez radicale !! Je pense que Marie aura encore besoin de sélectionner des Item dans la liste lors de la prochaine saisie...

A moins que quelque ne m'échappe, je conseille tout simplement ceci à Marie qui lui permettra de tout mettre à vide d'un coup toutes ses textBox et ComboBox (quelque soit la quantité)...

Private Sub CommandButton1_Click()
Dim CTRL As Control

'<<<Ici la macro de Marie qui permet de valider les données encodées et d'alimenter un compteur...

For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Then
CTRL = ""
ElseIf TypeOf CTRL Is MSForms.ComboBox Then
CTRL = ""
End If
Next
End Sub


Je pense que celà devrait convenir...

Bon après Midi
@+Thierry
 
A

Arnaud

Guest
effectivement j'avais du mal lire la question................je pensai que son bouton "ok" permettais de valider et de sortir du userform.
autant pour moi ;).
au passage, ta réponse pour la macro est effectivement plus sympas, surtout si tu as pas mal de composant.
 
@

@+Thierry

Guest
Re Bonjour

Marie je n'avais pas vu ta réponse de 15:49, mais en tout cas la solution que je te propose est compatible avec cette façon d'incrémenter les donnée dans ton UserForm par l'évènement ComboBox1_Change.

Par contre donc quand tu cliqueras sur ce CommandButton1 Toutes les TextBox et Toutes les ComboBox seront Vidée (les Combo conservant leur Listes de Données)

Pour ce qui est de la Méthode ListIndex pour les ComboBox c'est au Choix, car les ComboBox sont un peu un Hybride entre la TextBox et le ListBox, donc tu pourrais aussi faire ceci qui aurait le même effet que la macro que je t'ai donnée ci-dessus :

Private Sub CommandButton1_Click()
Dim CTRL As Control
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Then
CTRL = ""
ElseIf TypeOf CTRL Is MSForms.ComboBox Then
CTRL.ListIndex = -1
End If
Next
End Sub

Par contre si on parle de ListBox au lieu de ComboBox, seule la méthode ListIndex = -1 est applicable...


PS pour Arnaud, et oui ça m'arrive aussi de lire et pourtant d'être à coté de la question !!!

Bonne Fin d'Après Midi
@+Thierry
 
M

Marie

Guest
Merci à tous les deux,


Finalement j'ai opté pour la première solution de @+Thierry car cela fonctionne très bien ainsi.

A très bientôt dans un nouveau fil car autre problème non lié.

Bonne fin d'après-midi
C'est très sympa
Marie
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 062
Membres
104 015
dernier inscrit
kkgk