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 des lignes avec vba [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 67
    Par défaut Supprimer des lignes avec vba
    bonsoir la communauté,bonne année 2015
    je voudrais savoir comment je peux supprimer des lignes d'une feuille de calcul excel 2007 à partir du code vba.en effet j'ai un tableau de 5 colonnes et environ un millier de ligne.mon objectif est de supprimer les lignes n'ayant pas de données dans toutes les colonnes et cela à partir de vba
    merci d'avance pour votre aide.
    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible avec ce code :

    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
    Sub SupprimerLesLignes()
     
    Dim LigneDeTitre As Long
    Dim DerniereLigne As Long
    Dim I As Long
     
        With ActiveSheet
             LigneDeTitre = 1
             DerniereLigne = .UsedRange.Rows.Count ' S'il n'y a pas de lignes totalement vides
            ' DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row ' Sinon, si la première colonne est toujours remplie
             For I = DerniereLigne To LigneDeTitre + 1 Step -1
                 If WorksheetFunction.CountA(Range(.Cells(I, 1), .Cells(I, 5))) < 5 Then .Cells(I, 1).EntireRow.Delete
             Next I
        End With
     
    End Sub
    Cordialement.
    Dernière modification par Invité ; 08/01/2015 à 07h47.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 67
    Par défaut
    salut,
    merci bien Eric KERGRESSE pour ton coup de main, le code marche à merveille juste qu'il manquait un tout petit "end if" pour que se soit parfait.vous me sortez une belle épine du pied .
    Cordialement

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    'il manquait un tout petit "end if"
    Juste par curiosité, où as-tu ajouté ce petit "end if" ?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Pareil Qwazerty !...

    Une autre proposition plus rapide si il y a beaucoup de lignes :
    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 Macro1()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim LS As Range 'déclare la variable LS (LigneS)
    Dim TEST As Boolean 'déclare la variable TEST
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
    TC = O.UsedRange 'définit le tableau de cellules TC
    Set LS = Range("A1") 'initialise la plage LS
    For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes du tableau TC (en partant de la seconde)
        For J = 1 To UBound(TC, 2) 'boucle 2 : sur toutes les colonnes du tableau TC
            'condition : si la valeur du tableau TC en ligne I, colonne J n'est pas vide, définit la variable
            'TEST comme [Vrai] et sort de la boucle 2
            If TC(I, J) <> "" Then TEST = True: Exit For
        Next J 'prochaine colonne de la boucle 2
        'si TEST est [faux] redéfinit la plage LS (si Ls ne contient qu'une seule cellule, LS devient la ligne I,
        'sinon la ligne I s'ajoute à LS)
        If TEST = False Then Set LS = IIf(LS.Cells.Count = 1, Rows(I), Application.Union(LS, Rows(I)))
        TEST = False 'définit la variable TEST comme [faux]
    Next I 'prochaine ligne de la boucle 1
    LS.Delete 'efface la plage LS
    End Sub

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    En terme de rapidité d'exécution, il est très fortement conseillé lors de ce type de traitement qui peuvent être assez long, de désactiver la mise à jour de l'écran en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    '...
     
    Application .ScreenUpdating = false
     
    'La boucle qui modifie le tableau Excel
    '....
     
    Application .ScreenUpdating = True
     
    '...
    C'est non négligeable comme gain de temps.
    Par contre un inconvénient, si le code plante et que vous choisissez d'arrêter l'exécution de celui-ci, penser à déplacer le curseur d'exécution (Flèche jaune qui pointe la ligne de code qui va être exécuté) sur la ligne ScreenUpdating = True et exécuté la avec la touche F8, sinon la mise à jour ne se fera plus dans Excel... et c'est pénible.
    Au global pour éviter ça, il faut faire une gestion d'erreur et activé le ScreenUpdating avant de quitter la macro.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sigma17 Voir le message
    le code marche à merveille juste qu'il manquait un tout petit "end if" pour que se soit parfait.
    Bonjour Sigma17,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If WorksheetFunction.CountA(Range(.Cells(I, 1), .Cells(I, 5))) < 5 Then .Cells(I, 1).EntireRow.Delete
    Sachez que lorsque Then est suivi d'un code sur la même ligne, le End If est implicite, comme c'est le cas ici.

    Si bien sûr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(I, 1).EntireRow.Delete
    est mis à la ligne après Then, il vous faut ajouter ce End If en dessous de cette ligne.

    C'est ce qu'ont voulu vous indiquer aussi Qwazerty et Thautheme.

    Cordialement.

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

Discussions similaires

  1. [XL-2010] Besoin d'aide pour supprimer des lignes en VBA
    Par SimKmil dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/05/2013, 08h46
  2. Supprimer des lignes avec R
    Par vincent1989 dans le forum R
    Réponses: 2
    Dernier message: 03/12/2012, 15h19
  3. comment supprimer des lignes avec macros
    Par kadij dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2009, 06h14
  4. supprimer des lignes avec VBA
    Par NulenVBA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/10/2008, 17h14
  5. Supprimer plusieurs lignes avec VBA
    Par Nounours1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/03/2008, 11h50

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