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 deux cellules dans une colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut Comparaison de deux cellules dans une colonne
    Bonjour,
    Débutante en programmation et en VBA, afin d'automatiser la mise en forme de nombreux tableaux à partir d'extraits d'une base de données, j'aimerai effectuer une comparaison de chaque cellule d'une colonne avec toutes les autres cellules puis effacer les valeurs identiques.

    Sur l'exemple joint : sur une colonne aux nombres de lignes variables, rechercher les cellules contenant le même texte et effacer leur contenu soit celui des cellules jaunes, oranges et rouges.
    Nom : COMPARAISON_CEL_et_effacer_texte_01.jpg
Affichages : 110
Taille : 65,7 Ko

    J'ai écrit le code suivant (pour effectuer les vérifications de mon code visuellement, je n'ai pas effacé le texte mais l'ai mis en rouge, mais le problème reste le même) :

    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
        ActiveWorkbook.Worksheets("Feuil2").Select
     
        Dim DerLign As Long
        Dim i As Integer
        'Définition de la dernière ligne de la colonne 1
        DerLign = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
        'Le code suivant fonctionne mais ne tient pas compte des cellules ayant la même valeur, snif !!!
            With Sheets("Tableau_final").Range("A1:A65000")
                For i = 1 To DerLign
                    If Cells(i, "A").Value = Cells(i + 1, "A").Value Then
                    ActiveCell.Interior.Color = RGB(255, 1, 1)
                    End If
                        ' Selection de la cellule du dessous
                        ActiveCell.Offset(1, 0).Select
                Next i
            End With
    Le code fonctionne, mais je ne comprends pas les sélections qu'il effectue :
    Nom : COMPARAISON_CEL_et_effacer_texte_RESULTAT_FAUX_01.jpg
Affichages : 123
Taille : 70,1 Ko

    J'espère avoir été claire dans mes explications.
    Merci pour votre aide
    Bonne journée

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Quand on supprime il faut partir du bas

    Cependant ton exemple interpelle : tu vas supprimer aléatoirement tous les items moins1 sans tenir compte des autres colonnes ?

  3. #3
    Membre averti
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonjour 78chris,
    Merci pour cette réponse rapide.

    En fait, je désire bien "effacer" les textes en doublon dans la col 1 et non supprimer les lignes entières. Il s'agit d'une mise en page et "liste A, liste B... etc" sont des, en quelques sortes des "titres". J'aimerai obtenir ceci avec le code que j'ai envoyer :
    Nom : COMPARAISON_CEL_et_effacer_texte_RESULTAT_VOULU_cod_en_cours01.jpg
Affichages : 90
Taille : 49,7 Ko

    et une fois le code finalisé, ceci :
    Nom : COMPARAISON_CEL_et_effacer_texte_RESULTAT_FINAL_cod_final01.jpg
Affichages : 90
Taille : 58,1 Ko

    En ce qui concerne, "Quand on supprime il faut partir du bas", est-ce que la sélection faites comme ça : DerLign = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row ne prend pas en compte les lignes de la colonnes à partir du bas ?

    Merci

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Sachant qu'une simple MFC permet de masquer la répétition sans empêcher ni tri ni filtre, il n'est pas certain que focaliser sur la présentation soit la meilleure approche...

    Pour répondre, il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = DerLign To 1 step -1
    et adapter en conséquence

  5. #5
    Membre averti
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Re 78Chris,

    Comme c'est mon premier code en VBA, je sèche vite !!!

    "Sachant qu'une simple MFC permet de masquer la répétition sans empêcher ni tri ni filtre, il n'est pas certain que focaliser sur la présentation soit la meilleure approche..."

    Qu'est ce qu'une MFC ? Sûr qu'il doit avoir d'autres solutions pour réaliser le code de façon plus rigoureuse mais je n'ai pas les connaissances pour !!!


    "Pour répondre, il faut utiliser : For i = DerLign To 1 step -1"
    Si je comprends bien effectivement c'est là que l'on commence par la fin : par contre je ne comprends pas "step -1"

    Et puis je ne sais pas adapter car remplaçant seulement mon code par le votre, le résultat n'est pas bon non plus (en fait c'est le même qu'avec mon code puisque je n'ai rien modifié dans le reste du code) !

    Merci pour vos précisions

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    RE

    MFC : Mise en Forme Conditionnelle qui peut masquer simplement la répétition des textes en colonne A

    Si tu effaces des lignes en partant du haut la ligne 2 ayant disparu le ligne 3 devient 2 donc ne sera pas traitée puisqu'on passe à la 3ème qui était auparavant la 4ème

    Un For s'incrémente par défaut avec +1 donc si on part de la fin il faut préciser qu'on utilise -1 pour remonter d'une part, et comparer avec la ligne précédente d'autre part


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Tableau_final").Range("A1:A65000")
    devrait être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Tableau_final") 
    ou mieux
    With Workbooks("NomClasseur").Sheets("Tableau_final")
    et utilsé dans la suite avec les .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                For i = DerLign To 2 step -1
                    If .Cells(i, "A").Value = .Cells(i - 1, "A").Value Then
                     .Cells(i, "A").Interior.Color = RGB(255, 1, 1)
                    End If
                Next i
    Les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        ' Selection de la cellule du dessous
                        ActiveCell.Offset(1, 0).Select
    ne servent à rien à part ralentir le code et expliquent aussi ton problème car tu coloriais la sélection et non la ligne i

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

Discussions similaires

  1. [XL-2013] TCD - faire un pourcentage entre deux cellules dans une même colonne
    Par Pauliakov dans le forum Excel
    Réponses: 10
    Dernier message: 25/08/2017, 14h38
  2. [XL-2010] Comparaison de plusieurs cellules dans une colonne.
    Par Dedelefonfon dans le forum Excel
    Réponses: 6
    Dernier message: 04/10/2016, 12h15
  3. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  4. Requête SELECT avec deux champs dans une colonne ??
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/06/2006, 10h41
  5. [VB6] Comparaison de deux dates dans une requête
    Par paradeofphp dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/06/2006, 19h45

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