Création d'une fonction sur excel en code

Signaler
Messages postés
78
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
17 février 2011
-
Messages postés
78
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
17 février 2011
-
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

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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.
Messages postés
38
Date d'inscription
mercredi 5 novembre 2008
Statut
Membre
Dernière intervention
15 avril 2010

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
Messages postés
78
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
17 février 2011
1
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 !!!!!!!!!!!!!!!!!!
Messages postés
78
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
17 février 2011
1
Je me suis tromper desolé ma nouvelle formule ressemble plutôt à sa :
K2-(SOMME(X2:X9295)/NB.SI(X2:X9295;">0"))