Pb d'arrêt de fonction en VBA
Clark Devlin
-
Clark Devlin -
Clark Devlin -
Bonjour!
Je voudrais savoir ce qui ne va pas dans cette fonction qui est supposée retourner false à la fin de la boucle ou true si p appartient bien à tableau
Function Appartient(p As Variant, tableau() As Variant)
Dim i As Integer
i = 1
Do Until IsEmpty(tableau())
If tableau(i) = p Then
GoTo fin
Else
i = i + 1
End If
Appartient = False
Loop
fin:
Appartient = True
End Function
Je ne sais pas comment arrêter le programme une fois qu'il a trouvé l'élément dans le tableau.
Je vous remercie.
Je voudrais savoir ce qui ne va pas dans cette fonction qui est supposée retourner false à la fin de la boucle ou true si p appartient bien à tableau
Function Appartient(p As Variant, tableau() As Variant)
Dim i As Integer
i = 1
Do Until IsEmpty(tableau())
If tableau(i) = p Then
GoTo fin
Else
i = i + 1
End If
Appartient = False
Loop
fin:
Appartient = True
End Function
Je ne sais pas comment arrêter le programme une fois qu'il a trouvé l'élément dans le tableau.
Je vous remercie.
A voir également:
- Pb d'arrêt de fonction en VBA
- Arrêt maladie - Guide
- Fonction si et - Guide
- Fonction miroir - Guide
- Arrêt défilement excel ✓ - Forum Clavier
- Pc bloqué sur arret en cours ✓ - Forum Windows 8 / 8.1
12 réponses
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é
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
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 :-))))
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 :-)
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?
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 :-)
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 :-)