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 :

Macro pour effacer lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut Macro pour effacer lignes
    Bonjour,

    J'ai un tableau excel dans lequel j'ai dans la colonne A des lignes avec des dates et des lignes avec de infos diverses.
    Je souhaiterai à partir d'une macro, supprimer toutes les lignes que ne correspondent pas à une date.
    Pouvez vous m'aider.
    Merci par avance de vos lumières.

    Didj

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 103
    Par défaut
    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
    Sub MySub()
     
        Dim MyGroup As Range
        Dim MyElement As Range
        Dim MaBorneDébut as string
        Dim MaBorneFin as string
     
        MaBorneDébut ="$A$1"
        MaBorneFin      ="$A$9"
     
        Set MyGroup = Range(MaBorneDébut & ":" & MaBorneFin)
     
        For Each MyElement In MyGroup
        If IsDate(MyElement.Value)=False Then MyElement.EntireRow.Delete
        Next
     
    End Sub
    Je me suis beaucoup amusé à le faire...
    Les variables MaBorne permettrons de délimiter la recherche au stricte nécessaire. L'utilisation d'une borne "$A:$A" engendre un long temps de traitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NBdeLignes = Application.WorksheetFunction.CountIf(Range("A:A"), "<>")
    Le code ci-dessus indiquera le nombre de lignes non vides de la colonne A. Utile pour déterminer au plus juste la borne de fin.

  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

    Attention. Quand on supprime des lignes, il faut toujours commencer par le bas, sinon on loupe le test sur la ligne qui suit celle qui est supprimée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Effacer()
        Dim MaDate As Date
        Dim i As Long
     
        MaDate = DateSerial(2008, 1, 5)
     
        For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
            If Cells(i, 1).Value <> MaDate Then Rows(i & ":" & i).Delete
        Next
    End Sub
    "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 confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Rows.Count, 1).End(xlUp).Row
    Comment dire ... Je savais même pas que ça pouvait exister ...
    Avant de donner des conseils aux autres, je ferais mieux de continuer à apprendre.

    L'alternative que je propose à mon propre code est plus longue à programmer donc moins bonne...

    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
        Dim MyGroup As Range
        Dim MyElement As Range
        Dim MaBorneDébut As String
        Dim MaBorneFin As String
        Dim JeContinue As String
     
        JeContinue = "OUI"
     
        MaBorneDébut = "$A$1"
        MaBorneFin = "$A$100"
     
        Set MyGroup = Range(MaBorneDébut & ":" & MaBorneFin)
     
        Do While JeContinue = "OUI"
        For Each MyElement In MyGroup.Rows
            Select Case IsDate(MyElement.Value)
                Case False
                    MyElement.EntireRow.Delete
                    JeContinue = "OUI"
                    Exit For
            Case Else
                    JeContinue = "NON"
            End Select
        Next
        Loop
    Bref. Dire que j'étais fier de moi ... Je ne suis pas développeur et ça se voit...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par JMPS.VBA Voir le message
    Comment dire ... Je savais même pas que ça pouvait exister ...
    Avant de donner des conseils aux autres, je ferais mieux de continuer à apprendre.
    Justement, c'est en se penchant sur le cas des autres qu'on apprend le plus.

    A tester (j'ai la flemme...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim derniere_ligne As Integer, ligne As integer
    derniere_ligne = Cells(Rows.Count,1).End(xlUp).Row
    For ligne = derniere_ligne To 1 Step -1
        If Cells(ligne,1).Value<>MaDate Then Rows(ligne).Delete xlUp
    Next

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut Ca ne fonctionne pas
    Pierre,

    Ca ne fonctionne pas ! ca m'éfface toutes les lignes sauf la première.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Bonjour didjo,

    Moi j'utilise le code suivant pour supprimer des lignes, je pars de la première, c'est ptet une erreur dans certains car mais ça fonctionne pas mal sur mes fichiers :

    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
     
     
    i = # de ta ligne ou tu veux commencer
     
    While (FICHIER.Range("A" & i).Value <> "")
        If Cells(i,  # Collone) <> TA CONDITION DATE Then
            Rows(i).EntireRow.Delete
     
    ' Donc si la condition est remplis ou pas remplis suivant ce que tu veux tester, tu supprimes la ligne et ça n'incrémente pas " i " de façon à re-tester la même ligne.    
     
     Else
        i = i + 1
     
        End If
    Wend
     
    'Ici comme la condition n'était pas remplis, on incrémente " i " et la ligne du dessus ne sera pas supprimée.
    Voilà ! @+

Discussions similaires

  1. [XL-2010] MACRO pour compter lignes renseignées d'une feuille sans tenir compte du filtrage auto
    Par langeard dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2012, 18h06
  2. Macro pour effacer différentes cellules dans un tableau avec bouton.
    Par seigneurchris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/06/2011, 21h15
  3. Code VbA pour effacer ligne d'un tableau
    Par carottemémé dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2011, 07h09
  4. [XL-2003] exécuter une macro pour chaque ligne.
    Par visto94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2010, 13h48
  5. Macro pour figure, ligne horizontale, marges autour des images
    Par gentilemathieu dans le forum Programmation (La)TeX avancée
    Réponses: 1
    Dernier message: 25/02/2007, 14h36

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