Problème de calcul

Alainmnat

XLDnaute Nouveau
Bonjour,
J'ai un problème de calcul que je n'arrive pas à solutionner.
Je suis sous Excel 2010. Je dois faire le rapprochement de 2 bases de données. Dans le fichier joint, lles données de la BD1 sont dans les colonnes de A à W, les données de la BD2 sont dans les colonnes AL à BE et le résultat dans les colonnes Y à AF.
Les contrôles que je fais sont les suivants :
Data 1 = data 40
Data 12 = data 41
Data 9 = data 38 +/- 0.0003
Data 8 = data 39 +/- 0.0003
Data 17 = Data 55 +/- 1
Data 18= Data 57
Data 23 >= Data 50 + 2.1
Data 50 = Data 48 + Data 52
Dans un module, j'ai saisi mes macros pour chaque contrôle mais, lorsqu'il s'agit de calculer certains m'annoncent une erreur alors que le calcul est bon.

Merci pour votre aide
 

Pièces jointes

  • Verif.xlsm
    79.8 KB · Affichages: 45
  • Verif.xlsm
    79.8 KB · Affichages: 50

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Problème de calcul

Bonsoir Alainmnat,

Sans doute un effet dû à la représentation interne des nombres en VBA. Essayer le code ci-dessous. On en a profité pour remplacer la valeur texte FAUX par une véritable valeur logique -> False.

VB:
Sub Data_23()
'Condition : La valeur de la data_23 doit être >= data_50 + 2.1
Dim i As Long
  For i = 2 To Range("W" & Rows.Count).End(xlUp).Row
    Cells(i, 31) = IIf(CDec(Cells(i, 23)) >= CDec(Cells(i, 50)) + CDec(2.1), "", False)
  Next i
End Sub

Sub Data_50()
'Condition : La valeur de la data_50 = data_48 + data_52
Dim i As Long
  For i = 2 To Range("AX" & Rows.Count).End(xlUp).Row
    Cells(i, 32) = IIf(CDec(Cells(i, 50)) = CDec(Cells(i, 48)) + CDec(Cells(i, 52)), "", False)
  Next i
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Problème de calcul

Bonsoir Alainmnat, mapomme.


Autres possibilités :


  • Transformer le calcul sur des flottants en calculs sur des entiers.
Code:
Sub Data_23()
Dim i&, d&
    For i = 2 To Range("W200000").End(xlUp).Row
        d = 100 * (Cells(i, 23).Value - Cells(i, 50).Value)
        Cells(i, 31).Value = IIf(d >= 210&, Empty, False)
    Next i
End Sub

  • Utiliser un arrondi approprié.
Code:
Sub Data_50()
Dim i&
    For i = 2 To Range("AX200000").End(xlUp).Row
        Cells(i, 32).Value = IIf(Round(Cells(i, 48).Value + (Cells(i, 52).Value) - (Cells(i, 50).Value), 3), False, Empty)
    Next i
End Sub


Bonne nuit.


ℝOGER2327
#8163


Samedi 7 Décervelage 143 (Saints Forçats, poliorcètes - fête Suprême Quarte)
14 Nivôse An CCXXIV, 9,4995h - grès
2016-W01-1T22:47:55Z
 

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 648
Membres
105 476
dernier inscrit
hilt