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 une ligne si la plage entre ("C:L") est vide


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Par défaut Supprimer une ligne si la plage entre ("C:L") est vide
    Bonjour
    J'ai fais ce code par contre, je trouve que mon "ElseIf " est un peu lourd et j'aimerais le rendre plus simple avec des fonctionnalités d'Excel

    En gros, mon programme doit débuter à la ligne 8 et valider si les cellules entre les colonnes entre C et L de la ligne du compteur (I) sont vides.

    Si tel est le cas, la ligne au complet doit être supprimée !

    Par contre, il arrive parfois que des lignes ne soient pas supprimé dans la plage mentionné ci-dessus. Il faut alors que je relance mon programme et elles sont alors supprimés. Il est peut-être question de caractères cachés ou mal initialisé.

    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
    Sub test()
     
    Dim I As Integer
    Dim x1 As Range
    I = 8
     
    Do While Not Range("A" & I).Value = ""
             If Range("A" & I).Value = 0 Then
                End
             ElseIf Cells(I, 3).Value = "" And Cells(I, 4).Value = "" And Cells(I, 5).Value = "" _
                And Cells(I, 6).Value = "" And Cells(I, 7).Value = "" And Cells(I, 8).Value = "" _
                And Cells(I, 9).Value = "" And Cells(I, 10).Value = "" And Cells(I, 11).Value = "" _
                And Cells(I, 12).Value = "" Then
                Rows(I).Delete
             End If
     I = I + 1
    Loop
    End Sub
    J'ai aussi essayé avec cela mais ça ne fonctionne pas et je trouve cela trop lourd aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ElseIf Len(Cells(I, 3).Value < 1) And Len(Cells(I, 4).Value < 1) And Len(Cells(I, 5).Value < 1) _
                And Len(Cells(I, 6).Value < 1) And Len(Cells(I, 7).Value < 1) And Len(Cells(I, 8).Value < 1) _
                And Len(Cells(I, 9).Value < 1) And Len(Cells(I, 10).Value < 1) And Len(Cells(I, 11).Value < 1) _
                And Len(Cells(I, 12).Value < 1) Then
                Rows(I).Delete

    Merci de votre aide

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Quand on supprime des lignes avec une boucle For, il faut toujours partir de la fin vers le début, sinon on risque d'en oublier, par exemple quand deux lignes consécutives répondent aux critères.

    Essaies ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Sub Test()
    Dim r As Range
    Dim i As Long
      Set r = Worksheets(1).Range("A1").CurrentRegion
      Application.ScreenUpdating = False
      For i = r.Rows.Count To 2 Step -1
        If WorksheetFunction.CountA(r.Cells(i, "C").Resize(1, 10).Value) = 0 Then r.Rows(i).Delete
      Next i
    End Sub

  3. #3
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Par défaut
    Bonjour Patrice,
    J'ai essayé ton code mais celui-ci ne se rend qu'a la ligne 3. En cherchant à partir de ce que tu m'as mentionné, j'ai trouvé ce code qui sélectionne exactement ma plage de traitement que je désire traiter, soit de la ligne 8 à la ligne 36

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.UsedRange.rows("8:" & ActiveSheet.UsedRange.rows.Count).CurrentRegion.Select
    J'ai tenté d'adapter ton code avec ce que j'ai trouvé mais j'ai une erreur d'objet requis sur la commande "set" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
     
    Dim i As Long
    Dim r As Range
     
    Set r = ActiveSheet.UsedRange.rows("8:" & ActiveSheet.UsedRange.rows.Count).CurrentRegion.Select
    Application.ScreenUpdating = False
      For i = r.rows.Count To 2 Step -1
        If WorksheetFunction.CountA(r.Cells(i, "C").Resize(1, 10).Value) = 0 Then r.rows(i).Delete
      Next i
    End Sub
    Cordialement
    Marc

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Pas de .Select inutile et éviter Activesheet !!!
    Utiliser plutôt Worksheets(1) ou Worksheets("Feuil1")

    Oups, j'avais pas fais attention au fait que ton tableau commence en A8, essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit 
    Sub Test()
    Dim r As Range
    Dim i As Long
      Set r = Worksheets(1).Range("A8").CurrentRegion
      Application.ScreenUpdating = False
      For i = r.Rows.Count To 8 Step -1
        If WorksheetFunction.CountA(r.Cells(i, "C").Resize(1, 10).Value) = 0 Then r.Rows(i).Delete
      Next i
    End Sub

  5. #5
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Par défaut
    Bonjour Patrice,
    Cela ne fonctionne pas, aucune ligne n'est supprimé !

    Pour imager un peu, la colonne A et B contiennent toutes des données (De 8 à 36 dans ce présent cas) et la colonne M aussi. Par contre, si les colonnes dans la plage entre C et L du compteur de lignes I sont vides, tu supprimes cette ligne.
    J'ai ajouté mon fichier test3.xlsm afin d'aider à mieux comprendre.

    À titre d'info, dans ton dernier exemple, il manquait une fin de parenthèse tout juste après le "C". J'ai aussi remarqué qu'il commence à la ligne 32 au lieu de 36.

    Merci de ton aide

    Marc
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour paqmarc ,


    Essaie peut-être ceci ( code de Patrice740 légèrement modifié):

    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
     
    Option Explicit
    Sub Test()
    Application.ScreenUpdating = False
     
    Dim r As Range
    Dim i As Long
     
      Set r = Worksheets(1).Range("A8").CurrentRegion
     
      For i = r.Rows.Count To 8 Step -1
        If WorksheetFunction.CountBlank(Range("C" & i & ":L" & i)) = 10 Then r.Rows(i).Delete
      Next i
     
    Application.ScreenUpdating = True
     
    End Sub
    Bàt,

  7. #7
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Par défaut
    Bonjour
    Merci pour ton code mais ça fonctionne presque complètement..
    Le code supprime les lignes mais il commence à la ligne 32 au lieu de 36.
    Donc, il laisse 4 lignes en trop qui devrait être supprimé

    Je joins mon programme avec le résultat


    Merci de ton aide,
    Marc
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par paqmarc Voir le message
    Cela ne fonctionne pas, aucune ligne n'est supprimé !
    ... J'ai ajouté mon fichier test3.xlsm
    À titre d'info, dans ton dernier exemple, il manquait une fin de parenthèse tout juste après le "C". J'ai aussi remarqué qu'il commence à la ligne 32 ...
    Chez moi ton fichier fonctionne parfaitement.
    Il manquait effectivement une parenthèse (malencontreusement supprimée quand j'ai enlevé la couleur).
    Il commence à la ligne 32 de ton tableau qui ne comporte que 32 lignes c'est a dire qu'il commence en C36

    As-tu bien activé les macros ?

  9. #9
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Par défaut
    Bonjour Patrice,
    C'est un fichier .xlsm qui supporte les macros et je suis même allé voir dans les options.

    C'est bizarre que cela fonctionne pour toi et moi non avec le même fichier.

    Marc
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par paqmarc Voir le message
    C'est un fichier .xlsm qui supporte les macros et je suis même allé voir dans les options.
    Il n'y a pas que les options, il y a aussi l'emplacement qui doit être "de confiance".

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Télécharger ton fichier test3 et essaie le, c'est pas normal qu'il ne fonctionne pas

    Dans celui de mFoxy, il manque le r. devant le Range (et donc il commence à la ligne 32 au lieu de 36)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If WorksheetFunction.CountBlank(r.Range("C" & i & ":L" & i)) = 10 Then r.Rows(i).Delete

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

Discussions similaires

  1. Supprimer une ligne si cellule vide ou = 0 dans une plage variable
    Par nico157 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 06/01/2016, 16h09
  2. [XL-2003] supprimer une ligne dans une plage specifique
    Par TEnergie dans le forum Excel
    Réponses: 4
    Dernier message: 21/03/2012, 17h19
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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