IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comparaison de valeurs calculées et lues. [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Par défaut Comparaison de valeurs calculées et lues.
    Bonjour à tous

    Je vais essayer d'être le plus clair possible sans joindre mon fichier excel.

    Mon objectif est de créer une macro pour nettoyer une base de données des éventuelles répétitions de valeurs.

    J'ai donc programmé une boucle qui compare une à une les valeurs des différentes cellules avec la moyenne des x cellules précédentes (fonction average) et qui supprime s'il le faut la valeur de la cellule.

    Le hic c'est que cette macro fonctionne bien pour une partie du classeur mais pas partout. Il reste des pavés de cellules identiques.

    J'ai donc lancé la macro en pas à pas jusqu'à une cellule problématique et en passant ma souris sur les valeurs comparées dans les lignes de code (cellule et moyenne) je vois que bien que celles ci soient égales. En gros à la question 10.18 = 10.18 ? excel me répond NON.

    En allant voir dans le tableau, je ne vois pas de différence entre les cellules (pas d'espace, même format, même nombre de chiffres)...

    Pour information, le noyau de la macro est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Dim i As Integer
    Dim j As Integer
     
    j = 1
     
    While j <= nb_colonne
     
    i = nb_ligne
     
    While i > tolérance
     
    Set plage = Range(Cells(i - tolérance, j), Cells(i - 1, j))
    Dim moy As Double
     
    moy = WorksheetFunction.Average(plage)
     
    If Cells(i, j) = moy Then Cells(i, j) = ""
     
    End If
     
    i = i - 1
     
    Wend
     
    j = j + 1
     
    Wend
    En espérant avoir été assez clair, je vous remercie de l'attention que vous portez à mon problème.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Salut,

    Essaye en remplaçant la ligne 17
    If Cells(i, j) = moy Then Cells(i, j) = "" par
    If (Abs(Cells(i, j) - moy) < 0.0001) Then Cells(i, j) = "".

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Par défaut
    Merci du tuyau ca marche nickel.

    Je ne sais pas où excel avait été chercher des précisions au 10 000ème, peut être à cause de la fonction average...

    Résolu

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Le problème vient du fait que lorsque tu utilise l'opérateur d'égalité sur un nombre réel,
    il faut que tous les bits qui représentent ce nombre soient égaux (pas seulement au "10 000ème")
    Or la représentation binaire du résultat d'une opération sur des nombres réels, diffère selon la méthode de calcul employée.
    (très légèrement, mais suffisamment pour que les nombres ne soient par strictement égaux)

    Exemple de sujet illustrant le problème : decimales-illogiques-eratiques-calculs-triviaux

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comparaison de valeur sur un résultat de requete
    Par griese dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2006, 15h23
  2. Affichage dynamique d'une valeur calculée
    Par harley dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 09h20
  3. [PHP-JS] Affichage d'une valeur calculée
    Par harley dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2006, 09h39
  4. comparaison de valeurs
    Par Flobynaldo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2006, 16h56
  5. Comparaison de valeurs stockees dans un meme champ
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/02/2006, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo