Erreur de soustraction en VBA

Résolu
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Voilà, je fais une opération simple en VBA :

If Sheets(1).Range("V" & I) - Sheets(1).Range("K" & I) <> 0 Then


La condition s'effectue très bien sur certaines lignes puis pas sur d'autres.

J'ai donc créé une nouvelle macro faisant directement l'opération :

Sub Macro1()
If Sheets(1).Range("V587").Value = 777.4 Then
MsgBox ("OK")
Else: MsgBox ("PAS OK")
End If
End Sub


La valeur de la cellule est bien 777.4.

Comment puis-je alors avoir le résultat "PAS OK"?!

J'ai même testé en le mettant en texte, ça ne marche pas...

Sub Macro1()
If Sheets(1).Range("V587").Value = "777.4" Then
MsgBox ("OK")
Else: MsgBox ("PAS OK")
End If
End Sub


Y-a-t-il un moyen de tester tout ça? Je suis débutant en VBA...

Merci d'avance.

Cordialement.

7 réponses

  1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    J'ajoute que j'ai essayé de mettre un espion (sans maîtriser vraiment le truc).

    L'espion est Sheets(1).Range("V587").Value

    Il m'indique la valeur : <Hors du contexte>
    Type : Variant / Empty
    0
  2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Watch : + : Sheets(1).Range("V" & I) : 777,4 : Variant/Object/Range : Module2.TRAITEMENT_TVA

    Watch : + : Sheets(1).Range("V" & I) : 156 : Variant/Object/Range : Module2.TRAITEMENT_TVA

    Watch : + : Sheets(1).Range("V" & I) : 960 : Variant/Object/Range : Module2.TRAITEMENT_TVA

    Watch : + : Sheets(1).Range("V" & I) : 700 : Variant/Object/Range : Module2.TRAITEMENT_TVA

    Voici quelques tests réalisés. Mais pourquoi la valeur change-t-elle tout le temps?! Je précise que d'autres lignes sont avant et après et que tout se fait comme il faut sur ces autres lignes.... Help...
    0
  3. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Mon fichier.

    https://www.cjoint.com/c/EGnpcFPUYaf

    Cordialement.
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      Bonjour,
      Impossible de voir ton code, c'est protégé par mot de passe.

      Je crois que ton problème vient du symbole pour les décimales

      777.4 égale pas 777,4
      0
    2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Si je met 777,4, le code me renvoie "Erreur de syntaxe".

      De plus vous pourrez lire le but final dans le code complet. Je dois comparer 2 cellules. Le problème étant que 1000 lignes sont présentes environ et qu'en ayant subit exactement les mêmes retraitements, les 999 autres lignes ne posent pas de problème.
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Sans doute dû à des erreurs d'arrondi. Mais comme en plus du verrouillage du code tu as supprimé toutes les formules difficile d'en dire plus.
    Par curiosité affiche la fenetre d'execution et :
    sub test
    Debug.print Range("V587").Value - 777.4
    end sub


    Il m'indique la valeur : <Hors du contexte>
    Il faut lancer la macro en pas à pas.

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Pour info, avec le pas à pas détaillé j'ai :

      Watch : : Range("V587").Value : 777,4 : Variant/Double : Module5.Macro1

      Par contre, après exécution de la macro, la MsgBox affiche toujours "NON".... Je comprend pas.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ok.
      Et que lis-tu comme valeur si tu fais ce que je t'ai indiqué ???
      Tu verras que ce n'est pas 0 et qu'il faut donc arrondir lorsque tu fais ton test.

      eric
      0
    3. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Je suis désolé je n'ai pas compris comment ouvrir une fenêtre d'exécution... Si j'écris ton code et j'exécute la macro, il ne se passe rien...
      0
    4. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Erreur de compilation, incorrect dans le volet d'exécution.
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      je n'ai pas compris comment ouvrir une fenêtre d'exécution...
      Menu Affichage ou Ctrl+G
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Pardon, j'ai oublié de déverrouiller les VISUAL BASIC...

    Voici le fichier déverrouillé : https://www.cjoint.com/c/EGpg1bU356f

    Cordialement.
    0
  7. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Voici le code intégral. Mais qui ne marchera pas dans le fichier joint car il prend en compte des éléments confidentiels.

    Sub TRAITEMENT_TVA()
    
    If Range("A2").Value <> "" Then
    MsgBox ("Procéder d'abord à la mise en forme du Grand Livre")
    Exit Sub
    End If
    
    If Range("A15") = "" Then
        If Range("A16") = "" Then
            If Range("A17") = "" Then
                MsgBox ("Cliquez d'abord sur INDICATION PAYS")
                Exit Sub
            End If
        End If
    End If
    
    
    Dim I As Long, DL As Long, ERREUR As Boolean, BOITE As Boolean
        
        DL = Range("B65536").End(xlUp).Row
        
        For I = 15 To DL
        
      If Sheets(1).Range("D" & I) = "BNP" Then
      BOITE = True
      Sheets(1).Rows(I).Interior.Color = RGB(255, 255, 0)
      
    End If
    Next I
    
    If BOITE = True Then MsgBox1 = MsgBox("Voulez-vous controler les lettrages? (surlignage jaune)", vbYesNo, "Contrôle du lettrage")
        
    If MsgBox1 = vbYes Then Exit Sub
    
    If MsgBox1 = vbNo Then
              
      For I = 15 To DL
    
    Sheets(1).Rows(I).Interior.ColorIndex = xlColorIndexNone
    
    Next I
           
    End If
    
    
    Dim Rollback As Integer
    
    If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then
            For I = 13 To DL
                If Sheets(1).Range("D" & I) = "RAN" Then
                    Sheets(1).Range("B" & I).Select
                    retval = MsgBox("La facture suivante (tiers : " & Range("B" & I) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits")
                    If retval = vbNo Then Sheets(1).Range("N" & I) = ""
                    If retval = vbYes Then
                        Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I)
                        Rollback = I
                    ElseIf retval = vbNo Then Rollback = I
                    ElseIf retval = vbCancel Then
                        If MsgBox("Faite ok pour revenir à la facture : (tiers : " & Range("B" & Rollback) & " )  ou cancel pour annuler", vbOKCancel, "Confirmer le choix") = vbOK Then
                             I = Rollback - 1
                            Sheets(1).Range("N" & Rollback) = ""
                         Else
                                Exit For
                         End If
                    End If
                End If
            Next I
        End If
          
    Set O1 = Sheets(1)
    Set O2 = Sheets("INTRACOM 19,6")
    Set O3 = Sheets("FRANCE 19,6")
    
    
    TC1 = O1.Range("A1:K" & O1.Cells(Application.Rows.Count, 1).End(xlUp).Row)
    TC2 = O2.Range("A1:K" & O2.Cells(Application.Rows.Count, 1).End(xlUp).Row)
    TC3 = O3.Range("A1:K" & O3.Cells(Application.Rows.Count, 1).End(xlUp).Row)
    
    For K = 15 To UBound(TC1, 1)
        T1 = CStr(TC1(K, 1)) & "/" & CStr(TC1(K, 2)) & "/" & CStr(TC1(K, 3)) & "/" & CStr(TC1(K, 4)) & "/" & CStr(TC1(K, 5)) & "/" & CStr(TC1(K, 6)) & "/" & CStr(TC1(K, 10)) & "/" & CStr(TC1(K, 11))
        For m = 1 To UBound(TC3, 1)
        T3 = CStr(TC3(m, 1)) & "/" & CStr(TC3(m, 2)) & "/" & CStr(TC3(m, 3)) & "/" & CStr(TC3(m, 4)) & "/" & CStr(TC3(m, 5)) & "/" & CStr(TC3(m, 6)) & "/" & CStr(TC3(m, 10)) & "/" & CStr(TC3(m, 11))
            If T1 = T3 Then Sheets(1).Range("R" & K) = Round(Sheets(1).Range("K" & K).Value / 1.196, 2)
        Next m
    Next K
    
    For I = 15 To UBound(TC1, 1)
        T1 = CStr(TC1(I, 1)) & "/" & CStr(TC1(I, 2)) & "/" & CStr(TC1(I, 3)) & "/" & CStr(TC1(I, 4)) & "/" & CStr(TC1(I, 5)) & "/" & CStr(TC1(I, 6)) & "/" & CStr(TC1(I, 10)) & "/" & CStr(TC1(I, 11))
        For j = 1 To UBound(TC2, 1)
        T2 = CStr(TC2(j, 1)) & "/" & CStr(TC2(j, 2)) & "/" & CStr(TC2(j, 3)) & "/" & CStr(TC2(j, 4)) & "/" & CStr(TC2(j, 5)) & "/" & CStr(TC2(j, 6)) & "/" & CStr(TC2(j, 10)) & "/" & CStr(TC2(j, 11))
            If T1 = T2 Then Sheets(1).Range("P" & I) = Sheets(1).Range("K" & I)
        Next j
    Next I
    
       
     For I = 15 To DL
             
    If Sheets(1).Range("B" & I) <> "" Then
        If Sheets(1).Range("D" & I) = "ACH" Then Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I)
        If Sheets(1).Range("A" & I) = "FRANCE" Then
            If Sheets(1).Range("R" & I) = "" Then
                 If Sheets(1).Range("N" & I) = "" Then Sheets(1).Range("S" & I) = Round(Sheets(1).Range("K" & I) / 1.2, 2)
            End If
        End If
        If Left(CStr(Sheets(1).Range("B" & I).Value), 3) = "403" Then
            Sheets(1).Range("S" & I) = Round(Sheets(1).Range("K" & I) / 1.2, 2)
        End If
        If IsError(Application.VLookup(Sheets(1).Range("A" & I).Value, Sheets("PAYS EUROPE").Range("A1:B200"), 2, 0)) Then
            If Sheets(1).Range("N" & I) = "" Then
                If Left(CStr(Sheets(1).Range("B" & I).Value), 3) <> "403" Then Sheets(1).Range("O" & I) = Sheets(1).Range("K" & I)
            End If
        End If
        If Sheets(1).Range("N" & I) = "" Then
            If Sheets(1).Range("O" & I) = "" Then
                If Sheets(1).Range("P" & I) = "" Then
                      If Sheets(1).Range("R" & I) = "" Then
                            If Sheets(1).Range("S" & I) = "" Then Sheets(1).Range("Q" & I) = Sheets(1).Range("K" & I)
                      End If
                End If
            End If
        End If
        If Sheets(1).Range("R" & I) <> "" Then Sheets(1).Range("T" & I) = Round(Sheets(1).Range("R" & I) * 0.196, 2)
        If Sheets(1).Range("S" & I) <> "" Then Sheets(1).Range("U" & I) = Round(Sheets(1).Range("S" & I) * 0.2, 2)
        If Sheets(1).Range("P" & I) <> "" Then Sheets(1).Range("W" & I) = Round(Sheets(1).Range("P" & I) * 0.196, 2)
        If Sheets(1).Range("Q" & I) <> "" Then Sheets(1).Range("X" & I) = Round(Sheets(1).Range("Q" & I) * 0.2, 2)
    
    End If
    
    If Sheets(1).Range("K" & I) <> "" Then
    Sheets(1).Range("V" & I) = Sheets(1).Range("N" & I) + Sheets(1).Range("O" & I) + Sheets(1).Range("P" & I) + Sheets(1).Range("Q" & I) + Sheets(1).Range("R" & I) + Sheets(1).Range("S" & I) + Sheets(1).Range("T" & I) + Sheets(1).Range("U" & I)
    
    End If
    
    Next I
    
    
    With Sheets(1).Range(Cells(15, 14), Cells(DL, 24))
        .NumberFormat = "#,##0.00"
        .HorizontalAlignment = xlRight
    End With
    
    
    !!!!! ERREUR = False 'Intégration d'une variable Boolean
    For I = 15 To DL
        If Sheets(1).Range("V" & I) - Sheets(1).Range("K" & I) <> 0 Then
                Sheets(1).Rows(I).Interior.Color = RGB(255, 192, 0)
            ERREUR = True
        End If
    Next I
    If ERREUR = True Then
    MsgBox "Les lignes oranges comportent une erreur, le TTC calculé est différent du TTC du Grande Livre, recommencer le traitement de la TVA"
    Exit Sub
    End If !!!!!
    
    
    Solde_France_196 = InputBox("Solde de la TVA Française à 19,60% en comptabilité?", "TVA France 19,60%")
    Sheets(1).Cells(DL + 6, 20) = Solde_France_196
    With Sheets(1).Cells(DL + 6, 20)
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
        End With
    Cells(DL + 6, 20).NumberFormat = "#,##0.00"
    
    Solde_France_20 = InputBox("Solde de la TVA Française à 20.00% en comptabilité?", "TVA France 20.00%")
    Sheets(1).Cells(DL + 6, 21) = Solde_France_20
    With Sheets(1).Cells(DL + 6, 21)
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
    End With
    Cells(DL + 6, 21).NumberFormat = "#,##0.00"
    
    Solde_Intra_196 = InputBox("Solde de la TVA Intracom. à 19.60% en comptabilité?", "TVA Intracom 19.60%")
    Sheets(1).Cells(DL + 6, 23) = Solde_Intra_196
    With Sheets(1).Cells(DL + 6, 23)
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
    End With
    Cells(DL + 6, 23).NumberFormat = "#,##0.00"
    
    Solde_Intra_20 = InputBox("Solde de la TVA Intracom. à 20.00% en comptabilité?", "TVA Intracom 20.00%")
    Sheets(1).Cells(DL + 6, 24) = Solde_Intra_20
    With Sheets(1).Cells(DL + 6, 24)
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
    End With
    Cells(DL + 6, 24).NumberFormat = "#,##0.00"
    
    
    End Sub


    (Désolé pour la longueur)

    Pour mettre en évidence la partie du code qui bug, j'ai mis "!!!!!" devant et à la fin.

    Merci d'avance.
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Je viens de comprendre que mes conversions du type NumberFormat = "#,##0.00" m'avait pourrit la plupart de mes codes de comparaison.....
      0
  8. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    remplacez la ligne en défaut par
        If Round(Sheets(1).Range("V" & I), 2) - Round(Sheets(1).Range("K" & I), 2) <> 0 Then

    Cdlt
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Ok bien vu ça marche. J'ai vraiment honte de ne pas avoir pensé à la fonction Round, que ça me serve de leçon.

      Merci beaucoup de votre précieuse aide et désolé pour le temps perdu pour pas grand chose.

      Cordialement.
      0