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 ligne par macro


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 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut [Résolu] suppression de ligne par macro
    bonjours a tous,

    Dans le cadre de mon travail, je doit importer des données issue d'un appareil sous excel afin de simplifier la lecture des resultats.

    l'importation des données ne pose pas de probleme, c'est au niveau de la suppression de certaine ligne

    voila ce que j'ai apres l'import

    32060 5.1395 19.1000
    32060 2.0130 5.1395 19.1000
    32101 7.8334 19.1000
    32101 99.5000 7.8334 19.1000
    32102 6.8843 19.1000
    32102 55.8000 6.8843 19.1000
    32215 6.7672 18.9000
    32215 266.4000 6.7672 18.9000
    32223-1 8.1260 18.8000
    32223-1 273.3000 8.1260 18.8000
    32223-2 7.9688 18.8000
    32223-2 651.0001 7.9688 18.8000
    32204 7.2002 19.0000
    32204 437.000 7.2002 19.0000
    comme vous le remarquer il y a des lignes qui se repetent. Je souhaiterai supprimer la premiere ligne de chaque doublon, mais sans supprimer tous les doublon.( Dans le rapport importer il y a des info importante qu' il faut garder absolument qui se repete tout au long du listing).

    comment faire ??

    voici le code que j'utilise pour le moment
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    Sub tac()
    '
     
     
     
        Columns("F:S").Select
        Selection.Delete Shift:=xlToLeft
        Columns("A:D").Select
        Range("D1").Activate
        Selection.Delete Shift:=xlToLeft
        Cells.Select
        Cells.EntireColumn.AutoFit
        Range("A1:A200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("B1:C200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("D1:E200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("F1:G200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("H1:I200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("J1:K200").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
     
     
       Dim I    As Long
    Dim plage As Range
    Set plage = Range("C2:E" & Range("E200").End(xlDown).Row)
    For I = plage.Cells.Count To 1 Step -1
      If plage.Cells(I).Value = "ml" Then
        plage.Cells(I).EntireRow.Delete
     
      End If
     
      Dim F    As Long
    Dim plageF As Range
    Set plageF = Range("C2:F" & Range("F200").End(xlDown).Row)
    For F = plage.Cells.Count To 1 Step -1
      If plage.Cells(F).Value = "" Then
        plage.Cells(F).EntireRow.Delete
     
      End If
     
     
    Next
        Range("A1:K200").Select
            For Each Rw In Selection.Rows
            If Rw.Row / 2 = Int(Rw.Row / 2) Then
            Rw.Interior.ColorIndex = 15
            Else
            Rw.Interior.ColorIndex = 19
            End If
            Next Rw
     
     
    End Sub
    merci par avance pour votre aide

  2. #2
    Membre éclairé Avatar de Djohn
    Profil pro
    Inscrit en
    Février 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 309
    Par défaut
    salut stefano,

    qu'appelles tu " des lignes qui se répetent" ?
    je ne voie aucune ligne strictement identique

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il est plus simple de supprimer les lignes en commençant du bas et en remontant les lignes.

    Voici un code qui supprime les "premiers" doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SupprimerLignes()
        Dim Ligne As Long
        Dim i As Long
     
        Ligne = Range("a" & Rows.Count).End(xlUp)(0).Row
        For i = Ligne To 2 Step -1
            If Range("a" & i).Value = Range("a" & i + 1) Then Range("a" & i).EntireRow.Delete
        Next i
    End Sub
    J'ai nettoyé de toute la mise en forme. Je te conseille de découper tes différentes actions (suppression, mise en forme du cadre, ...) en petites procédures faciles à tester et à débuguer.

    Cela étant, si à chaque import, tu importes un doublon (où alors les données citées ne sont pas exemplatives de la vraie situation de ton fichier), pourquoi ne pas d'abord supprimer les lignes, puis importer les nouvelles?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    bonjours et merci pour vos reponses

    pour Djohn , c'est dans la 1ere colone qu'il y a des doublons

    Pour Pierre Fauconnier

    D'apres ce que tu me donne, cela efface la 2eme ligne mais le probleme c'est que c'est celle là qu'il me faut puisqu'elle reprend la premiere plus des info suplementaire.

    Sinon, pour ce qui est de modifier directement a la source, serait effectivement la meilleur des solutions, mais occasionnerai dans mon service une perte de temps trop importante. Le listing represente environs 100 lignes dans les meilleur jours.

    Merci dans tous les cas a tous les 2 pour votre aide, car en VB j'avoue je suis nul

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ben, chez moi, cela efface la première, étant entendu que je considère que les lignes sont remplies de haut en bas.

    Pour ce qui est de supprimer les lignes avant import, il ne s'agit pas de le faire manuellement, mais par macro.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    salut,

    Je retenterai demain au travail la macro quetu m'as donné.
    Pour la suppression avant l'import c'est pas possible, le logiciel de l'appareil est vraiment mal fichu et tres peu intuitif.
    Le fichier d'export est a la base un fichier texte avec une extention a 2 balles et excel n'est pas installer sur l'appareil.

    merci quand meme pour l'idée

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

Discussions similaires

  1. [XL-2003] Ajout de lignes par macro Excel dans word
    Par fb62840 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/09/2012, 11h39
  2. [XL-2010] Suppression de lignes par segment de contenu dans une case.
    Par Anto_NEX dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/06/2012, 10h42
  3. [XL-2003] Suppression de lignes par masques & doublons
    Par microb76 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/06/2012, 10h50
  4. Suppression de ligne par une case à cocher
    Par adam974 dans le forum Langage
    Réponses: 15
    Dernier message: 09/01/2009, 15h55
  5. Supprimer ligne par macro
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/09/2007, 11h36

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