[Aide débutante] > Gérer un Userform à partir d'un autre

choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011 - 6 juin 2011 à 13:50
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 - 7 juin 2011 à 14:27
Bonjour,

J'aurait besoin d'aide pour réaliser mon petit projet, si quelqu'un pouvais s'attarder un peu pour m'aider à le résoudre :/.

J'ai une partie de code qui marche très bien :
Private Sub ButtonBegin_Click()
Dim test7 As Integer
Dim test12 As Integer
test12 = MsgBox("Appuyez sur oui s'il s'agit d'un nouvel OF" & vbCrLf & "Appuyez sur non s'il s'agit d'une reprise ", vbYesNo + vbExclamation, "Programme de pesée")


If test12 = vbYes Then
IS_NEW = True
OF_NAME.Caption = Range("I2")
Range("A2:A5000").Value = "" 'rend vierge les case de l'intervalle
Range("B2:B5000").Value2 = "" ' pareil
ColorBox.BackColor = &H8000000F
Nb_line = 0
Label5.Caption = "Vide"
OF = "TestOF"
Range("A2:A5000").Offset(Nb_line, 0).Interior.Color = vbWhite
Range("B2:B5000").Offset(Nb_line, 0).Interior.Color = vbWhite
Label5.BackColor = &H8000000F
ButtonBegin.Enabled = False
Ordredefabrication = InputBox("Indiquez le numéro d'OF :")
Range("I2").Value = Ordredefabrication
If Ordredefabrication = "" Then
test7 = MsgBox("Vous n'avez pas rentré de N° d'OF", vbOKOnly + vbExclamation, "Programme de pesée")
ButtonBegin.Enabled = True
End If
If ButtonBegin.Enabled = False Then 'rend le bouton Début inactif
End If
End If


If test12 = vbNo Then
IS_NEW = False
Dim Nb_l
Nb_l = Range("A5000").End(xlUp).Row - 1
Nb_line = Nb_l
Label5.Caption = "Vide"
OF_NAME.Caption = Range("I2")
OF = "TestOF"
Label5.BackColor = &H8000000F
ButtonBegin.Enabled = False
Ordredefabrication = Range("I2")
End If


le problème que j'ai est que j'aimerais remplacer la msgBox par défaut par un userform que je créerai moi même ou deux boutons interagirai de la même façon que les oui et non déjà présents. Le bouton que j'appellerai "nouvel OF" ferait exactement la même action que le bouton oui. Et le bouton "reprise d'un OF" ferait la même action que le bouton non.

Je ne sait pas si j'ai été assez claire

Merci beaucoup d'avoir pris le temps de lire et encore plus de m'aider

18 réponses

choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
6 juin 2011 à 13:50
Je précise que je connait pas grand chose, j'ai juste réussie à créer les deux boutons sur un deuxième UserForm. =(
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
6 juin 2011 à 14:11
Salut, au lieu de :
test12 = MsgBox(" ...... ")

tu met : userform2.show
dans la deuxième userform tu met des variables pour chaque bouton cliqué (par exemple : 1 pour le bouton "nouvel Of", 2 pour le bouton "reprise d'un Of", 3 pour......)
et au lieu de :
If test12 = vbYes Then

tu met :
If variable = 1 Then
variable = 0 ' le reste du code...


tout sa en déclarant les variables en public pour qu'elle soient accessible depuis toutes les user forms ;)

et sa devrais marcher, en principe ;)

_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
6 juin 2011 à 14:12
Ceci dit il doit y avoir un moyen plus simple que je ne connais pas du genre :
if form2.button1.clik = true then...



_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
6 juin 2011 à 14:17
J'ai essayé, d'un coté je met :
Private Sub ButtonBegin_Click()
Dim test7 As Integer
UserForm1.Show
If variable = 1 Then
IS_NEW = True
OF_NAME.Caption = Range("I2")
Range("A2:A5000").Value = "" 'rend vierge les case de l'intervalle
Range("B2:B5000").Value2 = "" ' pareil
ColorBox.BackColor = &H8000000F
Nb_line = 0
Label5.Caption = "Vide"
OF = "TestOF"
Range("A2:A5000").Offset(Nb_line, 0).Interior.Color = vbWhite
Range("B2:B5000").Offset(Nb_line, 0).Interior.Color = vbWhite
Label5.BackColor = &H8000000F
ButtonBegin.Enabled = False
Ordredefabrication = InputBox("Indiquez le numéro d'OF :")
Range("I2").Value = Ordredefabrication
If Ordredefabrication = "" Then
test7 = MsgBox("Vous n'avez pas rentré de N° d'OF", vbOKOnly + vbExclamation, "Programme de pesée")
ButtonBegin.Enabled = True
End If
If ButtonBegin.Enabled = False Then 'rend le bouton Début inactif
End If
End If

If variable = 2 Then
IS_NEW = False
Dim Nb_l
Nb_l = Range("A5000").End(xlUp).Row - 1
Nb_line = Nb_l
Label5.Caption = "Vide"
OF_NAME.Caption = Range("I2")
OF = "TestOF"
Label5.BackColor = &H8000000F
ButtonBegin.Enabled = False
Ordredefabrication = Range("I2")
End If



End Sub


Et de l'autre
Dim variable As String
Private Sub CommandButton1_Click()
variable = 1
End Sub

Private Sub CommandButton2_Click()
variable = 2
End Sub


Et ça me donne rien :/ (J'ai probablement mal suivi tes indications ou je ne les ai pas comprise ^^)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 juin 2011 à 14:22
Bonjour,

Juste pour dire que j'ai ouvert cette discussion, mais que je vais la refermer illico-presto. Raison : je n'aime pas lire et tenter d'analyser un code non indenté (torticolis et mal au crâne assurés... trop peu pour moi...).


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
6 juin 2011 à 14:28
Faut remplacer Dim variable As String par :
Public variable As Integer

et normalement c'est bon

@ucfoutu
Qu'est ce que tu appelle "un code non indenté"


_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
6 juin 2011 à 14:33
Non toujours rien :(. (Au moins y'a pas d'erreur de syntaxe^^)
Jpense que c'est une façon polie de dire "tu es une noob, ton code est moche et j'aime bien me moquer". (J'avais précisé dans l'intitulé "débutante").
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 juin 2011 à 14:38
Qu'est ce que tu appelle "un code non indenté"

Question surprenante sur un forum de développeurs !
Quand même !
Et ouvre donc google et tu sauras ce qu'est l'indentation (base de chez base) d'un code informatique.
Tiens : même chez wikipeudechoses :
[ clique donc ici]

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 juin 2011 à 14:39
clique donc ici
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2011 à 14:41
Principe de chargement - déchargement de forme :
Disons que la forme qui doit remplacer le MsgBox s'appelle frmMsgBox (bien trouvé, non ?)
Dans cette frmMsgBox, tu déclares une variable en Public :
Public bReponse As Boolean
C'est cette variable qui stockera le résultat des boutons.

Quand tu veux poser une question :
Dim maForme As frmMsgBox
Set maForme = New frmMsgBox
With maForme
    .maTextBox.Text = "Texte de ma question"
    .Show ' Ouvre et attend la fermeture de la forme
    ' Suite du code plus bas

Dans la frmMsgBox, il te suffit de mettre ce simple code dans tes boutons :
Private Sub cmdOui_Click()
    bReponse = True
    Me.Hide
End Sub
Private Sub cmdNon_Click()
    bReponse = False
    Me.Hide
End Sub
Il faut utiliser .Hide pour masquer la forme, mais c'est le code appelant qui la déchargera, après avoir lu le résultat :
    ' Voilà la suite du code :
    If .bReponse = True Then
        ' Ici le code quand réponse Oui
    Else
        ' Ici le code quand réponse Non
    End If
End With
' Déchargement de la forme 
Unload maForme
Set maForme = Nothing

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
6 juin 2011 à 14:47
Aaaaaaah, c'est vrai que j'aurai pu demander à google avant de répondre bêtement "C'est quoi sa???"

Moi qui appellai sa simplement "mise en forme" je saurai qu'il y a un nom spécial, et c'est vrai que c'est plus clair quand c'est indenté ^^

Pour le reste sa marche toujours pas? je vois plus cette fois-ci
_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
6 juin 2011 à 15:08
Oui c'est presque ça , sauf qui pour qui pourquoi, ça m'a shunté le passage par l'inputbox (qui représente quand même les 2/3 de l'importance de ce bouton >>)
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
6 juin 2011 à 15:11
Pas que ça enfait, ça m'a coupé toute les étapes du code :/.

Normalement ce bouton si on appuie sur "nouveau", remet à zéro le classeur excel, demande un numéro pour l'enregistrement, etc. Et la plus rien :/
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2011 à 15:59
"le problème que j'ai est que j'aimerais remplacer la msgBox par défaut par un userform que je créerai moi même ou deux boutons interagirai de la même façon que les oui et non déjà présents."

Tu as demandé une forme qui remplace la MsgBox : je t'ai dit comment faire.
Le reste, que j'ai lu en diagonal, c'est à toi d'y réfléchir.

Lu en diagonal car, comme ucfoutu, je n'ai pas le temps de me torturer pour décrypter un code dans lequel il n'y a pas d'indentation (les espaces en tête de ligne qui permettent de donner de la clarté au code)
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
7 juin 2011 à 08:25
Désolé pour "l'identation" (mot à la mode sur ce topic ).
Mais étant, comme précisé dans l'intitulé "Nouvelle", je ne savait même pas que cela existait :/. Et je bloque réellement sur la question.

Si vous pouviez au pire m'en expliquer les règles, cela ne me dérange pas de re-poster de façon indentée pour que l'on puisse m'aider ;)!
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
7 juin 2011 à 09:09
Bien que je ne savais pas se que sa voulais dire, je pense pouvoir expliquez sans me tromper.
Le but de l'indentation est d'avoir un code plus lisible, dans lequel il est plus facile à se repérer, surtout si on est pas l'auteur du code.
En gros à chaque nouveau bloc (if, while ....) les instructions de se bloc sont décaler d'une tabulation à droite, on saute aussi des ligne pour aérerle code. Le mieux étant de voir un exemple :

Avec indentation

Sub lecture() 'Lecture du port série et renvoi la valeur dans k

        Dim sInput As String
        Dim Count As Integer
        Count = 0

        For Count 0 To 100000 ' Pour plus long mais plus sur : Count 250 000, Pour plus rapide Count = 50 000
            Application.DoEvents() ' Laisse la main à windows 
            sInput = XMCommCRC1.Input 

            If (Len(sInput) > 0) Then 
                TextBox1.SelectedText = sInput s

                If (Len(TextBox1.Text) > 1) Then 
                    TextBox1.SelectionStart = 0 
                    TextBox1.SelectionLength = 2 
                    k = TextBox1.SelectedText 
                    Count = 100000 
                End If

            End If

        Next Count 'Incrémentation de Count

        If (Len(TextBox1.Text) <= 1) Then 'Si on ne recois pas de données avant la fin de la boucle
            TextBox1.Text = "" 'on efface la texbox pour les prochaines lectures
            k 48 'k 48 dans le sous programme 'cas analyse' va appeller le sous programme qui traite du retard
        End If

        TextBox1.Text = "" 'on efface la texbox pour les prochaines lectures

    End Sub


Le même sans indentation :

Sub lecture() 'Lecture du port série et renvoi la valeur dans k
Dim sInput As String
Dim Count As Integer
Count = 0
For Count 0 To 100000 ' Pour plus long mais plus sur : Count 250 000, Pour plus rapide Count = 50 000
Application.DoEvents() ' Laisse la main à windows 
sInput = XMCommCRC1.Input 
If (Len(sInput) > 0) Then 
TextBox1.SelectedText = sInput s
If (Len(TextBox1.Text) > 1) Then 
TextBox1.SelectionStart = 0 
TextBox1.SelectionLength = 2 
k = TextBox1.SelectedText 
Count = 100000 
End If
End If
Next Count 'Incrémentation de Count
If (Len(TextBox1.Text) <= 1) Then 'Si on ne recois pas de données avant la fin de la boucle
TextBox1.Text = "" 'on efface la texbox pour les prochaines lectures
k 48 'k 48 dans le sous programme 'cas analyse' va appeller le sous programme qui traite du retard
End If
TextBox1.Text = "" 'on efface la texbox pour les prochaines lectures
End Sub


Voila, la différence est flagrante.
( Que l'on me corrige si j'ai dit des conneries )
_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
choupinoob1 Messages postés 8 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 7 juin 2011
7 juin 2011 à 11:33
D'accord, donc chez moi ça donnerais le code suivant(J'espère sincérement m'y étre bien prise ) :
Private Sub ButtonBegin_Click()
Dim test7 As Integer
Dim test12 As Integer

test12 = MsgBox("Appuyez sur 'oui' si il s'agit d'un nouvel OF" & vbCrLf & "Appuyez sur 'non' s'il s'agit d'une reprise", vbYesNoCancel + vbExclamation, "Programme de pesée")
  If test12 = vbYes Then
       IS_NEW = True
       Range("A2:A5000").Value = "" 'rend vierge les case de l'intervalle
       Range("B2:B5000").Value2 = "" ' pareil
       ColorBox.BackColor = &H8000000F
       Nb_line = 0
       Label5.Caption = "Vide"
       OF = "TestOF"
       Range("A2:A5000").Offset(Nb_line, 0).Interior.Color = vbWhite
       Range("B2:B5000").Offset(Nb_line, 0).Interior.Color = vbWhite
       Label5.BackColor = &H8000000F
       ButtonBegin.Enabled = False
       Ordredefabrication = InputBox("Indiquez le numéro d'OF :")
       Range("I2").Value = Ordredefabrication
       Label6.TextAlign = fmTextAlignCenter
       Label6.Caption = "Ordre de fabrication N°  " & Ordredefabrication

           If Ordredefabrication = "" Then
              test7 = MsgBox("Vous n'avez pas rentré de N° d'OF", vbOKOnly +                 vbExclamation, "Programme de pesée")
              ButtonBegin.Enabled = True
           End If

          If ButtonBegin.Enabled = False Then 'rend le bouton Début inactif
           End If
 End If

 If test12 = vbNo Then
     IS_NEW = False
     Dim Nb_l
     Nb_l = Range("A5000").End(xlUp).Row - 1
     Nb_line = Nb_l
     Label5.Caption = "Vide"
     OF = "TestOF"
     Label5.BackColor = &H8000000F
     ButtonBegin.Enabled = False
     Ordredefabrication = Range("I2")
 End If



End Sub



Je voudrais remplacée ma Messagebox "test12" qui possède un bouton oui et un bouton non. Par un Userform qui posséderais deux boutons dont un aurait la même action que le OUI et l'autre la même action que le NON.
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
7 juin 2011 à 14:27
Il reste juste à changer le text12 = msgbox par le code donnée par Jack :

With maForme
    .maTextBox.Text = "Texte de ma question"
    .Show 


et ensuite changer les variables du If en fonction de ce que tu met dans la deuxième form. Tout est donné dans la réponse de Jack, il reste plus qu'à faire chauffer un peu la boite à neuronne ;)

tu as dit :
ça m'a coupé toute les étapes du code :/

sa veut dire que tu as du placer quelque chose au mauvais endroit ;)

_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
Rejoignez-nous