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 de lignes [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Par défaut Suppression de lignes
    Classeur4.xlsx

    Bonjour,

    Je cherche à supprimer des lignes en doublons. Jusque là c'est "très" simple.
    Le problème que je rencontre est que les lignes identifiées en doublons et qui doivent être supprimées sont celles qui n'ont jamais de date(s) renseignée(s) entre les colonnes A et D... je veux par contre conserver les lignes avec des dates.
    Avez vous des idées?

    ci-joint le fichier sans code.
    Ci-après mon code source:

    merci de votre aide!!

    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
    Option Explicit
    Option Base 1
     
     
    Sub SupprimeDoublons()
    Dim Plage As Range, Cell As Range
    Dim Un As Collection
    Dim Tableau() As Long
    Dim x As Integer
     
     
    Set Un = New Collection
     
    Set Plage = Worksheets("Feuil1").Range("E1:E12")
     
    For Each Cell In Plage
        On Error Resume Next
        'Alimente la collection de données sans doublons.
        Un.Add Cell, CStr(Cell)
     
        'Une erreur survient si l'élément 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
            Cell(x, x).Select
        End If
    Next Cell
     
     
    'On sort de la procédure s'il n'y a pas de doublons.
    If x = 0 Then Exit Sub
     
    'Permet de figer l'écran pendant la suppression des lignes.
    Application.ScreenUpdating = False
     
    'boucle sur le tableau pour supprimer les lignes contenant les doublons.
     
    For x = UBound(Tableau) To LBound(Tableau) Step -1
     
            Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
     
    Next x
     
    Application.ScreenUpdating = True
    MsgBox "Terminé."
     
    Set Un = Nothing
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,
    doivent être supprimées sont celles qui n'ont jamais de date(s) renseignée(s) entre les colonnes A et D
    Tu peux ajouter une condition avant la suppression de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For x = UBound(Tableau) To LBound(Tableau) Step -1
        If IsDate(Range("A" & Tableau(x) )) or IsDate(Range("B" & Tableau(x))) or IsDate(Range("C" & Tableau(x))) or IsDate(Range("D" & Tableau(x))) then Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
     
    Next x

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Par défaut
    merci de ta réponse rapide.
    En effet, mais j'ai testé et cela me supprime les lignes avec des dates alors qu'il faut que je parvienne à supprimer la ligne en doublon qui elle n'a pas de date.
    En gros, si j'ai deux lignes identiques sans date = il me supprime une des deux (n'importe laquelle)
    Si j'ai deux lignes identiques:
    - Une avec une ou plusieurs date sur la plage A
    - Une sans date
    ==> je conserve celle qui a des dates.
    [EDIT] sachant que je peux avoir trois ou quatre lignes en doublons et que je veux toujours conserver celles qui ont des dates..

    J'ai testé également cela mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Range("A" & Tableau(x))) = "" And (Range("B" & Tableau(x))) = "" And (Range("C" & Tableau(x))) = "" And (Range("D" & Tableau(x))) = "" Then Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
    Ce code me supprime les lignes dans l'ordre...
    As-tu d'autres idées?
    merci encore..

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    j'ai testé et cela me supprime les lignes avec des dates
    J'ai oublié le not ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For x = UBound(Tableau) To LBound(Tableau) Step -1
        If not(IsDate(Range("A" & Tableau(x) )) or IsDate(Range("B" & Tableau(x))) or IsDate(Range("C" & Tableau(x))) or IsDate(Range("D" & Tableau(x)))) then Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
     
    Next x
    J'ai testé sur une plage test sans le tableau des doublons ça ne me supprime bien que les lignes sans date

    J'ai testé également cela mais sans succès:

    If (Range("A" & Tableau(x))) = "" And (Range("B" & Tableau(x))) = "" And (Range("C" & Tableau(x))) = "" And (Range("D" & Tableau(x))) = "" Then Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
    Pourtant ce code m'a l'air correct, tu devrais faire afficher le résultat de chaque test dans le log (ex: debug.print Range("B" & Tableau(x))) = "" ) et en mode pas à pas vérifier chaque condition pour comprendre d'où vient le problème.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Par défaut
    Effectivement avec not cela fonctionne.
    Il me reste un dernier problème, c'est que le code me supprime les lignes en doublon sans dates situées après la ligne qui a des dates.. Toutes celles avant ne sont pas supprimées.
    Je continue de faire des essais.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Peut être un problème avec ton tableau de doublons ?
    Je n'ai pas regardé comment tu le construit.
    Tu es sur d'avoir toutes tes lignes dedans ?

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

Discussions similaires

  1. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27
  2. Suppression de lignes dans un fichier
    Par bubu dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 10h36
  3. Dbgrid : Comment interdire Suppression de Ligne
    Par Francis dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2004, 08h31
  4. Réponses: 4
    Dernier message: 02/07/2004, 19h14
  5. [VB.NET] Suppression de ligne dans un DataTable
    Par seemax dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/05/2004, 14h19

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