Comparaison avec 1 boucle VBA
Résolu/Fermé
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
12 août 2014 à 21:06
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 13 août 2014 à 19:13
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 13 août 2014 à 19:13
A voir également:
- Comparaison avec 1 boucle VBA
- Comparaison million milliard - Accueil - Technologies
- Vba range avec variable ✓ - Forum VB / VBA
- Find vba - Astuces et Solutions
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Mkdir vba ✓ - Forum VB / VBA
8 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
13 août 2014 à 13:42
13 août 2014 à 13:42
Bonjour,
Essaies :
On peut simplifier :
Essaies :
Option Explicit Sub ArrondiSup_Calc() Dim DerLi As Long Dim MyRange As Range Dim K As Long Dim X As Double DerLi = Range("B" & Rows.Count).End(xlUp).Row Set MyRange = Worksheets("feuil1").Range("B3:B" & DerLi) For K = 3 To DerLi X = 10 * Range("B" & K).Value If X - Int(X) > 0 Then Range("C" & K).Value = Int(X + 1) / 10 Else Range("C" & K).Value = Int(X) / 10 End If Next End Sub
On peut simplifier :
For K = 3 To DerLi X = 10 * Range("B" & K).Value Range("C" & K).Value = Int(X + IIf(X - Int(X) > 0, 1, 0)) / 10 Next
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
13 août 2014 à 14:52
13 août 2014 à 14:52
Il s'agit d'un problème de précision des calculs, voici un exemple typique :
Sub Test() MsgBox 1.1 - 0.1 - 1 End Sub
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
13 août 2014 à 00:48
13 août 2014 à 00:48
Bonjour,
Au lieu de
Utilises
Au lieu de
If Range("B" & k).Value > (i - 0.1) Then
Utilises
If Range("B" & k).Value >= i Then
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 13/08/2014 à 09:43
Modifié par ezor le 13/08/2014 à 09:43
Bonjoir et merci pour ta reponse
J'ai déjà essayé le >=. Mais ça ne regle pas mon problème qui n'apparait que pour les valeurs 0.9 et 1.
Pour tiutes les autres ça marche bien
(2,1 reste à 2,1 et 1,91 passe bien à 2 par exemple)
de plus, si je rajoute une ligne
alors les 1 sont bien tranformés en 1 mais ils apparaissent encore differement dans un TCD par rapport aux 1 qui sont issus de valeurs arrondis (ancinement 0,96 par exemple)
J'espere que j'arrive à être clair.
Encore merci pour ton aide
PS : avec la fonction =ARRONDI.SUP, c'est les valeurs 0.3 et 1.2 qui me posent problème en faisant apparaître deux lignes dans le TDC, les 0.3 anciennement 0.3 et les 0.3 qui proviennent de valeurs arrondies (anciennement entre 0.2001 et 0.29999)
J'ai déjà essayé le >=. Mais ça ne regle pas mon problème qui n'apparait que pour les valeurs 0.9 et 1.
Pour tiutes les autres ça marche bien
(2,1 reste à 2,1 et 1,91 passe bien à 2 par exemple)
de plus, si je rajoute une ligne
Elseif range("b" & k).value = 1 then range("c" & k).value = 1
alors les 1 sont bien tranformés en 1 mais ils apparaissent encore differement dans un TCD par rapport aux 1 qui sont issus de valeurs arrondis (ancinement 0,96 par exemple)
J'espere que j'arrive à être clair.
Encore merci pour ton aide
PS : avec la fonction =ARRONDI.SUP, c'est les valeurs 0.3 et 1.2 qui me posent problème en faisant apparaître deux lignes dans le TDC, les 0.3 anciennement 0.3 et les 0.3 qui proviennent de valeurs arrondies (anciennement entre 0.2001 et 0.29999)
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 13/08/2014 à 14:45
Modifié par ezor le 13/08/2014 à 14:45
Bonjour Patrice33740
Merci beaucoup, ça a l'air de très bien fonctionner !
Je cherche à comprendre ce qui donnait des erreurs dans mon code maintenant, parce que ça me semble assez étrange que toutes les valeurs donnent quelques chose de correct sauf deux ou trois, et même avec la fonction excel ARRONDI.SUP.
Peut être est-ce parce que ton code est plus "propre" et moins compliqué que le mien
Je vais maintenant pouvoir tenter de gérer le cas où une des cellules que je traites contiens du texte...
En tout cas encore merci
ezor
Merci beaucoup, ça a l'air de très bien fonctionner !
Je cherche à comprendre ce qui donnait des erreurs dans mon code maintenant, parce que ça me semble assez étrange que toutes les valeurs donnent quelques chose de correct sauf deux ou trois, et même avec la fonction excel ARRONDI.SUP.
Peut être est-ce parce que ton code est plus "propre" et moins compliqué que le mien
Je vais maintenant pouvoir tenter de gérer le cas où une des cellules que je traites contiens du texte...
En tout cas encore merci
ezor
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
13 août 2014 à 15:18
13 août 2014 à 15:18
Je me doutais bien que ça venait de quelques chose comme ça. Merci (je n'avais même pas pensé à tester avec un MsgBox la valeur renvoyée...)
Si ça ne te dérange pas de répondre encore à une de mes questions (naïves?) : y connais tu un moyen dans les options excel ou dans le code vba, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ?
Sinon ce n'est pas bien grave tu m'as déjà bien aidé ;)
Si ça ne te dérange pas de répondre encore à une de mes questions (naïves?) : y connais tu un moyen dans les options excel ou dans le code vba, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ?
Sinon ce n'est pas bien grave tu m'as déjà bien aidé ;)
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
13 août 2014 à 18:34
13 août 2014 à 18:34
Re,
«connais tu un moyen dans les options excel, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ?» Oui :
Option / Calcul / Calcul avec la précision au format affiché
Sinon tu peux aussi utiliser la fonction ARRONDI(Nombre, Nombre de décimales)
«connais tu un moyen dans le code vba, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ? » Oui et non !!!
Comme dans les feuilles Excel, tu peux arrondir les valeurs, évite la fonction Round() et utilises plutôt celle-ci : fonction Arrondi()
Cependant, avec tous les nombres décimaux (Double, Single, Currency, Decimal et Date) il y aura toujours une incertitude (infiniment petite) liée à la précision de calcul comme le msgbox ci dessus.
«connais tu un moyen dans les options excel, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ?» Oui :
Option / Calcul / Calcul avec la précision au format affiché
Sinon tu peux aussi utiliser la fonction ARRONDI(Nombre, Nombre de décimales)
«connais tu un moyen dans le code vba, pour limiter le nombre de chiffre après la virgule (et ainsi éviter ce genre de problème) ? » Oui et non !!!
Comme dans les feuilles Excel, tu peux arrondir les valeurs, évite la fonction Round() et utilises plutôt celle-ci : fonction Arrondi()
Cependant, avec tous les nombres décimaux (Double, Single, Currency, Decimal et Date) il y aura toujours une incertitude (infiniment petite) liée à la précision de calcul comme le msgbox ci dessus.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
13 août 2014 à 19:09
13 août 2014 à 19:09
Bonjour,
Je sais que la fonction ARRONDI.SUP existe mais elle ne me permet pas de faire un tableau dynamique croisé après.
(en effet il y a des doublons. Exemple, si j'ai 2.05 et 2.1, les deux sont arrondis à 2.1 mais dans le TDC, j'ai deux cases 2.1, l'une correspondant à l'ancien 2.05 et l'autre à l'ancien 2.1)
Très étrange, j'ai testé et as réussi à avoir le pb.
Que ça ne t'empêche pas d'apprendre vba ;-)
Plus simple (à tester) :
eric
Je sais que la fonction ARRONDI.SUP existe mais elle ne me permet pas de faire un tableau dynamique croisé après.
(en effet il y a des doublons. Exemple, si j'ai 2.05 et 2.1, les deux sont arrondis à 2.1 mais dans le TDC, j'ai deux cases 2.1, l'une correspondant à l'ancien 2.05 et l'autre à l'ancien 2.1)
Très étrange, j'ai testé et as réussi à avoir le pb.
Que ça ne t'empêche pas d'apprendre vba ;-)
Plus simple (à tester) :
Sub Arrondi() Dim lig As Long For lig = 2 To Cells(Rows.Count, 2).End(xlUp).Row Cells(lig, 2) = Application.RoundUp(Cells(lig, 2), 1) Next lig End Sub
eric
ezor
Messages postés
177
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
13 août 2014 à 19:13
13 août 2014 à 19:13
Décidément tu as réponse à tout !
Je vais tester ces deux cas, je verrai bien. encore merci pour le code fonctionnel.
Je vais tester ces deux cas, je verrai bien. encore merci pour le code fonctionnel.