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 :

recherche de doublons


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut recherche de doublons
    Bonjour,

    Je fais une macro qui recherche les doublons sur une colonne et supprime la ligne du doublon.
    Ma macro semble fonctionner, par contre je l'ai fait tourner toute la nuit, il n'a toujurs pas fini.
    J'avais 17000 lignes au départ, il m'en reste moins de 10000
    Il doit y a avoir un pb dans mon code qui fait qu'il prenne autant de temps.
    Pouvez vous m'aider ?
    Voici le code :
    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
     
    Sub Rechercher_doublons()
     
     
    Dim Val
    Dim DerniereLigne
    Dim depart
    Dim i
     
    ' ouverture du fichier
    Workbooks.Open Filename:="C:\Users\admin\Desktop\Dim\test1.xls"
     
     
     
    MsgBox ("début de la boucle")
    Application.DisplayAlerts = False
     
    ' Parcours de la boucle
    i = 2
    Do
     DerniereLigne = Range("A1").End(xlDown).Row
        val1 = "E" & i
        depart = Range(val1).Value
        'MsgBox (val1)
     
         For j = 3 To DerniereLigne
     
    Val = "E" & j
    'MsgBox ("Range(val) vaut ") & Range(Val).Value
    If depart = Range(Val).Value Then
    ecrire_dans_Fichier (depart)
    ' supprimer ligne
    Rows(j).Delete
    ActiveWorkbook.Save
    DerniereLigne = DerniereLigne - 1
    i = i + 1
     
    End If
     
    Next j
     
     
    Loop Until depart = ""
     
     
    MsgBox ("fin de la boucle")
     
    End Sub
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 25
    Par défaut
    Bonjour,
    Essaye sans sauvegarder ton classeur à chaque suppression de ligne tu devrais gagner pas mal de temps !
    Dans tous les cas sache que les interactions entre le classeur excel et VBA sont toujours très lentes, si tu as besoin d'un programme très rapide (entre 2 et 3 secondes) la méthode serait de :
    - charger ta colonne sans doublon grâce à l'objet VBA de type dictionnaire
    - effacer toute ta colonne
    - afficher le dictionnaire à la place
    Si tu n'as pas besoin de performance tu peux garder ta méthode qui donne un résultat similaire !

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Par défaut
    1 ) si tu veux garder l'ordre de tes lignes au départ, ajoute une colonne pour numéroter tes lignes. Tu pourras faire un tri sur cette colonne à la fin

    2 ) tu fais un tri pour ordonner la colonne à vérifier

    3) tu fais une boucle pour incrémenter tes lignes (for i = 1 to nbligne)

    4 ) dans cette boucle tu compares cells(i,colonne).value à cells(i+1, colonne).value, si la valeur est égale alors tu supprime la ligne et tu décrémentes i de 1 (i=i-1)

    5) à la fin tu tri sur ta colonne ajoutée pour retrouver l'ordre original de ton tableau et tu efface la colonne ensuite.

    6) tu enregistres ton fichier

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    Bonjour,

    Je teste tout ça et je vous tiens au courant

    Merci

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ci-joint un code à adapter à ton cas
    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
    Dim Wbk As Workbook
    Dim LastLig As Long, i As Long
     
    Application.ScreenUpdating = False
    Set Wbk = Workbooks.Open("C:\Users\admin\Desktop\Dim\test1.xls")
     
    With Wbk.Sheets("Feuil1")                           'adapte le nom de la feuille
        LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = LastLig To 3 Step -1
            If Application.CountIf(.Range("E2:E" & i - 1), .Range("E" & i).Value) > 0 Then .Rows(i).Delete
        Next i
    End With
    Wbk.Save
    Wbk.Close
    Set Wbk = Nothing

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/11/2005, 14h24
  2. Recherche de doublons "non strict"
    Par Oluha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/01/2005, 09h21
  3. [VBA] Algo de recherche de doublons
    Par guams dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/07/2004, 17h10
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. Réponses: 2
    Dernier message: 19/08/2003, 18h04

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