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 :

Macro VBA pour comparaison de deux cellules et suppresion d'une ligne si les deux valeurs sont proches


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    geophysicienne
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : geophysicienne

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut Macro VBA pour comparaison de deux cellules et suppresion d'une ligne si les deux valeurs sont proches
    Bonjour,

    j'ai un fichier avec de nombreuses lignes. Dans la colonne A j'ai des valeurs, je voudrais les comparer d'une ligne a l'autre, et supprimer la ligne entière si leur différence est inférieure à 5. C'est un peu une recherche de doublons mais avec une sorte de marge d'erreur. J'ai trouvé un code pour comparer si les nombres sont exactement les mêmes (voir ci-dessous).

    J'ai essayé de remplacer If ActiveCell.Offset(cpt, 0).Value = ActiveCell.Offset(cpt + 1, 0).Value Then par If ActiveCell.Offset(cpt, 0).Value -ActiveCell.Offset(cpt + 1, 0).Value < 5 Then mais cela ne semble pas être la bonne syntaxte.

    Merci de votre aide,
    Tiphaine

    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
    ---------------------------------------------------------------------
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    Dim cpt As Integer
    cpt = 0
     
        Range("A2").Select
        Do While ActiveCell.Offset(cpt, 0).Value <> ""
            If ActiveCell.Offset(cpt, 0).Value = ActiveCell.Offset(cpt + 1, 0).Value Then
                ActiveCell.Offset(cpt + 1, 0).EntireRow.Delete
            Else
                ActiveCell.Offset(1, 0).Range("A1").Select
     
            End If
        Loop
    End Sub
     
    ---------------------------------------------------

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Voici une proposition de code.

    Quand tu veux faire le ménage dans ton fichier, il est plus simple de commence par le bas. De cette manière, les lignes supprimées ne te gènent pas.

    Dans ton code, il manque déjà l'incrémentation du compteur ...

    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
    Sub nettoye()
    Dim derligne As Integer
    Dim ligne As Integer
     
    'on trouve la ligne de la dernière cellule utilisée dans la colonne A
    derligne = Range("A65536").End(xlUp).Row
     
    'on parcourt le tableau du bas vers le haut
    For ligne = derligne To 3 Step -1
        'si l'écart est inférieur à 5
        If Cells(ligne, 1).Value - Cells(ligne - 1) < 5 Then
            'on supprime la ligne
            Cells(ligne, 1).EntireRow.Delete
        End If
     
    Next
    End Sub
    En espérant que cela fasse ce que tu veux.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    geophysicienne
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : geophysicienne

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut
    Bonsoir,

    Merci pour ta réponse. C'est pas encore un Eureka, mais j'avance. Déjà j'avais une incompatibilité mais c’était dû au format standard de la cellule, au format nombre ça marche. Donc oui, cela fait quelquechose mais pas exactement ce que je veux. Il supprime trop de lignes! Notament si la difference est inferieure à 5 mais avec des lignes qui ne sont pas adjacentes. Bon je continue a chercher . Merci quand meme!

    T

  4. #4
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    C'est surement dû à une configuration de lignes de ce type :
    L1 5
    L2 7
    L3 9

    au premier passage XL va comparer le 9 et le 7. du coup il va supprimer la L3
    au deuxieme passage XL va comparer le 7 et le 5. du coup il va supprimer la L2.

    Je ne sais pas si tu as remarque que c'est la ligne du bas qui est virée ???

  5. #5
    Futur Membre du Club
    Femme Profil pro
    geophysicienne
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : geophysicienne

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Par défaut
    Salut Jérôme,

    Non, ce n'est pas ça, car si il supprimait les lignes 2 et 3 dans ton exemple, je suis ok, c'est ce que je veux.

    Voila les lignes que j'ai teste, il supprime les lignes du bas, ca me va, alors je veux qu'il supprime L11/L10/L9, L5 et L3. C'est ce qu'il fait mais il supprime également L7 et L12, et même L4! Je ne comprend pas pourquoi. J'utilise ce que tu m'as proposé, j'ai juste changé Cells(ligne - 1,1), il manquait l'index de colonne.

    L1 799
    L2 1154
    L3 1156
    L4 822
    L5 820
    L6 1025
    L7 465
    L8 1726
    L9 1722
    L10 1722
    L11 1720
    L12 462

    Merci encore de ta réponse.

    Tiphaine

  6. #6
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Et bien ,c'est normal mon capitaine !
    Si on regarde les ligne 3 et 4. On a 822 - 1156 = -334. Et si je ne suis pas mauvais en maths -334 < 5 c'est vrai !

    Du coup, on ajoute un petit coup de valeur absolue et on est bon.

    Ce qui donne :
    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
    Sub nettoye()
    Dim derligne As Integer
    Dim ligne As Integer
     
    'on trouve la ligne de la dernière cellule utilisée dans la colonne A
    derligne = Range("A65536").End(xlUp).Row
     
    'on parcourt le tableau du bas vers le haut
    For ligne = derligne To 3 Step -1
        'si l'écart est inférieur à 5
        If Abs(Cells(ligne, 1).Value - Cells(ligne - 1, 1)) < 5 Then
            'on supprime la ligne
            Cells(ligne, 1).EntireRow.Delete
        End If
     
    Next
    End Sub
    Pour info, j'ai exécuté le code en me mettant dans le module et une petite succession de F8 pour voir comment se passe le déroulement et çà aide ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2014, 13h40
  2. [XL-2003] macro VBA pour imposer signe "-" sur une cellule
    Par cilala dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/09/2010, 00h13
  3. Macro VBA pour mettre colonne en ligne avec cellule fusionnée
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/01/2008, 06h09
  4. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  5. [VBA-E]selectionner la premiere cellule non vide d'une ligne
    Par muse47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2005, 08h11

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