Dépassement de capacité annormal
Résolu
ezor
Messages postés
177
Date d'inscription
Statut
Membre
Dernière intervention
-
ezor Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
ezor Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Dépassement de capacité annormal
- Test capacité pc - Guide
- Créer un compte yahoo mail gratuit avec capacité de - Télécharger - Mail
- Yahoo Mail France : comment créer une adresse mail gratuite - Guide
- Le logiciel amd a détecté un dépassement de délai du pilote - Forum Carte graphique
- Dépassement de capacité vba - Forum VB / VBA
6 réponses
Regardes la valeur des variables en pas à pas (F9 pour le point d'arrêt et Shift+F9 sur la sélection pour voir la valeur
Bonjour,
Afin de pouvoir tester, merci de nous donner les valeurs (qui font planter la procédure) de :
- Range("C4")
- Range("C5")
- Range("D4")
- Range("D5")
Afin de pouvoir tester, merci de nous donner les valeurs (qui font planter la procédure) de :
- Range("C4")
- Range("C5")
- Range("D4")
- Range("D5")
Premier souci : la fonction proba ne renvoie rien.
Pourquoi?
Parce que tu ne lui affectes aucun résultat...
Pourquoi?
Parce que tu ne lui affectes aucun résultat...
Public Function proba(nb_juste, restant) As Long Dim r As Long Dim n As Long r = restant n = nb_juste 'ICI on lui affectes un résultat... (tu avais oublié proba = proba = fact(r) * 3 ^ (r - n) / ((4 ^ n) * fact(n) * (fact(r - n))) End Function
Bonjour
Le dépassement vient de ta façon d'implémenter la fonction proba : fact(r) ou fact(n) peut être trop grand pour un entier long
fact(r)/(fact(n)*fact(r-n)) = (r,n) nb de combinaisons de n parmi r
Excel vba dispose de la fonction de la feuille de calcul Combin
Remplaces la ligne (au passage tu as oublié proba = )
' proba = fact(r) * 3 ^ (r - n) / ((4 ^ n) * fact(n) * (fact(r - n)))
par celle ci
proba = Application.WorksheetFunction.Combin(r, n) * 3 ^ (r - n) / 4 ^ n
tu pourras aller un peu plus loin, et tu n'as plus besoin de ta fonction fact
Cordialement
Le dépassement vient de ta façon d'implémenter la fonction proba : fact(r) ou fact(n) peut être trop grand pour un entier long
fact(r)/(fact(n)*fact(r-n)) = (r,n) nb de combinaisons de n parmi r
Excel vba dispose de la fonction de la feuille de calcul Combin
Remplaces la ligne (au passage tu as oublié proba = )
' proba = fact(r) * 3 ^ (r - n) / ((4 ^ n) * fact(n) * (fact(r - n)))
par celle ci
proba = Application.WorksheetFunction.Combin(r, n) * 3 ^ (r - n) / 4 ^ n
tu pourras aller un peu plus loin, et tu n'as plus besoin de ta fonction fact
Cordialement
Cordiales salutations à NHenry et à pijaku au passage
je me suis permis de faire un peu de ménage
je me suis permis de faire un peu de ménage
Sub calcul() Dim a As Long Dim x As Long Dim b As Long Dim y As Long Dim res As Double Dim som As Double Dim k As Long Dim i As Long a = Range("C4").Value 'Score du joueur A x = Range("C5").Value 'nombre de coup restant pour le joueur A b = Range("D4").Value 'Score du joueur B y = Range("D5").Value 'nombre de coup restant pour le joueur B If a + x <= b Then res = 0 'cas trivial, A est sur de perdre, donc proba à 0 directement ElseIf a > b + y Then res = 1 'cas trivial, A est sur de gagner, donc proba à 1 directement ElseIf a > b Then 'à finir ElseIf a < b Then res = 0 k = 0 While k <= a - b + x - 1 som = 0 For i = (b - a + 1 + k) To x som = som + proba(i, x) Next i res = res + proba(k, y) * som k = k + 1 Wend ElseIf a = b Then If x = y Then res = 0.5 'cas trivial aussi, donc 0.5 directement Else 'à finir aussi End If Else MsgBox "j'ai oublié un cas" End If Cells(4, 6) = res 'affiche le résultat dans une case MsgBox ("terminé") End Sub 'fonction calculant la probabilité de faire n "réponses justes" parmis les r chances restantes Public Function proba(nb_juste As Long, restant As Long) As Long Dim r As Long Dim n As Long r = restant n = nb_juste '?????? j'ai ajouté le renvoi du résultat ---> proba = ' proba = fact(r) * 3 ^ (r - n) / ((4 ^ n) * fact(n) * (fact(r - n))) proba = Application.WorksheetFunction.Combin(r, n) * 3 ^ (r - n) / 4 ^ n End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Autant de réponse en si peu de temps, merci beaucoup à tous.
Effectivement, j'ai oublié le "proba =" !
Pour le calcul de n parmis r (oui, c'est bien ce que je voulais faire) je n'avais pas trouvé de fonction vba qui faisait déjà tout ça, c'est pourquoi j'ai voulu repasser par les factorielles du dénombrement. Merci pour le conseil.
Je vais tester ça au plus vite et je vous dis ce qu'il en est.
Effectivement, j'ai oublié le "proba =" !
Pour le calcul de n parmis r (oui, c'est bien ce que je voulais faire) je n'avais pas trouvé de fonction vba qui faisait déjà tout ça, c'est pourquoi j'ai voulu repasser par les factorielles du dénombrement. Merci pour le conseil.
Je vais tester ça au plus vite et je vous dis ce qu'il en est.
Je ne comprend pas bien ce que tu dis. J'arrive bien à mettre un point d'arrêt sur une ligne, mais après avoir lancé la macro, si je fais Shift+F9, ça me revoit "pas d'expression espionne selectionnée" ou "expression espionne incorrecte".
Et le deboggeur pas à pas ne se lance pas bien (mais ici j'ai la version office 2003 seulement, ceci explique peut être cela)