Somme feuil1 vers feuil2

Résolu
dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014 - 31 mai 2010 à 18:57
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 1 juin 2010 à 13:46
bonjour tout le monde
je suis sur un code que je croix avoir presque terminé mais je bute sur un point

voici mon code:

Sub spreadDeCredit()
Dim k As Long
Dim spot_1 As Double
Dim spot_2 As Double
Dim somme As Single
Dim diff As Double
k = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 0 To k
    If Worksheets("Feuil1").Cells(i, 16).Value Like "*AAA*" Then
       spot_1 = Worksheets("Feuil1").Cells(i, 10).Value
       spot_2 = Worksheets("Feuil1").Cells(i, 11).Value
       diff = Abs(spot_1 - spot_2)
       somme = 0
       somme = somme + diff
    End If
    Cells(6, 8).Value = somme
End Sub


dans ce code je cherche a parcourir "Feuil1" avec la condition que j'ai imposé et mettre le resultat dans feuil2
ma boucle parcours la feuille ("feuil1") daja a ce nivo j'aimerai savoir ci c'est correct mon ecriture ?
ensuite je voudrais faire la somme de toutes les differences Abs(spot_1 - spot_2) ...
est ce correct la aussi
somme = somme + diff 

enfin mon soucis majeur est que ma cellule H6 DOIT CONTENIR : H6=somme/(nombre de fois qu'on a rencontré le caractere AAA dans feuil1) en d'autres termes c'est le nombre de fois qu'on a fait la difference entre spot_1 et spot_2

sof que j'ignore comment le definir dans mon code

merci de votre aide

5 réponses

dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014
1 juin 2010 à 10:06
bonjour tout le monde
voila le travail

Sub spreadDeCredit22()

Dim k, j As Long
Dim spot_1 As Double
Dim spot_2 As Double
Dim somme As Single
Dim diff As Double
Dim i As Integer
k = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
somme = 0
For i = 0 To k
    If Worksheets("Feuil1").Cells(i + 6, 16).Value Like "*AAA*" Then
       spot_1 = Worksheets("Feuil1").Cells(i + 6, 10).Value
       spot_2 = Worksheets("Feuil1").Cells(i + 6, 11).Value
       diff = Abs(spot_1 - spot_2) / 100
       somme = somme + diff
       j = j + 1
    End If
  Next i
Cells(6, 8).Value = somme / j
End Sub


ça marche bien
merci encore
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 mai 2010 à 19:42
Salut
Si Somme était dimensionné elle aussi en Double, ce serait mieux (mais pas trop pénalisant)
Quand tu commences ta boucle, je suppose que la feuille active est ta Feuil2 ?
Sinon, il faut l'écrire.

Si tu veux cumuler les différences, il ne faut pas remettre à zéro ta somme à chaque cycle du For-Next !

Si tu veux compter le nombre de cellules contenant AAA, il faut ... le compter : ajouter un compteur sur le même principe que la somme des différences, sauf que tu l'incrémenteras de 1 à chaque fois.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014
31 mai 2010 à 20:04
ma feuille active est bien feuille2
voici mon code a l'aide de vos consignes:

Sub spreaDeCredit()

Dim k As Long
Dim spot_1 As Double
Dim spot_2 As Double
Dim somme As Single
Dim diff As Double
Dim Occurence As Integer
k = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 0 To k - 6
    If Worksheets("Feuil1").Cells(i + 6, 16).Value Like "*AAA*" Then
       Occurence = Occurence + 1
       spot_1 = Worksheets("Feuil1").Cells(i + 6, 10).Value
       spot_2 = Worksheets("Feuil1").Cells(i + 6, 11).Value
       diff = Abs(spot_1 - spot_2)
       somme = somme + diff
    End If
    Cells(6, 8).Value = somme / Occurence
    Next
    
End Sub


sauf que j'ai une erreur de depassement de la capacité ici:
Cells(6, 8).Value = somme / Occurence


si qu'elqu'un veut bien m'aider...

merci d'avance
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 mai 2010 à 23:41
Oui, comme pour la variable somme qui devrait être dimensionnée en Double, Occurrence aussi : un Integer est trop limité et le compilateur n'a pas fait les conversions de type : En dimensionnant aussi en Double, tu lui simplifies la tâche et donc, tu fialilises ton programme.

D'autre part, pour accélérer le code, je te conseille de sortir le calcul de la moyenne de la boucle :
Cells(6, 8) ...
Mets-le après le Next
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 juin 2010 à 13:46
Dernière chose :
(somme est toujours un Single)
Dim k, j As Long
ne signifie pas que k et j seront des Long : uniquement j, k sera un Variant
Il faut répéter le type pour chaque variable
Dim k As Long, j As Long
0
Rejoignez-nous