Pb erreur 70 : permission refusée [Résolu]

taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 23 juil. 2007 à 09:54 - Dernière réponse : taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 24 juil. 2007 à 09:47
3
Merci
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

Merci jrivet 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de jrivet
Meilleure réponse
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 24 juil. 2007 à 11:31
3
Merci
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"

Merci cs_Nicko11 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de cs_Nicko11
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 23 juil. 2007 à 10:08
0
Merci
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
Commenter la réponse de jrivet
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 23 juil. 2007 à 10:45
0
Merci
??????????
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
Commenter la réponse de taj88
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 23 juil. 2007 à 10:50
0
Merci
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
Commenter la réponse de jrivet
cs_MPi 3869 Messages postés mardi 19 mars 2002Date d'inscription 25 mai 2018 Dernière intervention - 23 juil. 2007 à 11:34
0
Merci
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
Commenter la réponse de cs_MPi
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 23 juil. 2007 à 11:41
0
Merci
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
Commenter la réponse de taj88
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 23 juil. 2007 à 12:02
0
Merci
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
Commenter la réponse de cs_Nicko11
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 23 juil. 2007 à 12:05
0
Merci
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.
Commenter la réponse de cs_Nicko11
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 23 juil. 2007 à 12:28
0
Merci
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
Commenter la réponse de taj88
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 23 juil. 2007 à 16:14
0
Merci
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.
Commenter la réponse de cs_rt15
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 24 juil. 2007 à 08:56
0
Merci
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
Commenter la réponse de taj88
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 24 juil. 2007 à 09:05
0
Merci
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
Commenter la réponse de taj88
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 24 juil. 2007 à 09:09
0
Merci
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
Commenter la réponse de jrivet
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 24 juil. 2007 à 09:38
0
Merci
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
Commenter la réponse de taj88
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 24 juil. 2007 à 09:54
0
Merci
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
Commenter la réponse de taj88
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 24 juil. 2007 à 11:36
0
Merci
Re,
>[auteurdetail.aspx?ID=999867 Nicko11] : bah bien sûr que oui , merci pour la correction

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
taj88 113 Messages postés mercredi 9 mai 2007Date d'inscription 28 août 2007 Dernière intervention - 24 juil. 2007 à 11:52
0
Merci
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
Commenter la réponse de taj88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.