VBA fonction factorielle

starsky67 - 2 janv. 2013 à 16:12
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 3 janv. 2013 à 18:24
Bonjour à tous et bonne année,
voila je suis étudiant et nous commençons les bases de VBA sur Excel. J'ai un TP ou je butte vraiment, en effet une partie de ce TP s'agit d'intégrer la fonction factorielle et je crois que pour cela j'ai louper un épisode (cela ne marche pas...)

Voila une vision du petit programme



Et voici le code
Public depart As Integer
Public nb As Integer
'C'est la procédure qui efface les listes précédemment créer
Public Sub EFFACER()
Range("A10:G49").Select
    Selection.ClearContents

End Sub
'C'est la procédure qui gère tout le calcul
'- 1ère étape : liste de nombre
Public Sub CALCUL()
depart = Range("depart")
nb = Range("nb")

S = depart

For i = depart To (nb + depart - 1)

Cells(i - depart + 10, 1) = i
S = S + i
'La valeur de S est augmentée de i à chaque passages dans la boucle

'La somme est intégrée dans la case S1
Next i
Cells(8, 1) = S - 1
'---------2ème étape : liste de nombre au carrés
S = depart

For i = depart To (nb + depart - 1)

Cells(i - depart + 10, 3) = i * i

S = S + i * i

Next i
Cells(8, 3) = S - 1
'---------3ème étape : liste de nombre au carrés
S = depart

For i = depart To (nb + depart - 1)

Cells(i - depart + 10, 5) = i * i * i

S = S + i * i * i

Next i
Cells(8, 5) = S - 1

End Sub

'---------4ème étape : liste de nombre factorielles

Public Function FACT(depart As Double) As Double
    If depart = 0 Then
        FACT = 1
        
    Else
        FACT = depart * FACT(depart - 1)
    End If
S = depart

For i = depart To (nb + depart - 1)

Cells(i - depart + 10, 7) = FACT

S = S - 1

Next i
Cells(8, 7) = S - 1
End Function


Private Sub CommandButton1_Click()
Call EFFACER
Call CALCUL
Call FACT

End Sub


Mon 1er souci est qu'il m'indique que j'ai un argument facultatif (je ne sais pas ce que c'est, et le second c'est que pour les factorielles je pense que je me suis bien en-mêlé les pinceaux :) )

Merci d'avance pour votre aide.

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
2 janv. 2013 à 19:29
Bonjour,
Evite de réinventer la roue
1) La fonction FACT de Excel existe.
Existe également WorkSheetFunction.fact utilisable depuis VBA
sers-t-en !
2) les lourdeurs
---[u]Range("A10:G49").Select
Selection.ClearContents/u
s'écrit Range("A10:G49").ClearContents
--- Prends l'habitude de préciser les propriétés.
Exemple :
depart = Range("depart").value
nb = Range("nb").value
Cells(i - depart + 10, 7).Value = FACT
Cells(8, 7).value = S - 1

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0