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 lignes avec 1 condition [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut Supprimer lignes avec 1 condition
    Bonjour
    Cette macro supprime toutes les lignes vides, comment faire pour supprimer toutes les lignes dont la cellule en colonne A n'est pas un nombre.
    Si c'est un nombre = ne pas supprimer
    Si c'est du texte = supprimer

    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
    Sub SupprLignesVides()
        ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
        Application.ScreenUpdating = False
        ' désactiver les alertes pour empêcher l'affichage
        ' des messages du genre "Voulez-vous etc."
        Application.DisplayAlerts = False
     
        ' se placer sur la dernière ligne contenant des données
        Range("A65536").End(xlUp).Select
        Do
            If IsEmpty(ActiveCell) Then
                ActiveCell.EntireRow.Delete
            End If
            ActiveCell.Offset(-1, 0).Select
        Loop Until ActiveCell.Row = 1
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Sub
    Merci pour l'astuce

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    En utilisant isnumeric cela devrait faire ce que tu souhaites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if isnumeric(Range("A" & i).value then
    'supprimer
    end if

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If VarType(ActiveCell) = vbString Then
    PPz

  4. #4
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour jfontaine, ton code bloque sur 'isnumeric' j'ai essayé de mettre 'ConstrainNumeric' c'est idem

    Bonjour PPz78, ton code fonctionne mais il reste des lignes à supprimer dont les cellules en col A sont vides mais dont les autres col ne sont pas vides, de plus je n'arrive pas à supprimer la première ligne dont la col A est en texte malgré que je change 'Loop Until ActiveCell.Row = 1' par 'Loop Until ActiveCell.Row = 0' car bloque si je mets un zéro

    Merci



    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
    Sub SupprLignesSaufNombreColA()
        ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
        Application.ScreenUpdating = False
        ' désactiver les alertes pour empêcher l'affichage
        ' des messages du genre "Voulez-vous etc."
        Application.DisplayAlerts = False
     
        ' se placer sur la dernière ligne contenant des données
        Range("A65536").End(xlUp).Select
        Do
            'If IsEmpty(ActiveCell) Then
     
            'If IsNumeric(Range("A" & i)).Value Then
     
     
            If VarType(ActiveCell) = vbString Then
                ActiveCell.EntireRow.Delete
            End If
            ActiveCell.Offset(-1, 0).Select
        Loop Until ActiveCell.Row = 1
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Sub

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    salut

    si tu as de nombreuses lignes susceptibles d'être ainsi supprimées, tu auras peut-être intérêt à constituer une plage des dites lignes et à les supprimer toutes à la fois (d'un seul coup et sans te préoccuper de le faire de bas en haut ou de haut en bas).
    La méthode Union te le permet et devrait t'intéresser (tu nous as exposé être débutant et elle est donc à apprendre).

    Ainsi (exemple que j'ai commenté pour toi) :
    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
     
      Dim derlig As Integer, c As Range, jeter As Range
      'on détermine le rang de dernière cellule remplie dans la colonne A (derlig)
      derlig = Range("A:A").SpecialCells(xlCellTypeLastCell).Row
      'on traite la plage de A1 à la ligne derlig de la colonne A
      For Each c In Range("A1:A" & derlig) ' pour chaque cellule de cette plage :
        If Not IsNumeric(c.Value) Or IsEmpty(c) Then ' si ni un numérique ou si vide :
          'si la plage jeter est encore inexistante, on la crée avec la cellule trouvée
          'si elle existe déjà, on lui ajoute la cellule trouvée
          If jeter Is Nothing Then Set jeter = c Else Set jeter = Union(jeter, c)
        End If
      Next
      jeter.EntireRow.Delete ' on supprime d'un seul coup toutes les lignes de la plage jeter
      If Not jeter Is Nothing Then Set jeter = Nothing ' on détruit (en mémoire) la plage jeter
      Set c = Nothing ' on détruit (en mémoire) la plage c
    Dans le code plus haut : note la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(c.Value) Or IsEmpty(c) Then
    elle considère toutes les cellules contenant du texte ou étant vides.
    Si tu souhaites ne considérer que celles coàntenant du texte et ne pas également supprimer les vides, remplace-la par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(c.Value) Then
    Voilà
    En analysant attentivement ce code, tu commenceras à t'ouvrir d'autres horizons intéressants et dont tu auras l'occasion de te servir plus d'une fois.

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    désolé, il manquait une parenthese

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNumeric(Range("A1").Value) Then
     
        MsgBox "numerique"
     
    End If

  7. #7
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    jfontaine, ton code fonctionne que si la première ligne contient un nombre dans la col A, et là il supprime tout même les cellules nombre en col A et ne garde que la première ligne.
    Merci
    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
    Sub SupprLignesSaufNombreColA()
        ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
        Application.ScreenUpdating = False
        ' désactiver les alertes pour empêcher l'affichage
        ' des messages du genre "Voulez-vous etc."
        Application.DisplayAlerts = False
     
        ' se placer sur la dernière ligne contenant des données
        Range("A65536").End(xlUp).Select
        Do
            'If IsEmpty(ActiveCell) Then
     
            If IsNumeric(Range("A1").Value) Then
     
           ' If VarType(ActiveCell) = vbString Then
                ActiveCell.EntireRow.Delete
            End If
            ActiveCell.Offset(-1, 0).Select
        Loop Until ActiveCell.Row = 1
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Sub

  8. #8
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour
    J'ai rajouté la suppression de la première ligne au code de PPz78 et fait qu'il n'y a pas de cellules vides en col A avec des cellules non vides sur les autres col de la même ligne, c'est pas très pro, mais ça marche très bien comme ça.
    Merci PPz78 et jfontaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Range("A1").Select

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

Discussions similaires

  1. Masquer des lignes avec une condition
    Par mjp06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/03/2019, 19h23
  2. [XL-2007] Supprimer lignes avec 2 conditions
    Par Bernard67 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/05/2011, 15h43
  3. Copier des lignes avec une condition
    Par gliglian dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/02/2009, 00h06
  4. supprimer ligne avec macro textbox
    Par lilou86 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/04/2008, 14h07
  5. Supprimer lignes avec doublons avec 2 conditions
    Par dan-12 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/03/2008, 09h44

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