Erreur de soustraction en VBA
Résolu
Kuartz
Messages postés
852
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voilà, je fais une opération simple en VBA :
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 :
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...
Y-a-t-il un moyen de tester tout ça? Je suis débutant en VBA...
Merci d'avance.
Cordialement.
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.
A voir également:
- Erreur de soustraction en VBA
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur t32 ✓ - Forum Livebox
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur 0x80070643 - Accueil - Windows
7 réponses
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
L'espion est Sheets(1).Range("V587").Value
Il m'indique la valeur : <Hors du contexte>
Type : Variant / Empty
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...
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...
Mon fichier.
https://www.cjoint.com/c/EGnpcFPUYaf
Cordialement.
https://www.cjoint.com/c/EGnpcFPUYaf
Cordialement.
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.
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.
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 :
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pardon, j'ai oublié de déverrouiller les VISUAL BASIC...
Voici le fichier déverrouillé : https://www.cjoint.com/c/EGpg1bU356f
Cordialement.
Voici le fichier déverrouillé : https://www.cjoint.com/c/EGpg1bU356f
Cordialement.
Voici le code intégral. Mais qui ne marchera pas dans le fichier joint car il prend en compte des éléments confidentiels.
(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.
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.
Bonjour
remplacez la ligne en défaut par
Cdlt
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