Création d'une fonction sur excel en code

WrestlingMan Messages postés 78 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 17 février 2011 - 11 août 2009 à 11:34
WrestlingMan Messages postés 78 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 17 février 2011 - 17 août 2009 à 11:04
Bonjour,
j'èspère que vous pourrez m'aider !

Voilà, je veux réaliser une fonction de calcul en VBA sur excel pour faire un calcul ! Ce calcul étant une difference entre un nombre et une moyenne !!
Voici mon code :

Function Calcul_Dif_Mo_Vo2Pds_S()

Dim resultat As Double
Dim moyenne As Double
Dim numCells As Integer

numCells = 1

While Range("A2").End(xlDown).End(xlToRight).Value <> ""
moyenne = Cells(numCells, 12)
numCells = numCells + 1
moyenne = (moyenne + Cells(numCells, 12)) / (numCells - 1)
resultat = Cells(2, 11) - moyenne
Wend

Cells.Value = resultat

End Function

Malheuresement celà ne marche pas !! Que dois-je faire ?? Sachant que ma moyenne, au fil du temps porteras sur un plus grand nombre de nombre car mon tableau est lié à une base de données sur Access !

Merci d'avance !!

4 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
11 août 2009 à 13:55
Salut,

pourquoi vouloir creer une fonction alors que tout existe deja dans la liste des fonctions excel?

La formule suivante :

SOMME(5:5)/NB.SI(5:5;">0")

calcul la moyenne des cellules de la ligne 5 si les valeurs qu'elles contiennent sont des nombres superieur ou egale à 0.
Avec cette formule tu peux ajouter ou enlever autant de valeurs que tu veux le resultat sera toujours exact.

Un petit rappel au passage:

ne faite pas de tableau en ligne mais en colonne. Excel fonctionne en colonne ! pour preuve le filtre automatique ne peut s'appliquer qu'aux colonnes ! autre preuve les lignes ne peuvent contenir que 256 valeurs contre plus de 65000 pour les colonnes.
0
cs_Zock Messages postés 38 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 15 avril 2010
11 août 2009 à 14:02
While Range("A2").End(xlDown).End(xlToRight).Value <> ""
moyenne = Cells(numCells, 12) <== à chaque fois tu remets ta variable à 0 ?
numCells = numCells + 1
moyenne = (moyenne + Cells(numCells, 12)) / (numCells - 1) <== tu fais la somme des moenne divises par le nombre de fichier ?
resultat = Cells(2, 11) - moyenne
Wend

Cells.Value = resultat

End Function


je vois plus un truc comme ça
Function Calcul_Dif_Mo_Vo2Pds_S()

Dim resultat As Double
Dim moyenne As Double
Dim numCells As Integer
Dim Total as integer
numCells = 1

total = 0

While Range("A2").End(xlDown).End(xlToRight).Value <> ""
total = total + Cells(numCells, 12)
numCells = numCells + 1

Wend

moyenne = (total/ (numCells - 1)
resultat = Cells(2, 11) - moyenne
Cells.Value = resultat
End Function
0
WrestlingMan Messages postés 78 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 17 février 2011 1
17 août 2009 à 10:55
Déjà merci à tous les deux !! Mais j'ai toujour un problème !!
J'ai essayer ta formule de calcul bigfish_le_vrai en l'adaptant, la voici :
K2-(SOMME(2:9295)/NB.SI(2:9295;">0"))

Seulement voilà sa me ramene comme resultat 0

Je pense que c'est dû au fait qu'il y a des valeur nuls dans ma colonne !! Il me faut donc une formule qui me fasse se calcul mais en faisant la moyenne juste des cellules avec une valeurs et faisant abstraction des autres !! Alors aurais-tu une autre formule pour moi parce que je rame là !!

Merci d'avance !!!!!!!!!!!!!!!!!!
0
WrestlingMan Messages postés 78 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 17 février 2011 1
17 août 2009 à 11:04
Je me suis tromper desolé ma nouvelle formule ressemble plutôt à sa :
K2-(SOMME(X2:X9295)/NB.SI(X2:X9295;">0"))
0
Rejoignez-nous