Fermeture UserForm

jno187

XLDnaute Nouveau
Bonjour à tous !

J'ai un léger problème avec un UserForm qui refuse de se fermer, Pour être le plus clair possible j'ai un bouton de commande Sur une feuille ("ESPACES VERTS"), qui éxécute la macro ci dessous, je me retrouve donc sur une feuille ("Mes Opportunitées") et je crois que le problème viens de là ????
Quelqu'un aurait une piste ?

Sub test()
Dim rep As Integer
rep = MsgBox("Souhaitez vous ajoutez ce devis à vos opportunitées ?", vbQuestion + vbYesNo)
If rep = vbNo Then
End If
If rep = vbYes Then
MsgBox ("Cliquez sur Ajouter")
UserForm2.Show
End If
If txtNom = " " Then
MsgBox "Veuillez remplir le nom de votre contact", vbCritical, "Champs manquant"
txtNom.SetFocus
If Sheets("Nettoyage").Range("G11").Value = "0" Then
MsgBox ("Entrez le nom du client")
End If
txtNom.Value = Sheets("Nettoyage").Range("G11").Value
txtdevis.Value = Sheets("Nettoyage").Range("H8").Value
TextBox2.Value = Sheets("Nettoyage").Range("H99").Value
TextBox3.Value = Sheets("Nettoyage").Range("H102").Value
End If
Unload UserForm2
Exit Sub
End Sub
 

Roland_M

XLDnaute Barbatruc
Re : Fermeture UserForm

bonjour,

tout le code qui se trouve après userform2.show
doit se trouver dans le code de l'userf !

pour t'en rendre compte,
après userform2.show
tu mets par exemple msgbox"xxx"
et tu verras que le code s'arrète à userform2.show
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Fermeture UserForm

re

Salut MJ13

exemple en utilisant deux macros
appel userform2 depuis macro1 qui appelera la macro2 avec la suite du code
exemple:

Sub Macro1
...
UserForm2.Show
End Sub

puis sur l'userform2 un bouton pour la suite du code avec dans le code Bouton, exemple:

Private Sub ButtonSuite_Click()
NomMacro2
End Sub

Sub NomMacro2()
...
suite du code
...
Unload UserForm2
End Sub
 

jno187

XLDnaute Nouveau
Re : Fermeture UserForm

Rolland (tu as raison), en réalité ma Macro s’exécutait parfaitement car j'ai rentré un bout de code dans le USERFORM qui correspondait à ma feuille active, le problème c'est que j'ai 4 autres feuilles qui doivent appeler ce Useform, Macro qui s’exécute déja par l'appelle d'une autre macro, bref sa devient un peu dur à géré, explications :

J'ai 4 feuilles :

Espaces verts
Nettoyage
Rénovation
Moquette Pvc

et ma feuille opportunités pour laquelle j'ai créée un USERFORM2

mon but serait de faire comprendre à USERFORM2 que lorsqu'il est appelé par le bouton de commande x sur la feuille ESPACES VERTS, la valeur des TEXTBOX soit égal aux valeurs de certaines cellules s'y trouvant.
Idem pour les 3 autres feuilles

Parallèlement à cela je dois pouvoir entrée "manuellement" des données dans USERFORM2 dans la feuille opportunités si je le souhaite!


A votre avis comment dois je procéder, j'ai pensé à créer autant de USERFORM que de feuille, et créer un UserForm "indépendant" pour ma feuille opportunitées ?
 

Roland_M

XLDnaute Barbatruc
Re : Fermeture UserForm

bonjour,

sans classeur c'est pas facile de d'aider, mais bon ...
en fait c'est très simple, tout est une question d'organisation !

ton problème est celui que rencontrent les débutants, des codes avec des paramètres mis en dur.
exemple ici:
txtNom.Value = Sheets("Nettoyage").Range("G11").Value
txtdevis.Value = Sheets("Nettoyage").Range("H8").Value
TextBox2.Value = Sheets("Nettoyage").Range("H99").Value
TextBox3.Value = Sheets("Nettoyage").Range("H102").Value

à éviter si on veut pouvoir utiliser ses codes pour plusieurs feuilles dans un même userform
il y a une première possibilité qui est d'utiliser des variables déclarées public dans un module
exemple: Public FeuilEnCours$
dans tes macros avant l'appel de userform2 tu initialises tes variables pour les utiliser dans l'userf
exemple: FeuilEnCours$= "Nettoyage" ou = "UneAutreFeuil"
et dans le code userform: txtNom.Value = Sheets(FeuilEnCours$).Range("G11").Value


MAIS pour toi, je pense à cette deuxième possibilité:
1) ton userform2
2) un bouton sur chaque feuille qui appelle la macro propre à cette feuille
(ou les quatre boutons sur une même feuille menu par exemple)
3) autant de macros que de feuilles soit quatre:
Sub EspacesVerts()
Sub Nettoyage()
Sub Rénovation()
Sub MoquettePvc()

4) et au début des macros tu actives la feuille souhaitée.

exemple:
Sub EspacesVerts()
sheets(NomDeTaFeuilEspacesVerts).Activate
... suite de code
...
... appel userform2
et dans tes codes il te faut remplacer Sheets("Nettoyage") par ActiveSheet
exemple ici:
txtNom.Value = ActiveSheet.Range("G11").Value
txtdevis.Value = ActiveSheet.Range("H8").Value
TextBox2.Value = ActiveSheet.Range("H99").Value
TextBox3.Value = ActiveSheet.Range("H102").Value

et bien entendu idem pour le reste de ton code !
 
Dernière édition:

jno187

XLDnaute Nouveau
Re : Fermeture UserForm

Re,

Ton idée parait beaucoup plus censé que la mienne, je vais faire comme tu dis, j'ai un petit problème cependant avec ma macro suivante, logiquement je devrais retrouver les noms des clients dans ma combobox2, mais ce n'est pas le cas:

Private Sub CommandButton1_Click()
Dim numLigneVide As Integer
'On active la feuille "Liste"
Worksheets("Mes Opportunitées").Activate
'On trouve la dernière ligne vide du tableau et on enregistre le numéro de la ligne dans la variable numLigneVide
numLigneVide = ActiveSheet.Columns(1).Find("").Row
'On vérifie que les champs obligatoires sont correctement remplis
If txtNom.Text = "" Then
MsgBox "Veuillez remplir le nom de votre contact", vbCritical, "Champs manquant"
txtNom.SetFocus
Else
'On remplit les données dans notre tableau
ActiveSheet.Cells(numLigneVide, 1) = Label_date
ActiveSheet.Cells(numLigneVide, 2) = txtdevis.Text
ActiveSheet.Cells(numLigneVide, 3) = UCase(txtNom.Text)
ActiveSheet.Cells(numLigneVide, 4) = TextBox2.Text
ActiveSheet.Cells(numLigneVide, 5) = TextBox3.Text

Label_date = ""
txtdevis.Text = ""
txtNom.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
txtdevis.SetFocus

End If
End Sub

Private Sub CommandButton3_Click()
txtNom.Text = ""
txtdevis.Text = ""
TextBox2.Value = ""
TextBox3.Value = ""
Me.ComboBox2 = Clear
Unload UserForm2
End Sub
Private Sub CommandButton4_Click()
Dim no_ligne As Integer
no_ligne = ComboBox2.ListIndex + 7
Label_date = Cells(no_ligne, 1)
txtdevis.Value = Cells(no_ligne, 2).Value
txtNom.Value = Cells(no_ligne, 3).Value
TextBox2.Value = Cells(no_ligne, 4).Value
TextBox3.Value = Cells(no_ligne, 5).Value
End Sub

Private Sub CommandButton5_Click()
Dim no_ligne As Integer
Sheets("Mes Opportunitées").Select
no_ligne = ComboBox2.ListIndex + 7
If ComboBox2.Value = "" Then
MsgBox ("Veuillez remplir le champ de la recherche!")
Else
Cells(no_ligne, 1) = Label_date
Cells(no_ligne, 2) = txtdevis.Value
Cells(no_ligne, 3) = txtNom.Value
Cells(no_ligne, 4) = TextBox2.Value
Cells(no_ligne, 5) = TextBox3.Value
End If
End Sub
 

Roland_M

XLDnaute Barbatruc
Re : Fermeture UserForm

re

je ne comprend pas !? tu dis que tu vas faire comme je t'ai conseillé
mais tu veux résoudre le problème de ta macro en l'état !? elle est très mal programmée !
il faut faut d'abord avoir un code cohérent pour pouvoir t'aider, sinon on tourne en rond !

ensuite on ne peut pas faire grand chose avec un bout de code qui nécessite
le classeur avec ses feuilles ainsi que l'userf et ses contrôles !
et puis des controls comme ceci> CommandButton5 ne signifie rien du tout !
il faut les renommer correctement pour savoir qui fait quoi !?
d'ailleurs tu remarqueras qu'à cause de cela tu n'as personne qui répond !
 

jno187

XLDnaute Nouveau
Re : Fermeture UserForm

Re,

J'ai renommé mes boutons, et je compte bien faire comme tu as dis, mais j'ai un petit souci avec ma macro pour ma combobox qui n'affiche pas les valeurs, alors je souhaitais régler ce problème avant de passer au post plus haut :

Private Sub Cmd_Ajouter_Click()
Dim numLigneVide As Integer
Worksheets("Mes Opportunitées").Activate
numLigneVide = ActiveSheet.Columns(1).Find("").Row
If txtNom.Text = "" Then
MsgBox "Veuillez remplir le nom de votre contact", vbCritical, "Champs manquant"
txtNom.SetFocus
Else
ActiveSheet.Cells(numLigneVide, 1) = Label_date
ActiveSheet.Cells(numLigneVide, 2) = txtdevis.Text
ActiveSheet.Cells(numLigneVide, 3) = UCase(txtNom.Text)
ActiveSheet.Cells(numLigneVide, 4) = txtMontant_HT.Text
ActiveSheet.Cells(numLigneVide, 5) = txtMontant_TTC.Text

Label_date = ""
txtdevis.Text = ""
txtNom.Text = ""
txtMontant_HT.Text = ""
txtMontant_TTC.Text = ""
txtdevis.SetFocus

End If
End Sub

Private Sub Cmd_Fermer_Click()
txtNom.Text = ""
txtdevis.Text = ""
txtMontant_HT.Value = ""
txtMontant_TTC.Value = ""
Me.ComboBox2 = Clear
Unload UserForm2
End Sub

Private Sub Cmd_Modifier_Click()
Dim no_ligne As Integer
no_ligne = ComboBox2.ListIndex + 7
Label_date = Cells(no_ligne, 1)
txtdevis.Value = Cells(no_ligne, 2).Value
txtNom.Value = Cells(no_ligne, 3).Value
txtMontant_HT.Value = Cells(no_ligne, 4).Value
txtMontant_TTC = Cells(no_ligne, 5).Value
End Sub

Private Sub Cmd_Rechercher_Click()
Dim no_ligne As Integer
Sheets("Mes Opportunitées").Select
no_ligne = ComboBox2.ListIndex + 7
If ComboBox2.Value = "" Then
MsgBox ("Veuillez remplir le champ de la recherche!")
Else
Cells(no_ligne, 1) = Label_date
Cells(no_ligne, 2) = txtdevis.Value
Cells(no_ligne, 3) = txtNom.Value
Cells(no_ligne, 4) = txtMontant_HT.Value
Cells(no_ligne, 5) = txtMontant_TTC
End If
End Sub
 

Statistiques des forums

Discussions
312 332
Messages
2 087 364
Membres
103 528
dernier inscrit
maro