Erreur de soustraction en VBA
Résolu/Fermé
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
13 juil. 2015 à 15:42
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 15 juil. 2015 à 10:24
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 15 juil. 2015 à 10:24
A voir également:
- Erreur de soustraction en VBA
- Erreur 0x80070643 - Guide
- Erreur 38 free ✓ - Forum Mobile
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 1004 vba ✓ - Forum Excel
- Vba erreur automation référence future non valide ✓ - Forum Word
7 réponses
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
Modifié par Kuartz le 13/07/2015 à 15:52
Modifié par Kuartz le 13/07/2015 à 15:52
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
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
13 juil. 2015 à 16:33
13 juil. 2015 à 16:33
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...
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
13 juil. 2015 à 17:03
13 juil. 2015 à 17:03
Mon fichier.
https://www.cjoint.com/c/EGnpcFPUYaf
Cordialement.
https://www.cjoint.com/c/EGnpcFPUYaf
Cordialement.
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
13 juil. 2015 à 17:58
13 juil. 2015 à 17:58
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
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
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 09:46
15 juil. 2015 à 09:46
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.
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 décembre 2023
7 213
Modifié par eriiic le 14/07/2015 à 00:23
Modifié par eriiic le 14/07/2015 à 00:23
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
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 08:58
15 juil. 2015 à 08:58
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.
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.
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 décembre 2023
7 213
15 juil. 2015 à 09:40
15 juil. 2015 à 09:40
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
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
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 10:10
15 juil. 2015 à 10:10
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...
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 10:13
15 juil. 2015 à 10:13
Erreur de compilation, incorrect dans le volet d'exécution.
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 décembre 2023
7 213
15 juil. 2015 à 10:24
15 juil. 2015 à 10:24
je n'ai pas compris comment ouvrir une fenêtre d'exécution...
Menu Affichage ou Ctrl+G
Menu Affichage ou Ctrl+G
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 08:53
15 juil. 2015 à 08:53
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.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
Modifié par Kuartz le 15/07/2015 à 09:24
Modifié par Kuartz le 15/07/2015 à 09:24
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.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 10:09
15 juil. 2015 à 10:09
Je viens de comprendre que mes conversions du type NumberFormat = "#,##0.00" m'avait pourrit la plupart de mes codes de comparaison.....
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
337
15 juil. 2015 à 09:50
15 juil. 2015 à 09:50
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
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
15 juil. 2015 à 10:16
15 juil. 2015 à 10:16
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.
Merci beaucoup de votre précieuse aide et désolé pour le temps perdu pour pas grand chose.
Cordialement.