Effacer contenu USF

N

Nanard

Guest
Bonjour à tout le forum et aux exceliens,

Voilà, j'ai un USF, et je voudrais effacer le contenu avant chaque ouverture de l'USF.

Je débute en VBA, ce n'est pas toujours simple....lol...

je travaille sur ce sujet depuis plusieurs jours...

Merci de m'aider,

@ + nanard
 

Pièces jointes

  • Bontravail2.zip
    19.9 KB · Affichages: 36
G

GClaire

Guest
Nanard, le forum

Voici ce que j'utilise pour effacer tous les controls d'un UserForm


En début de procédure déclare ta variable, (Je ne sais pas comment il faut déclarer par-contre)


Dim ctrl

For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then ctrl.Value = ""
If TypeOf ctrl Is MSForms.ComboBox Then ctrl.Value = ""
Next ctrl

Voila ce que cela donerai pour toi :

Private Sub UserForm_Activate()
Dim DernierCDR As String, ctrl


DernierCDR = Range("H1").End(xlDown).Address
' Plage de données pour afficher dans liste déroulante
CDR.RowSource = "H1:" & DernierCDR
' Afficher la première marque de la liste (0)
CDR.ListIndex = 0
'
Dim DernierPoste_charge As String
DernierPoste_charge = Range("I1").End(xlDown).Address
' Plage de données pour afficher dans liste déroulante
Poste_charge.RowSource = "I1:" & DernierPoste_charge
' Afficher la première marque de la liste (0)
Poste_charge.ListIndex = 0
'Pour vider les controls
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then ctrl.Value = ""
If TypeOf ctrl Is MSForms.ComboBox Then ctrl.Value = ""
Next ctrl
End Sub

Salut, G'Claire
 
E

Eric C

Guest
Bonjour le forum
Bonjour G_Claire, Nanard

Oui, c'est bien la méthode préconisée par les grands mais voila Nanard a nommé ses contrôles à sa façon alors qu'il aurait été judicieux de mettre par exemple TextBoxPréparateur, TextBoxOF ComboBoxCDR Etc ...
ainsi il aurait pu tester si le contrôle était du genre TextBox ou Cbo mais là il faut qu'il reprenne dans le Userform_Initialize () toutes les appellations et dire que par Exemple Préparateur.value = ""
En ce qui concerne ses comboboxs, il seront toujours à la 1ere valeur car CDR & Poste_Charge ont pour additem apparent 0 dans l'Activate du USF donc pour une valeur vide il faut mettre = -1.
IL est probable que je me trompe peut être mais bon attentons.
@ ++ Eric C
 
E

Eric C

Guest
Re Bonjour le forum
Re Bonjour Nanard & G_Claire

Lors de l'ouverture de ton USF, seules les données de tes ComboBoxs sont apparentes donc c'est celles-ci que tu veux "effacer" à l'activation ?
Tu dis si c'est la mise à " " de ces 2 Cbos que tu désires ???


@ ++ Eric C
 
@

@+Thierry

Guest
Bonjour Eric, G'Claire, Nanard, le Forum

Le problème de Nanard est très simple, il n'utilise pas la bonne méthode pour ré-initialiser son UserForm...

Nanard utilise dans le CommandButton "OK" et le CommandButton "Annuler" :
Bon_de_travail.Hide

La méthode "Hide" Masque un objet sans le décharger... C'est pour celà que tous les Controls contiennent des données lors d'ouvertures successives du UserForm....

Donc la solution est bien simple, il ne faut pas utiliser "Hide" mais "Unload" qui s'écrit comme ceci :
Unload Bon_de_travail

ou encore :
Unload Me

Là où Nanard aura un problème c'est si il applique ce conseil directement, dans la procédure OK_Click()... En effet il masque le UserForm dès le début de cette procédure, si il opte pour le décharger à la place comme je préconise, il ne pourra plus récupérer les valeurs contenues dans tous les Controls...

Par conséquent j'ai ré-écrit la la procédure OK_Click()... On notera que je fais un test pour avoir la certitude d'une sélection dans l'une ou l'autre des combobox. Dans la foulée j'ai aussi optimisé le code en supprimant toute ces combinaisons pour retrouver l'Item sélectionné, je fais ceci directement sans passer par des variables (qui d'ailleurs n'étaient pas déclarées). Je reste aussi avec le même méthode "Cells(1,1)" à la place de "Range("A1") dans un souci d'homogéniéité dans le code.

Voici ce que celà donne :
Private Sub OK_Click()

If Me.CDR.ListIndex = -1 Or Me.Poste_charge.ListIndex = -1 Then
MsgBox "vous devez faire une sélection dans les ComboBox"
Exit Sub
End If

With Sheets("bon travail")
.Cells(5, 2).Value = Me.Préparateur.Value
.Cells(3, 2).Value = Me.Nb_pièces.Value
.Cells(3, 1).Value = Me.OF.Value
.Cells(5, 1).Value = Me.N°_Dessin.Value
.Cells(5, 4).Value = Me.Gamme_type.Value
.Cells(3, 3).Value = Me.Date_validité.Value
.Cells(9, 5).Value = Me.Tps_préparation.Value
.Cells(9, 7).Value = Me.Tps_Opération.Value
.Cells(6, 2).Value = Me.Texte.Value
.Cells(9, 3).Value = Me.Opération.Value
.Cells(16, 6).Value = Me.Opérateur.Value
.Cells(13, 5).Value = Me.CDR(Me.CDR.ListIndex)
.Cells(9, 2).Value = Me.Poste_charge(Me.Poste_charge.ListIndex)
End With
Unload Me
End Sub

Il y aura aussi le bouton Annuler à modifier...

Bon Dimanche à tous et toutes
@+Thierry
 
@

@+Thierry

Guest
PS : Noms des Contrôles (TextBox et ComboBox)

J'ai oublié de préciser que Nanard commet aussi l'erreur classique, comme le signale Eric, de nommer ses Controls sans se soucier d'aucune convention. Pour une mini appli comme celle-ci ce n'est pas trop grave mais c'est à éviter.

On respectera (par exemple) une convention à trois lettres significative :
Txb = TextBox
Cbx = ComboBox
Lbx = ListBox
Lbl = Label
Opb = OptionButton,
Cbx = CheckBox
Etc, etc

Et lors de la lecture d'un Code il sera bien plus confortable de lire
.Cells(13, 5).Value = Me.Cbx_CDR(Me.Cbx_CDR.ListIndex)...

Là où aussi Nanard doit faire attention c'est dans l'usage des caractères spéciaux en nommant ses ActiveX :
"N°_Dessin" ou encore "Opération" car selon les versions, les compressions successives etc, les accents et autres signes spéciaux risquent de ne pas être reconnus...

Bon Dimanche
@+Thierry
 
N

Nanard

Guest
Bonjour eric, thierry, et à tout le forum,

Eric, il s'agit des TXT que je veux effacer à l'ouverture de l'USF. j'ai écrit avec la méthode "" et ça marche, certe ce n'est peut être pas très conventionnel mais comme je débute, je fais de mon mieux.... merci à toi

Thierry, j'ai essayé ta méthode, j'ai un bug à la ligne:

.Cells(13, 5).Value = Me.CDR(Me.CDR.ListIndex) !!

je joint le zip dans le cas ou tu aurait un peu de tps...n'abusons pas!

Je crois que je suis en contact avec un ou le boss en VBA, merci de te pencher sur mon problème et sur tous ceux qui comme moi peine dans l'apprentissage de VBA, en tout cas ce site est formidable....
revenons à nos moutons comme je le disais à Eric mes procédures sont loin d'être conventionnellles

Merci @ + nanard
 

Pièces jointes

  • Bontravail3.zip
    20.7 KB · Affichages: 42

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 260
Membres
102 844
dernier inscrit
atori2