Help problème debogage avec mon jeu vba

Help problème debogage avec mon jeu vba - VB/VBA/VBS - Programmation

Marsh Posté le 22-05-2007 à 08:48:16    

Je debute en VBA et j'essai de faire un jeu en vba et j 'ai une erreur  Run time error 9   Subscript out of range
 
je capte pas trop donc si quelqu'un pouvait m'aider à resoudre l'erreur et ameliorer ce code  :bounce:  
 
merci  
 
Vous pouvez acceder au fichier déposé à l'adresse suivante:  
 
 


Message édité par guiguipsib le 22-05-2007 à 16:52:31
Reply

Marsh Posté le 22-05-2007 à 08:48:16   

Reply

Marsh Posté le 22-05-2007 à 09:42:20    

Quand on a une erreur, la première chose à faire est de localiser la ligne de code qui pose problème.
Ceci est largement possible en utilisant les fonctionnalités de debogage de VBA (mode pas à pas : F8, MAJ+F8, CTRL+MAJ+F8, mode continu F5, les espions, les points d'arrêts F9)
 
Si tu veux un peu d'aide il faut au moins que tu nous donnes une indication de la partie de code qui génére l'erreur et que tu copies ce code dans ton message.
 
Personnellement je n'ai aucune envie d'ouvrir ton ZIP et faire le boulot.

Reply

Marsh Posté le 22-05-2007 à 09:46:26    

ok pas de souci dsl
alors il m'affiche l'erreur la  carte1 = Tableaucartes(Tableaualéatoire(Z))
 
alors que j'ai déclaré  
Public Tableaualéatoire(1 To 32) As Integer    
Public Tableaucartes(1 To 32) As String  
Public im1 As Integer
Public carte1 As String
Public Images(1 To 32) As Object
 
puis l'erreur est dans la procedure suivante
 
Public Sub select_image(Z As Integer)
 
    If nb_carte_select = 0 Then
     
        im1 = Z
        carte1 = Tableaucartes(Tableaualéatoire(Z))
        Images(Z).Picture = LoadPicture("C:\Documents and Settings\guigui\Bureau\VBA\" & CStr(Tableaucartes(Tableaualéatoire(Z))) & ".bmp" )
        Images(Z).BringToFront ' force le rafraichissement de l'image
        nb_carte_select = nb_carte_select + 1
         
    ElseIf nb_carte_select = 1 Then
     
            If im1 = Z Then
                MsgBox "On ne peut pas selectionner deux fois la même carte. Choisis en une autre!"
                Exit Sub
            Else
                im2 = Z
                carte2 = Tableaucartes(Tableaualéatoire(Z))
                Images(Z).Picture = LoadPicture("C:\Documents and Settings\guigui\Bureau\VBA\" & CStr(Tableaucartes(Tableaualéatoire(Z))) & ".bmp" )
                Images(Z).BringToFront ' force le rafraichissement de l'image
                nb_carte_select = 2
            End If
             
    ElseIf nb_carte_select = 2 Then
            MsgBox "Tu dois valider tes deux cartes."
            Exit Sub
             
    End If
End Sub
 
je vois vraiment pas pourquoi il y a une erreur

Reply

Marsh Posté le 22-05-2007 à 10:04:55    

Typiquement l'erreur 9 est une erreur d'indice dans un tableau.
Si la ligne en cause est bien « carte1 = Tableaucartes(Tableaualéatoire(Z)) », alors, soit Z < 1 ou Z > 32, soit Tableaualéatoire(Z) < 1 ou Tableaualéatoire(Z) > 32.
 
Si tu places un point d'arrêt sur ta ligne (F9 ou clic dans la marge grise), tu pourras voir la valeur en cours d'exécution de ces deux propositions et savoir laquelle pose problème.
Après il suffira d'en trouver la cause (mauvais paramètre passé à select_image(), ou mauvaise initialisation de Tableaualéatoire...)
 
Est ce que Tableaualéatoire est rempli par des instructions Rnd ?

Reply

Marsh Posté le 22-05-2007 à 10:13:57    

alors j'ai verifié c'est mon tableaualéatoire(Z) qui est nul...

Reply

Marsh Posté le 22-05-2007 à 10:19:11    

je vais verifier mon programme parce que je dois avoir un souci je confonds mes 2 tableau et les valeurs de 1 doit etre attribué aleatoirement alors que les autres correspondent aux click...je vais essayer de regler ca...merci en tt cas

Reply

Marsh Posté le 22-05-2007 à 11:11:30    

la valeur de mon tableaualeatoire() est toujours 0 je comprend pa pourtant j'ai fait ca  
 
 Test = True
         
        c = Int((32 * Rnd()) + 1)                
        For d = 1 To 32                        
            If Tableaualéatoire(d) = c Then
                Test = False
                Exit For
            End If
        Next d
         
        If Test = True Then                    
            Tableaualéatoire(b) = c
               Tableaualéatoire(b + 1) = c                      
        End If
logiquement il devrait pas avoir la valeur 0?

Reply

Marsh Posté le 22-05-2007 à 13:05:34    

Le code que tu as posté ne peut pas remplir correctement le tableau.
Je ne vois pas d'initialisation de b.
Je ne suis pas sûr de comprendre comment tu souhaites remplir ton tableau.
Des entiers entre 1 et 32 sans en répéter ?

 

Dans ton test « If Test = True Then », tu remplis deux éléments successifs avec la même valeur c et je ne comprends pas pourquoi.
Mais ça peut être normal suivant tes objectifs, pour le coup je te le signale juste.

 

Et clairement si ton code n'est pas dans une boucle plus large, tu ne traites qu'un élément c (pas 32).


Message édité par tegu le 22-05-2007 à 13:08:47
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed