Dépassement de capacité annormal
Résolu/Fermé
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
Modifié par ezor le 20/08/2015 à 14:45
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 21 août 2015 à 11:13
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 21 août 2015 à 11:13
A voir également:
- Dépassement de capacité annormal
- Créer un compte yahoo mail gratuit avec capacité de - Guide
- Yahoo Mail - Télécharger - Mail
- Test capacité pc - Guide
- Capacité disque dur externe - Guide
- Dépassement de capacité vba ✓ - Forum Excel
6 réponses
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
345
20 août 2015 à 14:38
20 août 2015 à 14:38
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
20 août 2015 à 14:59
20 août 2015 à 14:59
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")
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
20 août 2015 à 15:04
20 août 2015 à 15:04
le but est d'aller jusqu'à 20. Mais ça me renvoie une erreur dès que A>2 ou 3 (toujours en gadant a<b et a+x>b)
par exemple avec
- Range("C4") = 2
- Range("C5") = 3
- Range("D4") = 4
- Range("D5") = 3
la procédure plante
par exemple avec
- Range("C4") = 2
- Range("C5") = 3
- Range("D4") = 4
- Range("D5") = 3
la procédure plante
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
20 août 2015 à 15:14
20 août 2015 à 15:14
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
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
20 août 2015 à 15:21
20 août 2015 à 15:21
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
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
Modifié par ccm81 le 20/08/2015 à 15:31
Modifié par ccm81 le 20/08/2015 à 15:31
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
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
20 août 2015 à 15:34
20 août 2015 à 15:34
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.
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
21 août 2015 à 11:13
21 août 2015 à 11:13
Merci à tous pour votre aide, j'ai fini par faire fonctionner tout ça.
Au passage, il y avait une autre erreur : je definissais le résultat de proba comme un Long au lieu d'un Double (donc toutes les proba étaient à 0)
Au passage, il y avait une autre erreur : je definissais le résultat de proba comme un Long au lieu d'un Double (donc toutes les proba étaient à 0)
Modifié par ezor le 20/08/2015 à 14:52
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)