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 :

[EXCEL] Mise en évidence des doublons 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 éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [EXCEL] Mise en évidence des doublons dans une colonne
    Bonjour à tous,

    J'essaye désesperement de mettre en évidence tous les doublons d'une même colonne...

    J'ai, bien sur, essayé avec deux boucles for, mais mon fichier peut atteindre 60000 lignes et là, ça commence à être vraiment long...

    Je m'échine, depuis ce matin, à faire ça avec un find dans une boucle for mais je n'y arrive pas.

    Comment faire un find en ôtant la cellule actuelle ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    tu utilises deux colonnes supplémentaire
    la première ordre
    avec pour contenu=ligne()
    tu sélectionnes la colonne ordre édition copier édition collage spécial valeur
    tu peux désormais demander le tri de ta table sur la colonne dans laquelle tu cherches les doublons
    dans la deuxième colonne nommé nbdoubl
    tu places 1 dans la première cellule
    dans la seconde tu tapes la formule =SI(A6=A5;C5+1;1)
    qui va augmenter de 1 sur les doublons
    tu sélectionnes la colonne nbdoubl édition copier édition collage spécial valeur
    tu demandes le tri décroissant de nbdoul
    tu peux remettre tes champs en place à l'aide de ordre

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour random,

    Merci pour ta réponse mais je n'ai pas la possibilité de faire des manips sur le fichier Excel, tout doit se faire en VBA.

    J'ai trouvé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For i = 2 To nbLigne
            Set c = ActiveSheet.Range("I" + CStr(i + 1) + ":I" + CStr(nbLigne)).Find(what:=ActiveWorkbook.Sheets(1).Cells(i, 9).Value, LookIn:=xlValues)
            If Not c Is Nothing Then
               addErr "DOUBLON: Ligne:" + CStr(i) + " sur " + ActiveWorkbook.Sheets(1).Cells(i, 9).Value
            End If
        Next i
    Mais malheureusement, c'est encore trop long... Pas moyen d'optimiser ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    tu peux tester cette procédure qui liste les doublons et indique combien de fois ils apparaissent dans la colonne A


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
    Option Base 1
     
    Sub listeDoublons()
        Dim Plage As Range
        Dim Tableau(), Resultat() As String
        Dim i As Long, j As Long, m As Long
        Dim Un As Collection
        Dim Doublons As String
     
        Set Un = New Collection
        'La plage de cellules à tester
        Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row)
     
        Tableau = Plage.Value
        ReDim Preserve Resultat(2, 1)
     
        On Error Resume Next
        'boucle sur la plage à tester
        For i = 1 To Plage.Count
            'Utilise une collection pour rechercher les doublons
            '(les collections n'acceptent que des données uniques)
            Un.Add Tableau(i, 1), Tableau(i, 1)
     
            'S'il y a une erreur (donc presence d'un doublon)
            If Err <> 0 Then
     
                'boucle sur le tableau des doublons pour verifier s'il a deja
                'été identifié
                For j = 1 To m + 1
                    'Si oui , on  incrément le compteur
                    If Resultat(1, j) = Tableau(i, 1) Then
                        Resultat(2, j) = Resultat(2, j) + 1
                        Err.Clear
                        Exit For
                    End If
                Next j
     
                    'Si non, on ajoute le doublon dans le tableau
                    If Err <> 0 Then
                        Resultat(1, m + 1) = Tableau(i, 1)
                        Resultat(2, m + 1) = 1
     
                        m = m + 1
                        Err.Clear
                        ReDim Preserve Resultat(2, m + 1)
                    End If
            End If
        Next i
     
        '----- Affiche la liste er le nombre de doublons --------
        For j = 1 To m
            Doublons = Doublons & Resultat(1, j) & "-->" & _
                        Resultat(2, j) & vbCrLf
        Next j
     
        MsgBox Doublons
    End Sub

    il faudra bien sur l'adapter pour 60000 lignes ...


    michel

  5. #5
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour SilkyRoad,

    Je suis étonné de voir qu'il n'y a pas plus simple.

    C'est dommage que ta solution ne retourne pas le numéro de la ligne...
    J'ai réussi à faire quelque chose qui donne le même résultat que toi et qui est assez rapide:
    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.Sheets(2).Range("A:A").Clear
        ActiveWorkbook.Sheets(1).Activate
        Cells(1).Activate
        nbLigne = ActiveCell.CurrentRegion.Rows.Count
        ActiveWorkbook.Sheets(1).Range("I2:I" + CStr(nbLigne)).Copy ActiveWorkbook.Sheets(2).Range("A1")
        ActiveWorkbook.Sheets(2).Range("A1").Sort Key1:=ActiveWorkbook.Sheets(2).Columns("A")
        ActiveWorkbook.Sheets(2).Activate
        nbErr = 0
        ReDim tabErr(10)
        For i = 1 To nbLigne
            str2 = ActiveSheet.Cells(i, 1).Value
            If str = str2 Then
               VIN_addErr "DOUBLON sur: " + str2
            End If
            str = str2
        Next i
    En fait, je copie et trie la colonne sur une autre feuille (un peu la réponse de random, mais en VBA).
    Je ne trouve pas ça très "propre", mais je n'ai pas mieux.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonjour

    Je suis étonné de voir qu'il n'y a pas plus simple.
    je n'ai pas prétendu que ma solution était la plus simple ...;o)


    C'est dommage que ta solution ne retourne pas le numéro de la ligne...
    Tu ne l'avais pas demandé...rien ne t'empèche de créer un tableau multidimensionnel pour intégrer les numéros de lignes ...



    michel

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2015, 11h46
  2. Réponses: 2
    Dernier message: 10/10/2013, 15h35
  3. [AC-2003] Gérer des doublons dans une importation Excel
    Par Perce le vent dans le forum Modélisation
    Réponses: 3
    Dernier message: 19/08/2009, 18h59
  4. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15
  5. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27

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