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 :

Code VBA pour supprimer des lignes sous condition - problème


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 20
    Points
    20
    Par défaut Code VBA pour supprimer des lignes sous condition - problème
    Bonjour à tous,

    Voici mon petit souci.
    Je souhaite faire une macro qui parcourt la feuille Excel, s'arrête sur une ligne précise (si 2 conditions sont respectées) et me supprime des lignes situées en-dessous de cette ligne sélectionnée.

    La structure de la macro est la suivante :

    - La macro parcours la feuille en remontant (de la dernière ligne à la ligne 2)
    - La macro teste les 2 conditions sur chaque ligne :
    1/ si la colonne B contient une expression de mots spécifiée
    2/ si la colonne L contient 0
    - si ces 2 conditions sont respectées alors il me supprime les x lignes situées en-dessous (x étant spécifiées)

    Voici le code VBA actuel (basé sur un exemple) :
    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 FinalDelete()
     
    Dim derniereligne As Long, i As Long
     
    derniereligne = Sheets("SAISIE").Range("B" & Rows.Count).End(xlUp).Row
     
    Sheets("SAISIE").Select
     
    For i = derniereligne To 2 Step -1
        If ActiveSheet.Range("B" & i) = "ASPIRATION CENTRALISEE" And ActiveSheet.Range("L" & i).Value = "0" Then
            ActiveSheet.Rows(i).EntireRow.Delete
        End If
    Next i
     
    End Sub
    je bloque uniquement sur la réalisation du THEN.
    J'ai mis le code de suppression de la ligne i dans la macro
    mais je ne sais pas comment faire en sorte qu'il me sélectionne une plage de lignes spécifiée (qui irait par exemple de la ligne i à la ligne i+6)


    Merci d'avance pour votre aide!!

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour

    Évite les Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub FinalDelete()
    Dim DerniereLigne As Long, i As Long
     
    Application.ScreenUpdating = False
    With Sheets("SAISIE")
        DerniereLigne = .Range("B" & .Rows.Count).End(xlUp).Row
        For i = DerniereLigne To 2 Step -1
            If .Range("B" & i) = "ASPIRATION CENTRALISEE" And .Range("L" & i).Value <> "" Then .Rows(i & ":" & i + 6).Delete
        Next i
    End With
    End Sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour ta réponse rapide et complète Mercatog!

    J'ai testé le code et cela marche nickel.

    Un seul point noir : même s'il m'exécute le code parfaitement et supprime bien tout ce qui faut, il m'ouvre une box erreur d'exécution '13' Incompatibilité de type et me souligne en jaune la ligne où les conditions sont spécifiées.

    Comment puis-je corriger cet erreur ou virer cette box à la noix?

    Merci d'avance!

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    1) le code est juste et fonctionne

    2) Le principe de fonctionnement me paraît risqué au niveau conception car si l'intégrité de tes données ne respecte pas le fait que sous ta ligne "ASPIRATION CENTRALISEE" il y a toujours 6 lignes au moins, tu risques un problème au delete (effet de bord)

    3) Les codes de mercatog marchent TOUJOURS (sauf grande fatigue ). Chez moi, c'est nickel.

    4) Un code ne peut s'exécuter parfaitement et donner une erreur d'exécution. C'est mutuellement exclusif.

Discussions similaires

  1. Ligne de Code VBA pour actualiser des données sous PPT
    Par harald78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2016, 10h27
  2. pb code vba pour supprimer plusieurs lignes
    Par worfabs75 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/10/2013, 10h55
  3. pb code vba pour supprimer plusieur lignes
    Par worfabs75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/10/2013, 13h01
  4. [Toutes versions] Supprimer des lignes sous conditions selon résultat fonction
    Par Chtik dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2012, 22h29
  5. [XL-2007] Macro pour supprimer des lignes sous conditions de valeur de cellule
    Par frisco75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2011, 15h33

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