Faire une boucle de feuil1 vers feuil2 vba

dianbobo Messages postés 151 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

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


3 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

Utilise une variable supplémentaire que tu incrémentes dans chaque passage de la boucle.
Par exemple: nbdiff = nbdiff+1

Par contre remplace For i = 0 To k par For i = 1 To k, il n'y a pas de ligne 0

eric
0
dianbobo Messages postés 151 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour eriiic
voila je ne sais pas pas si j'ai bien suivi ton conseil j'ai ajouté une variable nommé Occurence voici le code:

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



mais j'ai une erreur d'execution :"depassement de capacité"
a la ligne ci dessous :
Cells(6, 8).Value = somme / Occurence


est ce correct mon code par rapport a tes indications ?
et comment corriger l'erreur ?

merci pour tout.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Dim somme As Single est sans doute un peu juste, déclare-le en double si tu veux être tranquille.
Pareil pour occurence, autant le mettre en long même si tu penses qu'il suffit, et ce d'autant plus que le traitement des long est plus rapide que celui des integer.

Ton code me parait très correct.

Tu peux aller voir cette page sur les variables en vba. A la fin tu as les limites selon les types
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
Si la 1ère cellule ne rempli pas le critère, tu passe directement à la ligne que tu renseigne...
Les divisions par zéro génère une erreur.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Très bonne raison oui :-)
Comme quoi Gide a dit des choses intéressantes... ;-)
A+
eric
0