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 :

Simplifier un code qui elimine des lignes à partir d'une cellule non-vide. [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Educateur sportif
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Educateur sportif
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut Simplifier un code qui elimine des lignes à partir d'une cellule non-vide.
    Bonsoir,
    Je cherche un code VBA, qui à partir d'une cellule non-vide (cellule cible), me permettrait d'effacer 3 lignes contiguës (celle du dessous, celle du dessus, et la ligne concernée par la cellule cible).
    En fouillant, à droite à gauche, j'ai pu écrire le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Worksheets("Feuil1").Range("C" & Rows.Count).End(xlUp).Offset(-1, 0).EntireRow.Delete
       Worksheets("Feuil1").Range("C" & Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Delete
       Worksheets("Feuil1").Range("C" & Rows.Count).End(xlUp).EntireRow.Delete
    Bon, ça marche mais je trouve ça ultra bourrin. Y'aurait-il une manière plus élégante de régler ceci?

    Merci de votre attention
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par markotxe Voir le message
    Bonjour,

    Je ne parlerais pas de simplification... , mais ce code correspond à ce que j'aurais fait. Reste à voir le cas où la ligne cible est la première ligne du tableau.
    Nb :
    • Effacement n'est pas le bon terme, il s'agit là d'une suppression.
    • La neutralisation du calcul est intéressante si vous avez un grand tableau avec de nombreuses formules.
    • Le code peut s'appliquer à n'importe quel onglet de la même structure en modifiant le paramètre de SuppressionDeLignes Sheets("Feuil1").

    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
    26
    27
    28
    29
    30
    31
     
    Sub SuppressionDeLignes(ByVal ShCible As Worksheet)
     
    Dim LigneCible As Long, I As Long
     
        With Application
             .ScreenUpdating = False
             .Calculation = xlCalculationManual
        End With
     
        With ShCible
             LigneCible = .Cells(.Rows.Count, 3).End(xlUp).Row
             If LigneCible > 5 Then
                For I = LigneCible + 1 To LigneCible - 1 Step -1
                   .Cells(I, 3).EntireRow.Delete
                Next I
             End If
        End With
     
        With Application
             .ScreenUpdating = True
             .Calculation = xlCalculationAutomatic
        End With
     
    End Sub
     
    Sub TestSuppressionLignes()
     
        SuppressionDeLignes Sheets("Feuil1")
     
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Educateur sportif
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Educateur sportif
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut
    Bonjour Eric,
    Le code fonctionne parfaitement, c'est carrément plus propre. Ça fait plaisir aux yeux et je pense qu'Excel apprécie aussi...
    Merci bien!
    Bien que le sujet soit résolu, j'aurais quand même une petite question… (sans abuser)
    À quoi sert?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       With Application
             .ScreenUpdating = False
             .Calculation = xlCalculationManual
        End With
    ...???

    Quoiqu'il en soit merci encore et bonne journée!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par markotxe Voir le message
    Bonjour,

    .ScreenUpdating = False neutralise le rafraîchissement de l'écran et fait gagner du temps bien que pour 3 lignes le gain est marginal, et .Calculation = xlCalculationManual neutralise le recalcul des formules, là c'est également pour gagner du temps si le fichier comporte de nombreuses formules.
    Dernière modification par Invité ; 01/02/2020 à 18h03. Motif: Ajout des balises [C] … [/C]

  5. #5
    Membre régulier
    Homme Profil pro
    Educateur sportif
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Educateur sportif
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut
    Bonsoir,
    Merci Eric pour ces éclaircissements. C'est bien noté.
    Bonne soirée et merci encore.

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

Discussions similaires

  1. insérer des lignes avec formule si cellule non vide.
    Par stoky dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/11/2018, 19h50
  2. Réponses: 5
    Dernier message: 31/08/2016, 08h31
  3. compter sur une ligne à partir de derniere cellule non vide
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2009, 18h23
  4. [VBA-E] Supprimer des lignes à partir d'une variable tableau
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 08h09
  5. Réponses: 5
    Dernier message: 07/05/2007, 08h16

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