A voir également:
- Pb d'arrêt de fonction en VBA
- Fonction si et - Guide
- Manette ps4 vibre sans arrêt ✓ - Forum PS4
- Comment supprimer les pubs qui apparaissent sans arrêt - Guide
- Freebox tv se coupe sans arrêt 2023 - Forum Réseaux sociaux
- Arret en cours infini - Forum Windows 7
12 réponses
maily
Messages postés
7556
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
23 juin 2023
453
13 août 2003 à 10:44
13 août 2003 à 10:44
Bonjour!!!
moi je l'écrirais comme ça:
Bonne journée
Maily :-))))
moi je l'écrirais comme ça:
If tableau(i) = p Then Appartient = True end function Else i = i + 1 End If Loop End Function
Bonne journée
Maily :-))))
Ben, c'est exactement comme ça que je l'ai écrit après mais ça ne marche toujours pas; je sais pas pourquoi, lorque le compilateur exécute la fonction, le i dépasse du tableau testé
maily
Messages postés
7556
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
23 juin 2023
453
13 août 2003 à 11:39
13 août 2003 à 11:39
Je crois que c'est parce que tu ne vides jamais ton tableau! Donc ton test d'arret est mauvais!
non?
Maily :-))))
non?
Maily :-))))
Ben au final, j'ai ça:
Function Appartient(p As Variant, ByRef tableau() As Variant)
Dim i As Integer
i = 1
Do While Not (IsEmpty(tableau(i)))
If tableau(i) = p Then
Appartient = True
Exit Function
Else
i = i + 1
End If
Loop
Appartient = False
End Function
Dans ma fonction principale, j'ai un tableau, par ex., à 14 elts et chaque fois qu'il le parcoure et qu'il voit que l'élément n'est pas égal aux 14 elts du tableau, au lieu de retourner false, il incrémente encore et me met ce message d'erreur: "indice en dehors de la plage".
De plus, en faisant un pas à pas détaillé ça fait ce que je veux avant ceci.
Que dois-je faire?
Function Appartient(p As Variant, ByRef tableau() As Variant)
Dim i As Integer
i = 1
Do While Not (IsEmpty(tableau(i)))
If tableau(i) = p Then
Appartient = True
Exit Function
Else
i = i + 1
End If
Loop
Appartient = False
End Function
Dans ma fonction principale, j'ai un tableau, par ex., à 14 elts et chaque fois qu'il le parcoure et qu'il voit que l'élément n'est pas égal aux 14 elts du tableau, au lieu de retourner false, il incrémente encore et me met ce message d'erreur: "indice en dehors de la plage".
De plus, en faisant un pas à pas détaillé ça fait ce que je veux avant ceci.
Que dois-je faire?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
maily
Messages postés
7556
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
23 juin 2023
453
13 août 2003 à 11:55
13 août 2003 à 11:55
Tu as une boucle infinie! Ton test d'arret de ton while est faux!
Ton test est le suivant: faire tant que le tableau n'est pas vide pour arreter la boucle! Mais tu ne vides pas ton tableau au fur et à mesure dans ton code!
Donc, soit tu enlèves les éléments un à un de ton tableau quand l'élément a été testé, soit, tu changes le test d'arret de ton while!
Maily :-))))
Ton test est le suivant: faire tant que le tableau n'est pas vide pour arreter la boucle! Mais tu ne vides pas ton tableau au fur et à mesure dans ton code!
Donc, soit tu enlèves les éléments un à un de ton tableau quand l'élément a été testé, soit, tu changes le test d'arret de ton while!
Maily :-))))
Utilisateur anonyme
13 août 2003 à 12:00
13 août 2003 à 12:00
Salut à tous,
Au lieu d'utiliser
Do While Not (IsEmpty(tableau(i)))
Loop
il faut utiliser
Do
Loop Until Not (IsEmpty(tableau(i)))
EDIT1:
Il y a quelque chose de curieux dans ton code. Si tu as créé un tableau de 14 éléments, tableau(14) <> vide et tableau(15) n'existe pas! Donc, si tu connais la taille de ton tableau, j'utiliserais plutot un
For i = 1 To n
Next i
en passant éventuellement n en paramètre de ta fonction
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Au lieu d'utiliser
Do While Not (IsEmpty(tableau(i)))
Loop
il faut utiliser
Do
Loop Until Not (IsEmpty(tableau(i)))
EDIT1:
Il y a quelque chose de curieux dans ton code. Si tu as créé un tableau de 14 éléments, tableau(14) <> vide et tableau(15) n'existe pas! Donc, si tu connais la taille de ton tableau, j'utiliserais plutot un
For i = 1 To n
Next i
en passant éventuellement n en paramètre de ta fonction
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Utilisateur anonyme
13 août 2003 à 12:07
13 août 2003 à 12:07
Maily,
Comme le test porte sur tableau(i), il test si l'élément tableau(i) est vide ou non. Pas si le tabeau est composé de 0 éléments.
:-)
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Comme le test porte sur tableau(i), il test si l'élément tableau(i) est vide ou non. Pas si le tabeau est composé de 0 éléments.
:-)
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Ok Lelaid, ça marche avec Do...Loop Until...
Je te remercie car tu m'as bien aidé.
Mais à propos, je ne vois pas réellement la différence textuellement, pourrais-tu me l'expliquer?
Je te remercie car tu m'as bien aidé.
Mais à propos, je ne vois pas réellement la différence textuellement, pourrais-tu me l'expliquer?
Utilisateur anonyme
13 août 2003 à 13:25
13 août 2003 à 13:25
Attention, je me suis planté. Si tu tests to code, tu remarqueras qu'il ne te renvoit pas le résultat escompté!
Je fais un essais et reviens
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Je fais un essais et reviens
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Utilisateur anonyme
13 août 2003 à 13:58
13 août 2003 à 13:58
Essaye ceci:
Function Appartient(p As Variant, ByRef tableau() As Variant) As Boolean
Dim i As Integer
Dim Taille As Integer
Appartient = False
Taille = UBound(tableau, 1)
For i = 0 To Taille
If tableau(i) = p Then
Appartient = True
End If
Next i
End Function
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)
Function Appartient(p As Variant, ByRef tableau() As Variant) As Boolean
Dim i As Integer
Dim Taille As Integer
Appartient = False
Taille = UBound(tableau, 1)
For i = 0 To Taille
If tableau(i) = p Then
Appartient = True
End If
Next i
End Function
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-)