starsky67
-
2 janv. 2013 à 16:12
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 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 :) )
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 2 janv. 2013 à 19:32
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 3 janv. 2013 à 10:07
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 3 janv. 2013 à 10:08
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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 3 janv. 2013 à 14:43
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 3 janv. 2013 à 18:24
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.