VBA fonction factorielle

Signaler
-
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Tu comprendras par ailleurs que nous n'allons pas aller au-delà, sachant que :
J'ai un TP ou je butte vraiment, en effet une partie de ce TP s'agit d'intégrer la fonction factorielle

Je t'en ai dit suffisamment pour que tu fasses ton devoir ern connaissance de cause.
________________________
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.
Merci pour ta réponse, pour les lourdeurs c'est parce que je m'étais aidé d'une macro enregistrée. Ok pour les propriétés et par contre je ne sais toujours pas comment faire pour la partie factorielle, pour ce qui est de "WorkSheetFunction.fact" je ne connais pas et après quelques recherches sur le web, je ne sais pas comment intégrer cela correctement... Déjà je ne vois pas ou cela ne marche pas dans le code pour la partie factorielle, je veux dire par la ou je me suis trompé...

Tu comprendras par ailleurs que nous n'allons pas aller au-delà, sachant que :
J'ai un TP ou je butte vraiment, en effet une partie de ce TP s'agit d'intégrer la fonction factorielle


Je t'en ai dit suffisamment pour que tu fasses ton devoir ern connaissance de cause.


PS: la prochaine fois je ne marquerai pas que cela est un TP et les 3/4 sont comme même déjà achevés
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
pour ce qui est de "WorkSheetFunction.fact" je ne connais pas et après quelques recherches sur le web, je ne sais pas comment intégrer cela correctement...

1) C'est une plaisanterie ou quoi ? ===>> elle s'utilise exactement comme s'utilise toute fonction === Syntaxe générale : toto = ma_fonction(paramètre_passé)
Si tu veux que toto soit une cellule, plutôt qu'une variable ===>> exemple : Range("B13").value = ma_fonction(paramètre_passé)

2) ce n'est pas "sur le Web", que l'on cherche d'abord, mais dans son aide VBA (largement suffisante en l'occurence !)

PS: la prochaine fois je ne marquerai pas que cela est un TP

Il y a des "choses" qu'on "sent" à mille lieux à la ronde
________________________
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Et j'ajoute ceci, maintenant :
La totalité de ton exercice peut être faite sans aucun code VBA (juste des formules Excel)


________________________
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.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
Pour ton message d'erreur d'argument non facultatif, tu déclares la Function suivante, avec depart comme paramètre
Public Function FACT(depart As Double) As Double

Puis tu l'appelles sans paramètre
Cells(i - depart + 10, 7) = FACT '<<<-

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Bonjour, MPi,
Pourquoi écrire une fonction qui existe déjà (WorkSheetFuntion.Fact) ?


________________________
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.