Run-time error 9

DjMedz Messages postés 16 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 2 octobre 2008 - 21 août 2007 à 15:48
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 22 août 2007 à 02:58
Bonsoir, je ne sais pas si quelqu'un a déja vu ca auparavant... jai un picturebox1 auquel j'ai insérer un picturebox2 dans le but de pouvoir faire un défilementdu picturebox2. j'ai ajouter le code pour agrandir la form (trouver ce sur site)

For Each ctrl In frmvente.Controls 'pour le resize de la form


cleft(cnt) = ctrl.Left / frmvente.Width * 100
ctop(cnt) = ctrl.Top / frmvente.Height * 100
cwid(cnt) = ctrl.Width / frmvente.Width * 100
chite(cnt) = ctrl.Height / frmvente.Height * 100
cnt = cnt + 1
Next ctrl

et ayant déclarer 
Dim cleft(50), ctop(50), cwid(50), chite(50)

 jai 5 text box dans le picturebox2 et tout fonctionne a merveille
Le probleme surivent a ce moment
j'ai fait des groupe de controle de chaque textbox (4 textbox de chaque) et la quand j'appuie sur le bouton pour démarrer le projet..
voila que j'obtien le message d'erreur suivant

Run-time error 9
subscript out of range

merci d'avance pour votre aide

16 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
21 août 2007 à 16:07
Salut,

Je n'ai pas la réponse à ton problème, mais regarde ICI, il y a une source à ce sujet..

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
21 août 2007 à 16:26
L'erreur se produit sur quelle ligne de code ? Dans quelle Sub ?
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 août 2007 à 20:47
Salut,
c' est une erreur d' index

For Each ctrl In frmvente.Controls 'pour le resize de la form
cleft(cnt-1) = ctrl.Left / frmvente.Width * 100
ctop(cnt-1) = ctrl.Top / frmvente.Height * 100
cwid(cnt-1) = ctrl.Width / frmvente.Width * 100
chite(cnt-1) = ctrl.Height / frmvente.Height * 100
cnt = cnt + 1
Next ctrl

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 août 2007 à 21:13
non non , je ne crois pas que ç a soit ça !
Par contre je crois que c' est le groupe de controls (TextBox)
qui te pose des problèmes, car chaque pour control tu dois indiquer
son rang :TextBox(0) ,TextBox(1) ,TextBox(2)  et  TextBox(3) =>>
Tu ajoutes donc une variable indice  pour avoir ctrl(indice),
Mais faire une boucle pour chaque groupe de control ,





<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0

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

Posez votre question
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
21 août 2007 à 22:34
Pas d'index à spécifier içi, puisqu'on est dans une boucle For Each ... Next
Non ! Par contre, je voudrais bien savoir ce que vaut la variable nommée cnt au premier tour de boucle ? Car si cnt vaut zéro, alors un cleft(cnt-1) risque de planter si cleft() à un indice démarrant à 1, comme tout tableau en VB6 par défaut !!
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
21 août 2007 à 22:37
Par contre, attention !!!!
Un déclaration du type de celle-ci :
Dim cleft(50), ctop(50), cwid(50), chite(50)
... déclare des tableaux de Variant !

P.S. : Le pb que j'ai évoqué ci-dessus ne doit pas être la cause de tes malheurs, sinon le msg d'erreur serait "indice en dehors des limites "
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 août 2007 à 22:48
Salut kristof,
Entièrement d' acc sur cnt...et sur Dim cleft(50)
Par contre :


For Each ctrl... Next  => ctrl prend le nom du control
or pour TextBox(1) il ne retient que TextBox ce qui est faux
puisque tu n' as pas de control TextBox mais TextBox(0) ,TextBox(1)...etc.
Enfin , il me semble. ça se peut que je me trompe .


<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
21 août 2007 à 23:20
chaibat05 < Désolé de te contredire, mais si, sur une form Form1 tu as les controle suivant : TextBox(0), TextBox(1), ...
Et bien dans une boucle ...

For Each Ctrl In Form1.Controls
...
Next

... Ctrl vaut succéssivement TextBox(0), TextBox(1), etc ...
Il ne "retient pas que Textbox" comme tu le dis, car dans notre cas, Textbox n'est pas un controle, mais une collection de controle, textbox n'est donc pas un élément de la collection Form1.Controls,et notre Ctrl ne pointera jamais sur la collection nommée TextBox.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 août 2007 à 23:32
Bien !


si tu le dis et que t' en ai sûr , c' est que c' est vrai.


Personnellement , j' use pas trop ce genre de traitement.
Et ne sois pas désolé de me contredire, j' ai bien mérité ce rappel


<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0
DjMedz Messages postés 16 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 2 octobre 2008
22 août 2007 à 01:20
salut , si je fais un débug sur l'erreur, il surligne en jaune la ligne souligné
Private Sub Form_Load()


Dim ctrl As Control
Set db = OpenDatabase(App.Path & "\facturation.mdb") 'Ouvre la base de donnée facturation
VScroll1.Max = Picture1.Height + 500
For Each ctrl In frmvente.Controls 'pour le resize de la form
cleft(cnt) = ctrl.Left / frmvente.Width * 100
ctop(cnt) = ctrl.Top / frmvente.Height * 100
cwid(cnt) = ctrl.Width / frmvente.Width * 100
chite(cnt) = ctrl.Height / frmvente.Height * 100
cnt = cnt + 1
Next ctrl
End Sub
0
DjMedz Messages postés 16 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 2 octobre 2008
22 août 2007 à 01:37
Jai avancé un petit peu mais maintenant me voila rendu avec un autre probleme

dans le form load, jai ajouter on error goto error

et a la fin

error: 
 
et jai mis la meme chose dans form resize
ce qui  fait que je peut partir le programme et ca fonctionne sauf que maintenant
jai des label dans le haut de mon programme qui n'affiche pas lorsque je suis en mode petite fenetre!! et qui apraisse lorsque j'agrandit la fenetre??? bizzare
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 août 2007 à 01:55
il ne faut pas oublier que lorsque tu places des controls dans un container
(PictureBox ou Frame), la positions de ces controls se fait par rapport au container
et non pas par rapport à la denêtre.
Exemle:Une PictureBox dans laquelle on place un label.
PictureBox.Left=600
Label.Left=30
le label est sur le bord gauche de la picture box à la position 30.
Mais par rapport à la fenêtre c' est 630.
Mais si tu fais
label.Left=630
le label se placera à la position 630 par rapport au bord gauche de la picturebox.
Et ça sera 1230 par rapport à la feuille.
Si la largeur de ta picturebox est inférieur à 600, le label ne sera pas visible
puisqu'il débordera sur le côté droit de son container.




PS: Juste pour savoir: Comment tu as fais pour contourner l' erreur du Runtime.











<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0
DjMedz Messages postés 16 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 2 octobre 2008
22 août 2007 à 02:12
jai mit un ON ERROR GOTO ERROR

.....

ERROR:

jai mis ca dans form load et dans form resize
ca a fonctionné....
pour ce qui est des label qui ne s'affiche plus, ceux ci ne sont pas dans le picturebox et en plus il y en a 4 qui n'affiche plus et 2 qui s'affiche, ils sont tous de la meme dimension et un au dessou de l'autre!
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 août 2007 à 02:26
beh, il faut vérifier la position de chacun.
Dans Form_Resize mets ceci à la dernière ligne.
MsgBox Label1.Left & "-" & Label1.Top
et refais la même chose avec les autres.

Pour le On Error Goto ERROR:
 il y' a bien erreur à un stade donné. ce qui fait que la boucle s' interrompt.
 Essayes avec On Error Resume Next pour que le traitement continue malgé...
<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
DjMedz Messages postés 16 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 2 octobre 2008
22 août 2007 à 02:26
Et voilà tout est fonctionnel, j'ai supprimé mes labels et en ai recréer des nouveau et tout est OK.
Merci tout le monde pour votre aide! très apprécié
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 août 2007 à 02:58
Tant mieux alors ...
Bonne continuation.

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
Rejoignez-nous