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 :

Une boucle pour supprimer des lignes ?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 72
    Points : 38
    Points
    38
    Par défaut Une boucle pour supprimer des lignes ?
    Bonjour à toutes et à tous,
    J'ai un petit problème à régler ma foi assez rapidement car je ne compte pas m'éterniser là-dessus, je vous expose ça :
    Je veux vérifier pour toutes les cellules d'une colonne, que si la cellule contient la chaîne de caractères "A supprimer", l'on supprime carrément toute la ligne.
    Je ne m'y connais pas du tout en VBA je vous préviens !
    Par contre je connais l'algorithmique et je pense qu'il faut utiliser une boucle For qui irait de la première ligne du tableau jusqu'à la dernière ligne.
    Seulement je ne connais pas la syntaxe VBA.
    Le nombre de lignes du tableau est variable. ( Actuellement il y a plus de 5000 lignes donc vous comprendrez aisément que j'ai besoin d'une p'tite macro pour effacer toutes ces lignes A supprimer )
    Merci à vous qui pourriez m'aider !

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    un exemple
    col A contient les données
    la plage de A à D
    on commence en A2
    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
    Option Explicit
    Option Base 1
    Sub a_supprimer()
    Dim derlg As Long, tb1, tb2(), x As Long, y As Long
     
    With Sheets("Feuil1") 'à changer par le nom de ta feuille
      derlg = .Range("A" & .Rows.Count).End(xlUp).Row ' si A est la colonne concernée
      tb1 = .Range("A2:D" & derlg) 'si D est la dernière colonne et les données commencent en ligne 2
      ReDim Preserve tb2(1 To derlg, 1 To 4) '4 pour colonne D
      For x = 1 To UBound(tb1)
        If Not UCase(tb1(x, 1)) Like "*A SUPPRIMER*" Then
          y = y + 1
          tb2(y, 1) = tb1(x, 1): tb2(y, 2) = tb1(x, 2): tb2(y, 3) = tb1(x, 3): tb2(y, 4) = tb1(x, 4)
        End If
      Next x
      .Range("A2:D" & derlg) = tb2
    End With
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 9
    Points
    9
    Par défaut pas besoin d'utiliser VBA
    Bonjour,
    Je crois que du moment que vous maitrisez pas VBA, et que ça risque de produire des résultats catastrophique je vous propose de faire le petit travail suivant sur EXCEL :

    -sélectionner toute la plage de données.
    -bouton droit -> trier -> tri personnalisé.
    -choisir la colonne qui comporte les indicateurs "a supprimer"

    là tu pourra voir facilement les lignes a supprimer par une simple sélection.

    remarque: si vous voulez garder le même ordre de départ vous pouvez affecter a chaque ligne un chiffre de 1 à 5000 et puis faire ton algorithme, et puis retrier les données par la colonne ou il y a les chiffres.

    j'espère que j'ai été utile.

  4. #4
    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
    Une autre proposition utilisant un filtre automatique:
    Feuille: Feuil1
    Ligne 1: ligne des titres
    Lignes à supprimer: toutes les lignes contenant en colonne A "A supprimer"
    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
    Sub SupLigne()
    Dim LastLig As Long
    Const Str As String = "*A supprimer*"
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(.Range("A1:A" & LastLig), Str) > 0 Then
            .Range("A1:A" & LastLig).AutoFilter Field:=1, Criteria1:=Str
            .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
            .AutoFilterMode = False
        End If
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup à vous 3, vous avez réglé mon problème de façon superbe !
    Ca fonctionne nickel.
    Merci encore !

    EDIT : La personne qui m'avait demandé ce bout de code a été insatisfaite du résultat obtenu avec votre code.
    Elle s'attendait à ce que les lignes soient "physiquement" effacées du tableau.
    Je précise que j'ai pris le code de mercatog.
    Serait-il possible de rajouter une ou plusieurs lignes pour pouvoir le faire ?
    ( Avec mon tableau de 5000 lignes quand j'exécutais cette requête je me retrouvais avec 5000 lignes dont plus de 4000 qui étaient maintenant vides.
    La personne qui m'a demandé ce que je vous ai exposé aurait voulu qu'il ne reste plus que 1000 lignes, les 4000 lignes dont la cellule contenait en Colonne C "A supprimer" auraient été purement et simplement enlevées ! )
    Encore désolé d'en rajouter une couche

  6. #6
    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
    Dites à la personne qui vous a demandé le travail d'être plus précise dans son explication.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir Mercatog, eldoir
    Mercatog a raison d'autant plus que tes lignes sont effectivement supprimées à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/02/2014, 15h22
  2. Une macro pour supprimer des lignes dans un message
    Par blade2a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/06/2012, 01h26
  3. Réponses: 3
    Dernier message: 25/12/2009, 09h29
  4. sed et boucle pour pour supprimer des lignes
    Par edouardj dans le forum Linux
    Réponses: 15
    Dernier message: 09/11/2007, 12h39
  5. Shell pour supprimer des lignes d'un fichier
    Par nelsa dans le forum Autres langages
    Réponses: 2
    Dernier message: 20/09/2004, 12h26

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