Pb erreur 70 : permission refusée

Résolu
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007 - 23 juil. 2007 à 09:54
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007 - 24 juil. 2007 à 11:52
Bonjour, voilà comme le titre l'indique j'ai un petit pb d' erreur 70

ce message est mis sur la ligne

Sub lancer()
UserForm1.CommandButton1_Click
End sub

Avec dans le code de la userform :

Public Sub CommandButton1_Click()
Static i As Integer
Dim img As IPictureDisp
Dim imagePath As String
imagePath = "C:\filmimg\imgtest2_" & i & ".jpeg"
If Dir(imagePath) <> vbNullString Then
Set img = LoadPicture(imagePath)
If Not img Is Nothing Then
UserForm1.Image1.Picture = img
i = i + 1
End If
End If
Sleep 100
DoEvents
UserForm1.CommandButton1_Click
End Sub

donc en fait la macro lancer fait commencer la "boucle" de commandbutton1

mais au bout d'une dizaine de minutes sa me met l'erreur 70 et je comprend pas pourquoi car la macro lancer fait juste la premier fois UserForm1.CommandButton1_Click et après n'intervient plus......
y a t-il un nb limite d'appel de CommandButton1_Click????? ou est ce autre chose

si quelqu'un à une idée je suis preneur

Merci @+
Je viens de découvrir le bonheur de programmer et le VB me le rend bien

18 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 juil. 2007 à 09:47
Salut,

"met une boucle de i= 1 à 3000 la pile ne risque pas d'apprécier."
Aucun rapport... un boucle n'est pas une fonction récursive comme tu le faisais.

Tu peux aussi essayer de faire un truc du style.

Sub lancer()
UserForm1.CommandButton1_Click
End Sub<hr />

Public Sub CommandButton1_Click()
Dim i As Integer
Dim imagePath As String

   i = 1 'on va dire que tu commence à 1
   imagePath = "C:\filmimg\imgtest2_" & i & ".jpeg"
   'Cette boucle continuera TANT QU'IL existe une
   'Image C:\filmimg\imgtest2_X.jpeg
   While Dir(imagePath) <> vbNullString
       UserForm1.Image1.Picture = LoadPicture(imagePath)
       i = i + 1
       DoEvents
       Call Sleep(100)
   Wend
End Sub<hr />
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
24 juil. 2007 à 11:31
N'est il pas nécessaire de rajouter cette ligne dans la boucle pour raffrachir l'indice de l'image dans la chaine ?

  imagePath = "C:\filmimg\imgtest2_" & i & ".jpeg"
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 10:08
Salut,
OU la mais si tu fais une fonction qui s'appelle tout le temps, tu vas exploser la pile non?

@+: Ju£i?n
Pensez: Réponse acceptée
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
23 juil. 2007 à 10:45
??????????
exploser la pile??????????????????????
bah je vois pas le pb d'appeller une fonction tout le temps (en théorie c'est faisable), c'est le seul moyen que j'ai trouvé pour afficher une suite d'image pour faire comme un film.........
le truc marche met des fois ca me met cette erreur et je dois donc relancer la macro à chaque fois pour continuer et c'est un peu chiant.....
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 10:50
Re,
Tu ne voit pas le problème d'appeler une fonction tout le temps.
Ca c'est faisable, mais que se soit cette même fonction qui s'appelle tout le temps (et sans aucun choix possible) c'est pas bien.

Un petit test qui te le prouvera. le code suivant en fait revients strictement eu même que le tiens. une fois CommandButton1_Click terminé je lui redemande de rerentré.

Private Sub CommandButton1_Click()
CommandButton1_Click
End Sub , ----
[code.aspx?ID=41455 By Renfield]

Test et tu verras ce que cela fait.
A mon avis ton code devrait être dans un boucle.

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
23 juil. 2007 à 11:34
Outre ce que te dit pertinemment JRivet, je pense que ton laps d'attente de 100 millisecondes n'est pas assez long. Le processeur n'a peut-être pas le temps de tout faire... (?)

Voici l'extrait de la MSDN concernant l'erreur 70 (en anglais, désolé...)
[javascript:hhobj_3.Click() registry], but your user permissions don't
include this type of registry access.
On 32-bit Microsoft Windows systems, a user must have the correct
permissions for access to the system registry. Change your permissions or have
them changed by the system administrator.

</li>

MPi
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
23 juil. 2007 à 11:41
Ok j'ai tester
Sub lancer()
lancer
End Sub
et ca ma mis pile insuffisante.....donc je comprends le pb

Je vais tester d'augmenter le temps d'attente, sinon je vais tester dans une boucle mais la boucle il faut la mettre dans un module à l'exterieur???? car si je la mais dans CommandButton_Click sa revient au même que de l'appeller tout le temps non???????

Merci de vos réponses @+
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
23 juil. 2007 à 12:02
Salut,

en effet, la pile va saturé de cette maniere.

Il faudrait que tu fasses un truc du genre:

Public Sub CommandButton1_Click()
Static i As Integer
Dim img As IPictureDisp
Dim imagePath As String
imagePath = "C:\filmimg\imgtest2_" & i & ".jpeg"

Do While Dir(imagePath) <> vbNullString
      Set img = LoadPicture(imagePath)
      If Not img Is Nothing Then
          UserForm1.Image1.Picture = img
           i = i + 1
          imagePath = "C:\filmimg\imgtest2_" & i & ".jpeg"
      End If
Loop
Sleep 100
DoEvents
End Sub
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
23 juil. 2007 à 12:05
Il y aura peut etre un pb si:

      If Not img Is Nothing renvoie false car tu pourras etre bloqué.

de plus, le Sleep et le DoEvents doit etre dans la boucle (sinon sert a rien). DSL. Je voulais juste te guider. Faudrait revoir un peu la boucle.
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
23 juil. 2007 à 12:28
Bon j'ai mis Sleep à 500 et j'ai pu faire 30 min d'affichage et j'ai pas eu d'erreur (apparement ca peu marcher), je vais faire des tests de  répétabilité......(c'est juste pour faire un peu scientifique ) bon je fais testé sur 1H puis 1H30
sinon je teste la boucle........

Merci à tous @+

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 juil. 2007 à 16:14
Salut,

Augmenter l'intervale du Sleep ne fait que retarder l'échéance concernant le débordement de la pile.

(Désolé, je vais devoir en pondre des kilos, et pas franchement compréhensibles)

Si tu regarde le faux code suivant :

instruction1
call machin(truc)
instruction2

Une fois l'instruction1 executée, le processeur appel machin en lui passant truc comme arguments. Une fois que machin(truc) est executé, c'est instruction2 qui est executé.

Mais quand le processeur arrive à la fin de machin(truc), comment sait t'il que c'est intruction2 qui doit être executée ? En effet, machin peut avoir été appelé depuis n'importe où dans le programme.

C'est à ce moment qu'intervient la pile, dont l'un des rôles est de stocker l'adresse de retour. Après instruction1, le processeur empile l'adresse de instruction2 sur la pile. A la fin de machin, le processeur dépile une adresse qui serat en l'occurence celle de instruction2 dans notre cas.

Avec du code :

instruction1
pousse adresse instruction2
execute adresse machin
instrcution2

public sub machin(arg)
' Code de machin
dépile adresse
execute adresse dépilée

Le problème c'est que dans ton cas, la fonction s'appelle elle même indéfiniment. Donc le processeur empile les adresses de retour les unes après les autres (Toujours les mêmes d'ailleurs), sans jamais les dépiler, vu que la fonction ne se termine jamais (Le End Sub n'est jamais executé). Donc la pile croit croit croit... comme un corbeau, jusqu'à ce que Windows dise STOP ! Et tu devrais d'ailleurs voire la consommation de RAM augmenter au file du temps.

La semaine prochaine je vous explique comment cuire les oeufs durs.
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
24 juil. 2007 à 08:56
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
24 juil. 2007 à 09:05
Ok j'ai compris le message et le pb, mais alors je pau matrre une condition si i =100 alors fini l'execution, vide la pile et la je relance l'execution à partir de i = 100 puis je continue ensuite je fais pareil pour 200, 300, 400 , 500

par contre la pile se vide automatiquement au end sub ou il faut écrire un bout de code?????

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 juil. 2007 à 09:09
Salut,
Avant toute chose je crois qu'il faut repenser ta manière de procéder.
Et non commencer à essayer de trouver des parades pour que cela fonctionne.

Ce que hier je te proposais c'est de passer par une boucle.
Quelle est actuellement ta condition pour que se termine ton programme? enfin la fin de ton film.

@+: Ju£i?n
Pensez: Réponse acceptée
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
24 juil. 2007 à 09:38
Salut,  en fait le pb est que la fin de mon film n'est pas toujours la même car en fait grace à la bibliotheque WIA, j'enregistre une image de ma webcam toutes les X millisecondes, et ensuite j'importe dans ma userform de ma feuille excel car ca me sert à cadrer l'image pour pouvoir en parallele utiliser les fonctions de ma feuille excel, mais le pb c'est que je ne sais pas quand va finir mon film vu que je ne sais pas quand va finir ce que je filme

Ceci pause donc un pb pour la fin de ma boucle car je n'ai pas trop de limite fixe mais je pourrais mettre un chiffre max.
 Le pb c'est de ce que je pense arriver à maxi 3000 images pour mon film (mais 3000 c'est beaucoup) et je pense que m^me si je met une boucle de i= 1 à 3000 la pile ne risque pas d'apprécier.
Donc à mon avis je suis quand même obliger defractionner non?????

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
24 juil. 2007 à 09:54
Ok merci pour le conseil désolé si ce que j'ai dis est complétement faux mais j'ai jamais fais d'info avant de faire ce programme donc je fais de ses erreurs mais c'est de ses erreur que l'on apprend  pour moi je pensais que appeler X fois une fonction de manière récursive ou avec une boucle s'était la même chose ....

Merci je vais tester...

@+

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 juil. 2007 à 11:36
Re,
>[auteurdetail.aspx?ID=999867 Nicko11] : bah bien sûr que oui , merci pour la correction

@+: Ju£i?n
Pensez: Réponse acceptée
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
24 juil. 2007 à 11:52
Merci c'est ce que j'allais demander car il me mettait juste la première image....

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
Rejoignez-nous