Attendre la fin de l'éxécution

[Résolu]
Signaler
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonsoir à tous,

Voici ma question :
Peut on empêcher l'appui sur n'importe quel touche tant que mon Sub n'est pas arriver à son terme.

En faite l'action d'appuyer sur une certaine touche fait planter mon programme.

Merci beaucoup pour vos réponses.

Marie

6 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
comme tu affiches le contrôle PB au début et le masques à la fin, si il est visible c'est que le traitement est en cours

ajoute en première ligne de ta sub :
If pb.Visible Then Exit Sub

çà devrait suffir
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
tu peux intercepter les frappes du clavier avec un hook mais pas empêcher l'utilisateur de taper sur le clavier ou alors faudrait le débrancher

Il y a (4.5 \ 1.5) sortes de gens, ceux qui comprennent le vb et les autres ,je fais partie des autres/FONT>
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

ta sub est peut-être mal faite, si elle plante lors d'une saisie....

si il y a une boucle, possible que ce que tu crois être un plantage est juste le manque de l'instructin "doevents" dans ta boucle
Q : [doc/faq.aspx#vb_doevents Code : Mon application freeze lors d'une
longue opération, comment y rémedier]

sinon si ta sub est dans une form, elle peut commencer par me.enabled=false et finir par =true.
il sera alors impossible tant de saisir au clavier que de fermer l'appli.
dans ce cas je te conseille de le signaler à l'utilisateur (label "en cours de calcul" ou autre)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Salut PCPT,

En faite ma sub ne plante pas vraiment, mais elle continue à tourner.

Je m'explique, ma sub sert à afficher des miniatures de photos dans une PictureBox par rapport à un chemin donner.

Seulement quand je change de chemin en cours d'affichage à l'aide de la touche bas et que je recharge des nouvelles miniatures, mes nouvelles miniatures s'affichent correctement mais au lieu de s'arrêter à la fin le programme continu à charger les miniatures du premier chemin qui n'était pas arriver à son terme.

J'ai bien placer un DoEvents mais ça ne change rien. Idem pour le me.enabled...
En tous cas merci pour tes conseils.

Voici mon bout de code :

Sub Affiche_Image()

Image_SELECT.Visible = False
conteneur.Visible = True
Pb.Visible = True
Label1.Visible = True
Picture1(0).Visible = True
VScroll1.Visible = False
Pb.Min = 0

Erase chemin()
Dim Nrtotal As Integer
Dim NewLargeur As Integer
Dim NewHauteur As Integer
Dim Coeff As Integer
Dim x As Integer
Dim y As Integer
Dim Nr As Integer
Dim fic As String
Dim PicX As Integer
Dim PicY As Integer
PicX = Picture1(0).Left
PicY = Picture1(0).Top

'effacement des images
Picture1(0).Picture = Nothing
If Picture1.UBound > 0 Then
On Error Resume Next
For I = 1 To Picture1.UBound
Unload Picture1(I)
Next I
End If

'liste image pour recuperation dans tableau
Repertoire = List_Photos.Text ' pour trouver le nom du répertoire
fic = Dir("C:\SNAP GAME\REPERTOIRE PHOTOS" & Repertoire & "/*.jpg", vbNormal)
If fic "" Then Picture1(0).Visible False
Do While fic <> ""

ReDim Preserve chemin(Nr)
chemin(Nr) = ("C:\SNAP GAME\REPERTOIRE PHOTOS" & Repertoire & "" & fic)

Nr = Nr + 1
fic = Dir()
Loop
If Nr <> 0 Then Pb.Max = Nr
Nrtotal = Nr
Nr = 0

'liste les images
fic = Dir("C:\SNAP GAME\REPERTOIRE PHOTOS" & Repertoire & "/*.jpg", vbNormal)

Do While fic <> ""

TailleReel.Picture = LoadPicture("C:\SNAP GAME\REPERTOIRE PHOTOS" & Repertoire & "" & fic)

'affichage de l image
Label1 = "Chargement Image " & Nr + 1 & "/" & Nrtotal
Pb.Value = Nr + 1
If Nr > 0 Then
Load Picture1(Nr)

PicX = PicX + Picture1(0).Width + 50

If PicX + Picture1(0).Width > Picture2.Width Then
PicX = Picture1(0).Left
PicY = PicY + Picture1(0).Height + 50
Picture1(Nr).Left = PicX
Picture1(Nr).Top = PicY

If Picture1(Nr).Top + Picture1(Nr).Height > Picture2.Height Then
Picture2.Height = Picture1(Nr).Top + Picture1(Nr).Height
VScroll1.Max = -Picture2.Height + conteneur.Height
VScroll1.Visible = True
End If

Else
Picture1(Nr).Left = PicX
Picture1(Nr).Top = PicY
End If
End If
'si la taille est plus petite que la picturebox
If TailleReel.Width < Picture1(Nr).Width And TailleReel.Height < Picture1(Nr).Height Then
Coeff = 1
x = (Picture1(Nr).Width - TailleReel.Width) / 2
y = (Picture1(Nr).Height - TailleReel.Height) / 2
GoTo Affiche_Image
End If
'definition du coefficient selon l'orientation de l'image

If TailleReel.ScaleWidth > TailleReel.Height Then
    Coeff = TailleReel.Width / Picture1(Nr).Width
    x = 0
    y = (Picture1(Nr).Height - (TailleReel.Height / Coeff)) / 2
Else
    Coeff = TailleReel.Height / Picture1(Nr).Height
    x = (Picture1(Nr).Width - (TailleReel.Width / Coeff)) / 2
    y = 0
End If

Affiche_Image:
NewLargeur = TailleReel.Width / Coeff
NewHauteur = TailleReel.Height / Coeff
Picture1(Nr).PaintPicture TailleReel.Picture, x, y, NewLargeur, NewHauteur
Picture1(Nr).Visible = True
DoEvents
Nr = Nr + 1
On Error Resume Next
fic = Dir()
Loop
Label1 = Nrtotal & " Image(s)"
Pb.Visible = False
Label2 = "DIAPORAMA"

End Sub
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Trop trop fort, ça marche !

Maintenant il est termine le chargement avant de commencer un autre, mais est il possible qu'il arrête le sub au lieu de continuer le chargement ?

Je vais m'activer à faire une recherche si touche bas appuyer fin du sub ...

Merci ++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
une variable booléenne hors de la sub
plusieurs tests dans le sub, à différents endroits, genre si variable quitter = vrai alors quitter=false: exit sub
et quitter qui reçoit vrai lors de ton click ....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp