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 :

Supprimer les lignes en double


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut Supprimer les lignes en double
    Je ne sais pas si c'est bien ce que je fais mais tan pis


    J'ai une méthode pour supprimer les doublons.
    Comme Alain, il faut que la colonne A soit triée et qu'il n'y ai pas de cellule vide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = Range("A1").End(xlDown).Row To 1 Step -1
        If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
            Rows(i).Delete
        End If
    Next i
    Niveau temps de traitement, je sais pas trop laquelle est la plus rapide

  2. #2
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 103
    Points
    103
    Par défaut solution éventuelle
    bonjour,

    en général quand j'ai des doublon et des trous dans ma colonne, je classe d'abords par ordre alphabétique la colonne , je compte le nombre de ligne et je fais une boucle pour enlever les doublons. si ensuite tu veux plus de trou, tu peux reclasser par ordre alphabétique.
    Si tu as plusieures colonne dépandantes, tu peux étendre ton trie,
    Voilà un exemple de macro qui peux fonctionner:

    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
    Sub effacer_bdoublon()
     
    '
    'pour enlever les trous, on classe d'abords la colonne par ordre alphabétique ou inverse
    'au départ, dans ma feuille il y avé 17 ligne, en fait il faudré d'abords compter les lignes
     
    Range("A1:C17").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
     
    'on compte nombre de ligne
    nb_ligne = 1
    While Cells(nb_ligne, 1) <> ""
        nb_ligne = nb_ligne + 1
    Wend
     
    'on enlève les doublons:
    For i = 2 To nb_ligne
        If Cells(i, 1) = Cells(i - 1, 1) Then
            Rows(i & ":" & i).Select
            Selection.Delete Shift:=xlUp
        End If
    Next i
     
    End Sub
    c peut être un peu long, avec moi pourkoi faire simple kan on peut faire compliqué. J'espère ke ca pourra t'aider, kom on m'a aidé aujourd'hui.


  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Pour des chaînes quelconques
    Je vous pose ici un petit code qui permet de rechercher les doublons alors qu'on ne peut pas les réorganiser (nécessité de garder un historique, listing de différent modèles d'article classés selon un autre critère que leur référence...) Il n'est pas beaucoup plus long que les autres mais peut-être un peu plus lent. A vous de juger !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub doublon()
        Worksheets("mafeuill").Activate
        Dim Cel1 As Range
        Dim Cel2 As Range
        For Each Cel1 In Worksheets("mafeuill").Range("I1", Range("I1").End(xlDown).offset(-1,0))
            For Each Cel2 In Worksheets("mafeuill").Range(Cel1.Offset(1, 0), Range("I1").End(xlDown))
                If Cel1.Value = Cel2.Value Then
                    Cel2.entirerow.delete
                End If
            Next
        Next
    End Sub

    Voilà !
    Ce code n'utilise pas particulèrement le code Excel mais il m'a bien servi !

    Az

  4. #4
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    bonjour à tous

    une seule ligne et pas de boucle pour supprimer toutes les lignes d'une feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("A1:A" & Sheets(1).Range("A65535").end(xlup).row).EntireRow.Delete
    et une autre methode pour supprimer les doublons, sans trier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        For i = 1 To Range("A65535").End(xlUp).Row
            If Range("A" & i).Value > "" Then
                If Application.WorksheetFunction.CountIf(Range("A1:A" & Range("A65535").End(xlUp).Row), _
                    Range("A" & i).Value) > 1 Then Range("A" & i).EntireRow.Delete: i = i - 1
            End If
        Next i


    Bonne journée

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par wilfried_42
    bonjour à tous

    une seule ligne et pas de boucle pour supprimer toutes les lignes d'une feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("A1:A" & Sheets(1).Range("A65535").end(xlup).row).EntireRow.Delete
    Hello wilfried
    Ce n'est pas le sujet de discussion. En outre, pour effacer les données d'une feuille,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("LaFeuille").Cells.clear
    me paraît plus simple et plus radical
    Teste ton code avec ta feuille remplie, colonne A vide, et dis-nous ce qu'il se passe

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par illight Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = Range("A1").End(xlDown).Row To 1 Step -1
        If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
            Rows(i).Delete
        End If
    Next i
    Si tu fais ça, quand tu arrives à la ligne 1 et que tu fais Cells(i - 1, 1) tu as Ligne = 0 => Erreur
    Pas grave, suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Range("A1").End(xlDown).Row To 2 Step -1
    Juste en passant

    Chuis l'seul à l'avoir vu heu !

    Edit
    Si tu as une donnée en majuscules et les doublons dans une casse différente, ces derniers ne sont pas systématiquement supprimés.
    (je pense aux listes de noms saisis manuellement dont, souvent, la casse diffère ligne après ligne )

  7. #7
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Si tu fais ça, quand tu arrives à la ligne 1 et que tu fais Cells(i - 1, 1) tu as Ligne = 0 => Erreur
    Pas grave, suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Range("A1").End(xlDown).Row To 2 Step -1
    Juste en passant

    Chuis l'seul à l'avoir vu heu !

    Edit
    Si tu as une donnée en majuscules et les doublons dans une casse différente, ces derniers ne sont pas systématiquement supprimés.
    (je pense aux listes de noms saisis manuellement dont, souvent, la casse diffère ligne après ligne )

    A ce moment, tu rajoute un Instr mon cher Dodo (pour des chaines de caractères, je sais pas si ça marche pour des nombres, je pense pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = Range("A1").End(xlDown).Row To 2 Step -1
        If instr(1,Cells(i, 1).Value,Cells(i - 1, 1).Value,vbTextCompare) <> 0 Then
            Rows(i).Delete
        End If
    Next i
    Et toc

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ça ne marchera toujours pas si dans une cellule tu as en partie le contenue de celle que tu compares. Je reprends ton code :
    Dans la cellule A5 j'ai "Le tonton de mon cousin" et dans la cellule A12, j'ai "Le tonton de mon cousin est mon papa !"
    Avec ton code, tu effaces le ligne 12 ! Et retoque !

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Heuu non puisque c'est 2 cellules qui ne se suivent pas. Mon cvas ne marche qu'après avoir fait un tri sur la colonne

    Ton exemple, tu me dis que c'est en A5 et en A12, ce ne sont pas 2 cellules qui se suivent ??

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Seulement si elles se suivent après le tri, tu effaces la seconde. Et puis n'insiste pas, tu as tort !

Discussions similaires

  1. Supprimer les lignes en double dans un fichier texte
    Par SilkyRoad dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/05/2017, 15h09
  2. Supprimer les lignes en double d'un fichier csv
    Par info help dans le forum Débuter
    Réponses: 17
    Dernier message: 12/04/2012, 01h07
  3. Réponses: 14
    Dernier message: 22/09/2011, 16h11
  4. Réponses: 2
    Dernier message: 04/05/2006, 13h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 14h01

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