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 :

suppression des lignes qui se répètent


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut suppression des lignes qui se répètent
    Bonjour,

    Je voudrais créer une macro qui permette de supprimer automatiquement les mots (et la ligne entière qui en découle) qui se répettent plusieurs fois dans une même colonne.

    J'ai pensé à cet algorithme détaillé, mais je ne réussis pas à le faire fonctionner sous Excel, pourriez-vous m'aider s'il vous plaît? :

    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
    Dim i As Integer
    Dim j As Integer
    Dim chaine1 As String
    Dim chaine2 As String
     
    i = 1
    do
     
    J = i
    Chaine1 = (A, i). Select, 
     	do 
    	J = J+1
                 ''rechercher selection : quand mot = selection, sélectionner la ligne  entière puis supprimer
                 Chaine2 = (A, j). Select, 
                 If Chaine2=chaine1
                 Then Rows.Select
       	selection.delete
                 while J < 81
     
    While I < 82

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    J'ai une erreur de syntaxe sur : Chaine1 = (A , j). Select...
    Pourtant j'ai bien défini le "chaine1" en string, donc le contenu de la cellule devrait pouvoir être affecté à "chaine"...

    Merci d'Avance pour votre aide

  3. #3
    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 : 61
    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 linooo

    c'est difficile de faire un code en aveugle. et je ne comprends pas trop ton code

    je vais neanmoins essayé, Controle d'égalité sur la colonne A, j'estime que le fichier est deja trié

    Deja une boucle de suppression de ligne ne va pas de 1 à X mais le contraire car quand tu supprime la ligne 3, la 4 devenant 3 ne sera pas traitée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub sup_lignes()
    dim i as long 
    for i = Range("A65536").end(xlup).row to 2 step -1 ' Je pars de la fin vers le haut
    if Range("A" & i).value = Range("A" & (i-1)).value then range("A" & i).entirerow.delete
    next i
    end sub

    bonne soirée
    Wilfried

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bonjour wilfried_42,

    Je te remercie pour ton programme qui marche parfaitement.
    Le seul soucis, c'est que je doive faire un tri juste avant.

    Ne serait-il pas possible de rajouter une variable, afin de comparer les cellules lorsqu'elles ne sont pas triées?

    J'ai pensé à un programme qui permette de supprimer le contenu des cellules sans supprimer les lignes (elles seront supprimer qu'à la fin).

    Par contre, je pense avoir un souci avec ma boucle, car cela m'affiche le message d'erreur suivant : "while sans wend". Je fait très rarement de VBA, je connais mal l'architecture des boucles...

    Merci d'avance,

    (Mon code ci-dessous)

    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
    Dim i As Integer
    Dim j As Integer
    Dim o As Integer
     
     
     
    i = 1
    Do
        j = i
          Do
            j = j + 1
            If Range("A" & i).Value = Range("A" & j).Value Then Range("A" & j).Delete
            While j < 81
     
    While i < 82
     
    For o = Cells(82, 1).End(xlUp).Row To 1 Step -1
    If Cells(o, 1).Value = "" Then Cells(o, 1).EntireRow.Delete
    Next o
     
     
    End Sub

  5. #5
    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 : 61
    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
    re:

    une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While i<82
    .
    .
    .
    .
    Wend
    une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Do while i<82
    .
    .
    .
    .
    .
    loop
    une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Do
    .
    .
    .
    .
    .
    Loop Until i = 83
    Bonne journée
    Wilfried

  6. #6
    Expert éminent sénior

    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
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Tu peux tester cette procédure pour supprimer les doublons dans la plage A1:A10, sans appliquer de tri préalable.


    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
    Option Explicit
    Option Base 1
     
    Sub SupprimeDoublons_A1A10()
    Dim Plage As Range, Cell As Range
    Dim Un As New Collection
    Dim Tableau() As Integer
    Dim x As Integer
     
     
    Set Plage = Worksheets("Feuil1").Range("A1:A10")
     
    For Each Cell In Plage
        On Error Resume Next
        'création d'une collection unique (sans doublons)
        Un.Add Cell, CStr(Cell)
     
        'Une erreur survient si l'element existe dans la collection
        'La procédure enregistre le numéro de ligne correspondant
        'dans un tableau.
        If Err.Number <> 0 Then
            x = x + 1
            ReDim Preserve Tableau(x)
            Tableau(x) = Cell.Row
        End If
    Next Cell
     
     
    If x = 0 Then Exit Sub
     
    Application.ScreenUpdating = False
     
    'boucle sur le tableau pour supprimer les lignes correspondant
    'aux doublons.
    For x = UBound(Tableau) To LBound(Tableau) Step -1
        Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
    Next x
     
    Application.ScreenUpdating = True
    End Sub

    michel

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup wilfried_42 pour l'architecture des boucles, j'ai pu faire marcher mon programme

    Sinon, je te remercie SilkyRoad, je vais aller tester ton code, je pense qu'il est plus efficace que le mien qui prend un peu de temps à s'exécuter...

    Merci à tous les deux, bonne journée et à bientôt

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

Discussions similaires

  1. Suppression des lignes qui n'ont pas la plus grande valeur
    Par Oberown dans le forum Développement
    Réponses: 5
    Dernier message: 21/12/2012, 17h40
  2. [XL-2003] Suppression de lignes qui contiennent des mots d'une liste
    Par fortbelin dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/09/2011, 16h47
  3. [Word] Suppression des lignes d'un tableau
    Par sat478 dans le forum VBA Word
    Réponses: 2
    Dernier message: 06/09/2006, 15h22
  4. suppression des ligne ds une table
    Par roger.pouamoun dans le forum Oracle
    Réponses: 6
    Dernier message: 28/07/2006, 13h00
  5. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 15h50

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