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