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 en VBA si une cellule contient un chiffre [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    conseillé de gestion
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : conseillé de gestion
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Suppression de ligne en VBA si une cellule contient un chiffre
    Bonjour à tous,

    Je suis nouveau sur le forum et je débute en VBA. Voici ma problématique :

    Je souhaite dans une plage de donnée variable supprimer les lignes dont les valeurs de la colonne C sont des chiffres(de 0 à 1 000 000) à partir de la ligne 10.
    Les autres cellules de la colonne C contiennent soit du texte ou elles sont vides la plus part du temps.




    Merci d'avance pour votre aide.

  2. #2
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Salut,
    Tu veux vraiment du vba ? Moi je te propose de mettre une colonne supplémentaire que tu pourras retirer après. Dans celle-ci tu indiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = ISNUMBER (GAUCHE (C2) * 1)
    Ainsi tu auras toutes tes cellules marquées par true ou false. Tu tries et tu effaces tes lignes.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    conseillé de gestion
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : conseillé de gestion
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse. Mais j'ai besoin d'une solution en VBA, c'est une procédure à mettre en place dans mon code...

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par Tomih Voir le message
    Merci pour ta réponse. Mais j'ai besoin d'une solution en VBA, c'est une procédure à mettre en place dans mon code...
    Essaies ce code, pour des nombres, mais pas pour des chiffres (un chiffre c'est du texte qui représente un nombre) :
    Code VBA : 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
    Option Explicit
    Sub Test()
    Dim rngData As Range
      Set rngData = ActiveSheet.Range("C10").CurrentRegion 'à adapter éventuellement
      Call SupprimerLignesSiChiffreEnColonneC(rngData)
    End Sub
    Sub SupprimerLignesSiChiffreEnColonneC(rng As Range)
    Dim col As Range
    Dim noL As Long
      Set col = rng.Parent.Columns("C:C")
      If Intersect(rng, col) Is Nothing Then Exit Sub  'pas de colonne C dans la plage
      noL = rng.Row + rng.Rows.Count - 1
      If noL < 10 Then Exit Sub                        'pas de ligne 10 dans la plage
      Application.ScreenUpdating = False
      For noL = rng.Row + rng.Rows.Count - 1 To 10 Step -1
        If VarType(rng.Parent.Cells(noL, "C").Value) = vbDouble Then
          rng.Rows(noL - rng.Row + 1).Delete shift:=xlShiftUp
        End If
      Next noL
      Application.ScreenUpdating = True
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Futur Membre du Club
    Homme Profil pro
    conseillé de gestion
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : conseillé de gestion
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ton aide ça fonctionne parfaitement !

  6. #6
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Sauf si le test de valeur numérique porte sur le type (Integer, Long..), il y a beaucoup plus simple

    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
    Option Explicit
     
    Sub suppr_nombres()
     
    Dim derl As Integer
     
    With Worksheets(1)
        derl = .Cells(.Rows.Count, 3).End(xlUp).Row
        With .Range("C10:C" & derl)
                .SpecialCells(xlCellTypeConstants, 1).Replace What:="*", Replacement:=""
                .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End With
    End With
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par Tomih Voir le message
    Je souhaite dans une plage de donnée variable supprimer les lignes dont les valeurs de la colonne C sont des chiffres(de 0 à 1 000 000) à partir de la ligne 10.
    Les autres cellules de la colonne C contiennent soit du texte ou elles sont vides la plus part du temps.
    Citation Envoyé par MarcelG Voir le message
    ..., il y a beaucoup plus simple
    Mais ça supprime aussi les lignes des cellules vides !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Patrice,

    Au temps pour moi.
    Astuce : le remplacement se fera alors par une formule retournant une erreur, puis suppression des lignes où la cellule formulée retourne une erreur

    Soit

    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
    Option Explicit
     
    Sub suppr_nombres()
     
    Dim derl As Integer
     
    With Worksheets(1)
        derl = .Cells(.Rows.Count, 3).End(xlUp).Row
        With .Range("C10:C" & derl)
                .SpecialCells(xlCellTypeConstants, 1).Replace What:="*", Replacement:="=3/0"
                .SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
        End With
    End With
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut Patrice,
    Astuce : le remplacement se fera alors par une formule retournant une erreur, puis suppression des lignes où la cellule formulée retourne une erreur
    Quand on est parti avec une idée, c'est difficile de la quitter ...
    Mais si une erreur dans une cellule est peu probable, il n'est pas improbable !

    Pourquoi pas tout simplement et directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Sub suppr_nombres()
    Dim derl As Integer
      With Worksheets(1)
        derl = .Cells(.Rows.Count, "C").End(xlUp).Row
        .Range("C10:C" & derl).SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
      End With
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Tout à fait Patrice. Je voulais corriger mon premier post.

    Mon message était que la suppression de lignes basée sur une valeur de cellule peut dans nombre de cas être gérée par les cellules spéciales.
    Pour ma part, je le fais en 2 temps: un remplacement par une erreur ou un vide puis suppression des lignes correspondant aux cellules spéciales.

    Autre point, on oublie souvent, moi le premier, qu'il peut y avoir un 2ème argument à la propriété SpecialCells.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2017, 11h47
  2. [XL-2013] VBA / couleurs de lignes selon contenu d'une cellule.
    Par bruno3724 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/11/2015, 16h34
  3. Suppression d'une ligne en fonction d'une cellule
    Par flo1411 dans le forum Excel
    Réponses: 6
    Dernier message: 26/03/2013, 16h28
  4. vba écrire une cellule pour chaque ligne écrite
    Par Chris171717 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/03/2013, 11h53
  5. [VBA-E]suppression lignes a partir d'une cellule active
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/02/2007, 15h01

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