VB excel : opérations

Goufra

XLDnaute Occasionnel
Bonsoir,
J'ai 2 lignes de codes qui ne fonctionnent pas.

Je n'arrive pas à trouver la raison de cette anomalie.

Merci de bien vouloir m'apporter votre concours
Dans l'attente je vous souhaite une bonne soirée
Goufra
 

Pièces jointes

  • Goufra.xlsm
    20.8 KB · Affichages: 64
  • Goufra.xlsm
    20.8 KB · Affichages: 68
  • Goufra.xlsm
    20.8 KB · Affichages: 66

Jam

XLDnaute Accro
Re : VB excel : opérations

Bonjour Gouffra,

Plusieurs choses:
Utiliser les références entre [] n'est pas très recommandé. Il vaut mieux utiliser la forme Range("G49").value.
Il faut déclarer les variables, surtout pour effectuer des comparaisons et des calculs. Ce point est très important.

Le problème vient du fait mode de calcul. Si tu regardes en mode debug le contenu des variables, tu constateras que celles-ci apparaissent comme correctes et donc que l'erreur n'en semble pas une.
Oui...et bien non. Un processeur fait très souvent des "erreurs" de calcul. Parfois il arrive que 1+1 ne fasse pas pas 2 mais 2,000000000000000000000000000001. Ca ne se voit pas mais pour le moteur de calcul si !
Fais juste une petite expérience: valide juste chaque chiffre en G, I, J 49 en faisant {F2} puis {entrée}. Relance ton code et...miracle plus d'erreur !
Bref, pour éviter ce type d'anomalie de calcul surtout avec des chiffres de type nombre flottant il vaut mieux utiliser les arrondis (cela sera d'autant plus vrai si tu calcules la TVA au lieu de la rentrer en dur)

VB:
If Round((Range("G49").Value + Range("I49").Value), 2) <> Round(Range("J49").Value, 2) Then MsgBox "Pb 3 J49"

Bon courage

Salut Sousou, modeste
 
Dernière édition:

Goufra

XLDnaute Occasionnel
Re : VB excel : opérations

Merci à vous.

Modeste geedee , tu as raison ça fonctionne.
Toutefois je ne comprends pas les cellules de la ligne concernée sont formatés de la même manière, en nombre.

Jam, .
2 points dans ce cas précis:
Les cellules concernées, sont formatées avec 2 chiffres après la virgule l'arrondi ne devrait donc pas jouer.

Dans le fichier d'origine, trop lourd à envoyer, les variables sont déclarées.
Je vais donc travailler à comprendre ta réponse notamment le debug que je n'ai jamais utilisé.
Encore merci et à très bientôt
Goufra
 

Goufra

XLDnaute Occasionnel
Re : VB excel : opérations

Bonsoir,
Soussou,
1.1 Effectivement F2 et Entrée effectuée simultanément cellule après cellule sur la ligne , l'erreur disparait.
Bref,
J'ai essayé de trouver des explications concernant l'emploi simultané de ces 2 touches. Je n'ai rien trouvé dans les forums.Je constate qu'effectuer une saisie globale des 3 cellules concernées est sans résultat, l'erreur persiste.


1.2 Remarque :
- l'erreur concerne la vérification de la première ligne ;
- la preuve concerne 3 nombres ayant 2 chiffres après la virgule ;
- la 2ème ligne, présence d'un nombre avec 3 chiffres après la virgule, pas d'erreur pour cette ligne !
1.3 Il est plus rapide d'utiliser les crochets [] que range() . C''est pourquoi j'utilise en permanence les crochets.
C'est la première fois que je rencontre ce type de problème.

2. J'ai essayé (sans succès) d'appliquer le code suivant :
For Each c In Range("g49:j51").Cells
c.Select
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Next​
L'erreur subsiste.

Un constat, ce code :
- ouvre l'explorateur d'objets dans visual basic;
- désactive/active la touche VerNum .
Peut-être convient-il de compléter le code ?
3/ Dans l'application que je développe j'effectue mes calculs avec sum product et sum. Parfois je me sers de tableaux, tabl () pour les multiplications voire les additions ect …

Je suppose que je dois intégrer la fonction round ?

En corolaire la fonction "arrondi "doit-elle être utilisée si j'effectue les calculs sans utiliser de macros.
As-tu une explication pour F2/Entrée

J'ai conscience d'être "insistant" mais j'aimerais bien comprendre.

Je joins un nouveau fichier.

Avec mes remerciements anticipés, bonne soirée .
goufra
 

Pièces jointes

  • 3 Pretest.xlsm
    21.1 KB · Affichages: 62

Jam

XLDnaute Accro
Re : VB excel : opérations

Salut Goufra,

Les cellules concernées, sont formatées avec 2 chiffres après la virgule l'arrondi ne devrait donc pas jouer.

Le formatage, comme son nom l'indique sert à présenter l'information au format d'affichage qui convient. Cela ne veut pas dire que l'information est transformée. Il convient donc de la traiter comme telle, et non sous son aspect visuel.

Je suppose que je dois intégrer la fonction round ?

Effectivement, je te le conseille fortement.

En corolaire la fonction "arrondi "doit-elle être utilisée si j'effectue les calculs sans utiliser de macros.

Oui, c'est indépendant des macros.

As-tu une explication pour F2/Entrée

Si le calcul est "incorrect" alors faire édition/entrée ne change en règle générale rien au résultat du calcul effectué par Excel.

Bon courage
 

Goufra

XLDnaute Occasionnel
Re : VB excel : opérations

Mon cher JAM, j'ai beau chercher, mon incompréhension grandie ...

Ci-joint unn fichier comprenant un extrait de mon travail en cours : 4 onglets, à savoir 3 onglets et la copie de l'un d'entre eux.

Un constat sur l'ensemble des onglets, un bug dans 2 cellules :
- de l'onglet Facpage2
- et de sa copie, bien évidemment, l'onglet" copiefacpage2"

Il s'agit des cellules G59 et I59.
Dans g59, le chiffre 0.39 suivi de 12 zéros et de 1.
Dans I59, le chiffre 0.08 suivi de 13 zéros et de 1.

1. Le Module 1 est associé à l'onglet " facpage2"
Il s'exécute sans que les Msgbox, concernant les preuves, affichent un message d'erreur.

2. Le module 2, copie du Module 1, est associé à la copie :" CopieFacPage2".
Toutefois ligne 151 j'ai rajouté ce bout de code, il concerne la plage G58:I60 de"copiefacpage2".

For Each c In Range("restedu")
Modif = Round(c.Value, 2)
c.Value = Modif
next

Conséquences :
- Les zéros suivis du 1 ne sont plus présents. J'ai 0.39 et 0.08.
- Un bug, dans la preuve concernant la cellule G59, à l'exécution du code ligne 205
Ce bug n'apparaît plus si j'utilise la ligne 206 à la place de la ligne 205.

3. Mon incompréhension.
3.1 module1,Ligne 205, la fonction round() n'est pas utilisée, alors que les cellules G59 et I59 ont un bug.
Logiquement, j'aurais dû obtenir une erreur avec l'affichage de la MsgBox indiquant "Pb G59".

3.2 Module 2, je suis obligé d'utiliser la fonction Round() , ligne 206 au lieu de 205, alors que toutes les cellules sont cleans.

J'avoue que j'aimerais comprendre.
Cela me semble complètement illogique.
Dans l'attente de te remercier et de t'offrir un café ... virtuel.
Bonne soirée
 

Pièces jointes

  • goufra1.xlsm
    107.1 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 895
Messages
2 093 382
Membres
105 713
dernier inscrit
Karimov