Comparaison VBA

laurene13

XLDnaute Nouveau
Bonjour,

J'ai un problème que je n'arrive pas du tout à comprendre.

J'ai une liste de valeurs (la colonne 1 est un compteur utilisé ici pour l'explication):

1 1,2319
2 1,2338
3 1,2358
4 1,2391
5 1,2313
6 1,2328
7 1,2350
8 1,2362
9 1,2337
10 1,2343
11 1,234


Je cherche les cas ou les valeurs sont séparées d'au moins +0,0012 (de haut en bas) deux fois de suite. Dans cette liste, il y a 4 cas. lignes 1,2,3 lignes 2,3,4, lignes 5,6,7 et lignes 6,7,8.

Voici une partie de mon code :

Code:
Dim opens_consecutifs As Double
Dim higher_lower As String
Dim diff_pips As Double '+0,0012
Dim target_profit As Double
Dim payout_time As Double
Dim temp() As Double
Dim test_reussi As Boolean
Dim open_r As Double
Dim open_r_plus_un As Double

Worksheets("Inputs").Activate
opens_consecutifs = Cells(7, 3) - 1
higher_lower = Cells(8, 3)
diff_pips = Cells(9, 3) * 0.0001
target_profit = Cells(10, 3) * 0.0001
payout_time = Cells(11, 3)

Worksheets("EUR-USD").Activate
derniere_ligne = Cells(3, 1).End(xlDown).Row

ReDim temp(2, 0)

For i = 4 To derniere_ligne 'le compteur 1 ci -dessus est en ligne 4 sur ma spreadsheet

    'test d'optimisation
    If Cells(i + opens_consecutifs, 3) - Cells(i, 3) > opens_consecutifs * diff_pips Then
    
        test_reussi = True
        
        For r = 1 To opens_consecutifs
            
            open_r = Cells(i + r - 1, 3)
            open_r_plus_un = Cells(i + r, 3)
            
            If open_r + diff_pips > open_r_plus_un Then
                test_reussi = False
                Exit For
            End If
    
        Next r
    
    
        If test_reussi = True Then
        
            ReDim Preserve temp(2, UBound(temp, 2) + 1)
            temp(1, UBound(temp, 2)) = i + 2
            
        End If
        
    End If
    
Next i

Le souci est que le cas 6,7,8 ne fonctionne pas car selon le code open_r + diff_pips > open_r_plus_un est vrai lorsque i=9 et r=2 (cad lignes 7 et 8 ici).
Or open_r + diff_pips = 1,2362 et open_r_plus_un=1,2362 , donc 1,2362 > 1,2362 ne devrait pas executer ma boucle if.

J'ai par ailleurs teste afin de voir si ces deux valeurs ressortaient comme égales et ce n'est pas le cas. Je ne comprends pas.

Avez-vous une idée ?
Merci beaucoup,

Bonne journée
 

laurene13

XLDnaute Nouveau
Re : Comparaison VBA

Bonjour,

Merci de ta reponse.

Ca ne fonctionne toujours pas. J'ai affiche les deux valeurs a comparer sur une feuille, ce sont strictement les memes. Je ne comprends pas.

Si tu as une autre idee...En tout cas merci de m'avoir aidee.

Bonne journee
 

eriiic

XLDnaute Barbatruc
Re : Comparaison VBA

Je n'ai pas ton fichier pour contrôler mais désolé, j'insiste...
Ca doit être ta multiplication par 0.0001 qui met le brin
Tu vois 1,2362 mais ça doit être 1,2362 plus un pouième insignifiant style 1,2362 +/- 1E-17
Comme excel calcule sur plus de chiffres qu'il n'affiche tu ne le vois pas, mais ça joue dans les calculs et les tests
Fais la différence entre tes 2 valeurs testées et affiche la (mais en vba, tu ne le verras jamais sur ta feuille), je ne pense pas que tu auras 0...

remplace par exemple if a>b then par if round(a-b,4) > 0
 

eriiic

XLDnaute Barbatruc
Re : Comparaison VBA

on s'est croisé...
hummm pas sûr que remplacer double en single soit suffisant pour éliminer tous les cas, c'est dû à la conversion décimal en binaire (qui ne tombe pas toujours pile en binaire).
Le type currency oui élimine ce type d'erreur car contrairement aux apparences il travaille sur des entiers, mais là vu que tu es sur 4 décimales je ne sais pas trop si tu ne risque pas des erreurs d'arrondis.
 
Dernière édition:

laurene13

XLDnaute Nouveau
Re : Comparaison VBA

Effectivement en remplacant par round(a-b,4)>0 ca fonctionne.

J'ai pas vraiment bien saisi d'ou venait le probleme, j'avais affiché en effet mon ecart de a-b et j'obtenais 0,0011999999997 ou un truc comme ca mais j'ai pas bien saisi exactement pourquoi.

Enfin, en tout cas, merci beaucoup !
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg