Unload d'une feuille modale

musi1234 Messages postés 9 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 18 mars 2005 - 12 août 2003 à 10:38
musi1234 Messages postés 9 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 18 mars 2005 - 13 août 2003 à 10:50
Bonjours a tous,

j' execute une feuille avec la methode
mafeuille.show 1,mafeuillemere

lorsque que j'ai fini mon traitement dans mafeuille

je fais unload mafeuille

visuellement mafeuille disparait

et mafeuillemere est active

mais les instructions de mafeuille s'éxecute en tache de fond environ 4 fois

quel est le pb ?

est ce parce que mon unload est lancée automatiquement ?

7 réponses

gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
12 août 2003 à 11:16
Bonjour,

Deja ecrit plutôt "MaFeuille.Show vbModal" et ton Unload de MaFeuille tu ecris.

Unload MaFeuille
Set MaFeuille = Nothing

Cela devrais résoudre ton problème.

A++
[Gally Home Corp]
0
musi1234 Messages postés 9 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 18 mars 2005
12 août 2003 à 11:48
je te met le code

car avec ta technique la feuille ne se decharge plus

'Extrait de ma feuille mere

Private Sub Command1_Click()
Dim numprototemp, re, h, i, ze, temp(7), temp1(7), vale(7) As Integer
numprototemp = 0
rsADO1.MoveFirst
Do While Not rsADO1.EOF
If rsADO1!nommanip = Combo1.Text Then
numprototemp = rsADO1!numproto
End If
rsADO1.MoveNext
Loop
rsADO1.MoveFirst
Do While Not rsADO1.EOF
If rsADO1!numproto = numprototemp Then
vale(1) = rsADO1!postest1
vale(2) = rsADO1!postest2
vale(3) = rsADO1!postest3
vale(4) = rsADO1!postest4
vale(5) = rsADO1!postest5
vale(6) = rsADO1!postest6
vale(7) = rsADO1!postest7
End If
rsADO1.MoveNext
Loop
h = 0
For ze = 1 To 7
If vale(ze) <> 0 Then
h = h + 1
temp(h) = ze
temp1(vale(ze)) = h
End If
Next ze
re = 1
Do While re <= h
Select Case temp(temp1(re))
Case 1
reactime.Show vbModal, Expe
Case 2
Math.Show vbModal, Expe
Case 3
Stop
Case 4
histo.Show vbModal, Expe
Case 5
Stop
Case 6
gramm.Show vbModal, Expe
Case 7
Stop
End Select
re = re + 1
ShowCursor True
Loop
rsADO.Close
rsADO1.Close
cnnADO.Close
MsgBox "Expérimentation terminée", vbOKOnly, "Fin"
Unload Expe
End Sub

'ma feuille fille

Public valmain As String
Public mathpb As String
Public totalpb As Integer
Public testdeb As Boolean
Dim cnnADO As New ADODB.Connection

Dim cmdADO As New ADODB.Command

Dim rsADO As New ADODB.Recordset
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
Private Function fonct_math()

'Fonction de calcul du pb a presenter
Dim i As Integer
Do While inter1 < 1
Randomize Timer
nb1 = Int(9 * Rnd) + 1
Randomize Timer
nb2 = Int(9 * Rnd) + 1
Randomize Timer
signe = Int(2 * Rnd)
If signe = 1 Then
sig1 = " + "
inter1 = nb1 + nb2
Else
sig1 = " - "
inter1 = nb1 - nb2
End If
Loop
Randomize Timer
nb3 = Int(9 * Rnd) + 1
Do
Randomize Timer
signe = Int(2 * Rnd)
If signe = 1 Then
sig2 = " + "
tot = inter1 + nb3 If nb3 nb2 And sig1 " - " Then
Do
Randomize Timer
nb3 = Int(9 * Rnd) + 1
Loop While nb3 = nb2
sig2 = " + "
tot = inter1 + nb3
End If
Else
sig2 = " - "
tot = inter1 - nb3 If (nb3 nb2 And sig1 " + ") Or nb1 = nb3 Then
Do
Randomize Timer
nb3 = Int(9 * Rnd) + 1 Loop While nb3 nb2 Or nb1 nb3
sig2 = " - "
tot = inter1 - nb3
End If
End If If tot < 1 Or tot > 9 Or tot 5 Then nb3 Int(9 * Rnd) + 1
Loop While tot < 1 Or tot > 9 Or tot = 5 nbfin nb1 & sig1 & nb2 & sig2 & nb3 & " "
mathpb = nbfin
totalpb = tot
Label2.Visible = True
Label2.Caption = nbfin
compteur (15)
End Function
Private Function enreg(rt As Single)
'Enregistrement des données
With rsADO
.Open cmdADO
.AddNew
!Index = rsADO.AbsolutePosition
!pb = mathpb
!resultat = totalpb
!reactps = rt
.Update
.Close
End With
End Function
Public Sub Form_KeyPress(KeyAscii As Integer)
Char = Chr(KeyAscii)
result = UCase(Char) If (valmain "D" And (result "I" Or result = "J")) Or (valmain = "G" And (result = "Z" Or result = "D")) Then
Label2.Caption = " "
Frame1.Visible = False
Label2.Visible = False
Label2.Left = Math.ScaleWidth / 2
Label2.Top = Math.ScaleHeight / 2
End If
Select Case testdeb
Case False If (valmain "D" And (result "I" Or result = "J")) Or (valmain = "G" And (result = "Z" Or result = "D")) Then
testdeb = True
ShowCursor False
Text4.Text = Time
Text5.Text = Timer
fonct_math
End If
Case True
Text2.Text = Timer
Text3.Text = Text1.Text - Text2.Text
Select Case valmain
Case "G"
Select Case result
Case "Z"
If totalpb < 5 Then
enreg (Text3.Text)
Else
enreg (Abs(Text3.Text))
End If
Case "D"
If totalpb > 5 Then
enreg (Text3.Text)
Else
enreg (Abs(Text3.Text))
End If
End Select
Case "D"
Select Case result
Case "I"
If totalpb < 5 Then
enreg (Text3.Text)
Else
enreg (Abs(Text3.Text))
End If
Case "J"
If totalpb > 5 Then
enreg (Text3.Text)
Else
enreg (Abs(Text3.Text))
End If
End Select
End Select If (valmain "D" And (result "I" Or result = "J")) Or (valmain = "G" And (result = "Z" Or result = "D")) Then
testtemps = Abs(val(Text5.Text) - Timer)
If testtemps < 18 Then
Randomize Timer
Start2 = Timer ' Définit l'heure de début.
compte2 = Int(2 * Rnd) + 3
Do While Timer < Start2 + compte2
DoEvents
Loop
fonct_math
Else
Label2.Caption = "Fin de bloc"
Label2.Visible = True
Fermer
End If
End If
End Select
End Sub
Private Function compteur(compte As Integer)
Dim Start
Start = Timer ' Définit l'heure de début.
Text1.Text = Start
Do While Timer < Start + compte
DoEvents
Loop
Beep
Label2.Caption = " "
testtemps = Abs(val(Text5.Text) - Timer)
If testtemps < 18 Then
Randomize Timer
Start2 = Timer ' Définit l'heure de début.
compte2 = Int(5 * Rnd) + 3
Do While Timer < Start2 + compte2
DoEvents
Loop
enreg (0)
fonct_math
Else
Label2.Caption = "Fin de Bloc"
Label2.Visible = True
Fermer
End If
End Function
Private Function compteur2(compte2 As Integer)
Dim PauseTime2, Start2
Start2 = Timer ' Définit l'heure de début.
Do While Timer < Start2 + compte2
DoEvents ' Donne le contrôle à d'autres processus.
Loop
End Function

Private Sub Form_Load()
cnnADO.Provider = "Microsoft.jet.OLEDB.4.0"

cnnADO.ConnectionString = "c:\test\data1.mdb"

cnnADO.Open

cmdADO.ActiveConnection = cnnADO

cmdADO.CommandText = "enr_math"

cmdADO.CommandType = adCmdTable

rsADO.CursorLocation = adUseClient

rsADO.CursorType = adOpenDynamic

rsADO.LockType = adLockPessimistic

'rsADO.Open cmdADO

testdeb = False

If Expe.Text1.Text = "Droite" Then
valmain = "D"
Else
valmain = "G"
End If

If valmain = "D" Then
Label4.Caption = "- la touche J pour 'plus petit que 5' (<5)"
Label5.Caption = "- la touche I pour 'plus grand que 5' (>5)"
Else
Label4.Caption = "- la touche D pour 'plus petit que 5' (<5)"
Label5.Caption = "- la touche Z pour 'plus grand que 5' (>5)"
End If
Frame1.Left = Math.Width / 2 - (Frame1.Width / 2)
Frame1.Top = Math.Height / 2 - (Frame1.Height / 2)
End Sub
Private Function Fermer()
Dim debcompt, fincompt
debcompt = Timer
fincompt = debcompt + 10
Do While Timer < fincompt
DoEvents
Loop
cnnADO.Close
Set Math = Nothing
End Function
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
12 août 2003 à 14:44
Moi je dis que le plus simpe est de mettre :

End

Comme ça, ta feuille est déchargée et quitée.
Sinon, si tu veux pas la voir mais qu'elle est toujour chargée (c'est à dire qu'elle garde ces variables comme au début) il suffit de mettre :

Mafeuille.hide

et pour la remontrer :

Mafeuille.show

@ +

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.

djcool74 :-p
0
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
12 août 2003 à 15:30
Re,

Quandtu fais "Mafeuille.hide" tu ne libéres pas la mémoire de la Form qui reste.

Normalement avec le code avant il n'y a pas de problème sauf dans un seul cas qui est visiblement le tien. Dans ton code il y a surement une boucle qui tourne sans cesse et tend qu'elle tourne tu ne peu pas libérer la form. Donc il faut localiser la ou les boucle(s) qui reste actif...

A++
[Gally Home Corp]
0

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

Posez votre question
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
12 août 2003 à 19:00
Tu y fait quoi ds ta feuille ? C'est quoi qui s'execute encore 4 fois comme code ?
Christophe R.
0
musi1234 Messages postés 9 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 18 mars 2005
13 août 2003 à 08:46
J' ai trouvé ma boucle incriminée

j'ai un compteur de 15 secondes après chaque pb présenté du style

start = timer
do while timer < start + 15
doevents
loop

mais j'attend aussi une réponse de l'utilisateur
dans le
Public sub form_keypress (keyascii as integer)

'Mon traitement en fonction de la touche réponse

end sub

comment faire un exit do du compteur si une touche a été pressée ?
0
musi1234 Messages postés 9 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 18 mars 2005
13 août 2003 à 10:50
ca y est j' ai réussi a me defaire de cette boucle en tache de fond

Je vous remercie tous pour votre aide
0
Rejoignez-nous