Envie de manger mon clavier... macro VB

Résolu
Signaler
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010
-
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010
-
Sub moyennearithmétiquesansvaleurvide()
'
' moyennearithmétiquesansvaleurvide Macro
'
' fait la moyenne des cases non vides

Dim z As variant
Dim y As integer
z = 0
y = 0

For x = 0 To 48
If ActiveSheet.Range("g5").Offset(x, 0).Value <> "" Then
y = y + 1
z = z + ActiveSheet.Range("c3").Offset(x, 0).Value
End If
Next

ActiveSheet.Range("A1") = z/y

End Sub

je ne comprends pas pourquoi ça ne fonctionne pas. Rien ne ressort en A1.
je n'arrive certainement pas à pointer la bonne case ou peut-etre est-ce autre chose.
Please Help !!!!

8 réponses

Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

C'est vraiment abusé comme ça me rappelle le pascal... Mais comme j'ai hâte de reprendre mes marques !!!!
En plus, c'est beaucoup plus dynamique.
La fonction marche. Je vais lui donner un peu plus de vigueur avec des instructions plus intéressantes qu'un calcul de moyenne.
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

la moyenne arithmétique que je veux calculer sans valeur vide est éffectuée à partir d'un ensemble de chiffre commençant en G5 et continuant en H5,I5 etc ...
Il s'agit en fait de faire la moyenne arithmétique d'une ligne correspondant à 48 éléments à l'horizontal(4*12 mois de vente pour une références données), en considérant que certains éléments sont vides avant de prendre une valeur par la suite (ventes arrivant plus tard dans l'année ou une année plus tard).
Cette macro me permettra de définir des moyennes arithmétiques ou mobiles par la suite pour des références de produit dont les ventes et leur apparition ne coïncide pas forcément les unes avec les autres.
Si je suis difficile à comprendre mettez moi un petit carton jaune. Je me ferais un plaisir de reprendre cette explication.
Amicalement_le mangeur de clavier
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

Eu.... Je viens de relire. C'est bien z=z+activesheet.range("G5").value à la place de
z=z+activesheet.range("C3").value.
Ce changement éffectué, cela ne marche toujours pas... Avec une belle erreur 6
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

Sub testvaleurvide()
'
' testvaleurvide Macro
'
'

Dim z As Integer
Dim y As Integer
z = 0
y = 0

For x = 0 To 47
If ActiveSheet.Range("g5").Offset(0, x).Value <> "" Then
y = y + 1
z = z + ActiveSheet.Range("g5").Offset(0, x).Value
End If

Next
Range("A1").Select
Range("a1") = z / y

End Sub

J'avais pas mis mon offset au bon endroit ----> offset(0,x) pour déplacer à la verticale mon test. Enfin :)=
Tant que je n'ai pas avalé toutes mes touches c'est le principal.
Par contre, je voudrais transformer ça en fonction...
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

ROOOOOOOOOO !!!!!! Pour déplacer mon test à l'horizontal pardon...
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
1
Désolé de te déranger dans ton monologue,
...
Range("A1").Select
Range("a1").value = z / y
End Sub

Le .value sur l'avant derniere ligne, pas sur que ce soit cela mais essai quand même
Bone Prog CGSI3
Messages postés
416
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
7 janvier 2018
1
Au fait, moi aussi je viens du Pascal (tp6), mais tu verra on s'y fait très vite au vba.
Par contre vb.net c'est mieux. Si tu veux des conseils n'hesite pas.
CGSI3
Messages postés
9
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
21 décembre 2010

Function MoyenneAritSansVide(n As Object)
'
' choisi le rang de la moyenne arithmétique sur une T donnée à n mois
' vide non compris

Dim z As Integer
Dim y As Integer
z = 0
y = 0

For x = 0 To n-1
If ActiveSheet.Range("g5").Offset(0, x).Value <> "" Then
y = y + 1
z = z + ActiveSheet.Range("g5").Offset(0, x).Value
End If

Next
testvaleurvide = z / y

End Function