Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
377
  • Question Question
XL pour MAC Calcul de notes.
Réponses
5
Affichages
703
Retour