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 :

Suppression de lignes en fonction de plusieurs valeurs [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Comptable
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Bonjour,

    Je bloque dans ma macro. Je souhaiterai supprimer des lignes dans un tableau en fonction de variables dans une autre feuille.
    Exemple : Je souhaiterai supprimer les lignes de la feuille "COPIE" où le nom des personnes (colonne A) se retrouve dans la feuille "BASE" (colonne A).

    Merci d'avance

    Clément

    J'ai fait ceci mais ca ne marche pas bien

    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
    Sub Macro4()
    '
    '
    '
    Sheets("BASE").Select
    iligne1 = 1
    icolonne1 = 1
    i = 1
    For i = 1 To 25
     
        SALARIE = Trim(Cells(iligne1 + i - 1, icolonne1).Value)
     
       Sheets("COPIE").Select
     
     
    'suppression ligne
     
        '
       'Application.ScreenUpdating = False
       For P = [a65000].End(xlUp).Row To 1 Step -1
          If Left(Cells(P, 1), 4) = SALARIE Then Rows(P).Delete
       Next P
     
    Next i
    '
    End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    'Application.ScreenUpdating = False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       For P = [a65000].End(xlUp).Row To 1 Step -1
          If Left(Cells(P, 1), 4) = SALARIE Then Rows(P).Delete
       Next P
    La boucle for incrémente une variable or tu souhaites ici décrémenter la variable

    Utilise plutot la boucle Do until


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    P =Range [a65000].End(xlUp).Row 
    Do until P=1
        If Left(Cells(P, 1), 4) = SALARIE Then Rows(P).Delete
    loop
    Petite optimisation
    Si chaque salarié n'a qu'une seule ligne alors on peut sortir de la boucle apres avoir supprimé la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    P =Range [a65000].End(xlUp).Row 
    Do until P=1
        If Left(Cells(P, 1), 4) = SALARIE Then Rows(P).Delete
         exit do
    loop
    Christophe

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour,

    pourrait être plus rapide en utilisant un filtre …

  4. #4
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Comptable
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Merci de vos réponses.

    Mais cela ne fonctionne pas

    De plus je ne vois pas de changement de feuille dans votre programmation.

    Merci encore

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Ce n'est pas compliqué mais à défaut de voir ce que tu as bien pu réaliser …

    En dehors de la méthode rapide d'utiliser un filtre et son résultat via la méthode SpecialCells -
    pas difficile pourtant avec l'Enregistreur de macros et en consultant l'aide intégrée de VBA ! -
    il y a aussi l'alternative de la fonction de feuille de calculs EQUIV, en VBA anglais natif oblige c'est Match

    Sans compter la méthode plus lente déjà indiquée en bouclant sur chaque ligne,
    suffit de l'adapter en indiquant la feuille traitée …


  6. #6
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Comptable
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Désolé, I'm

    Je comprend pas tout...

    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
    Sub Macro4()
    '
    '
    '
    Sheets("BASE").Select
    iligne1 = 1
    icolonne1 = 1
    i = 1
    For i = 1 To 25
     
        SALARIE = Trim(Cells(iligne1 + i - 1, icolonne1).Value)
     
       Sheets("COPIE").Select
     P =Range [a65000].End(xlUp).Row
    Do Until P = 1
        If Left(Cells(P, 1), 4) = SALARIE Then Rows(P).Delete
    Loop
    Next i
     
    End Sub

  7. #7
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Salut,

    Une autre solution élégante et rapide consiste à remplacer dans ta colonne A de la feuille "COPIE", toutes les occurrences présentes dans la colonne A de ta feuille BASE, par un flag comme "A SUPPRIMER" par exemple. Ensuite, reste à supprimer, dans "COPIE" toutes tes lignes donc la 1ère cellule contient "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
     
    ' Suspension de la MAJ visuelle (pour accélérer le processus)
    Application.ScreenUpdating = False
    ' Remplacement
    For Each cCell In Sheets("BASE").Columns(1).SpecialCells(xlCellTypeConstants)
        Sheets("COPIE").Range("$A$1").CurrentRegion.Replace cCell.Value, "A SUPPRIMER"
    Next
     
    ' Suppression
    For Each cCell In Sheets("COPIE").Columns(1).SpecialCells(xlCellTypeConstants)
        If cCell.Text = "A SUPPRIMER" Then cCell.EntireRow.Delete
    Next
     
    ' Réactivation de la MAJ visuelle
    Application.ScreenUpdating = True

  8. #8
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Comptable
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Citation Envoyé par Phil'oche Voir le message
    Salut,

    Une autre solution élégante et rapide consiste à remplacer dans ta colonne A de la feuille "COPIE", toutes les occurrences présentes dans la colonne A de ta feuille BASE, par un flag comme "A SUPPRIMER" par exemple. Ensuite, reste à supprimer, dans "COPIE" toutes tes lignes donc la 1ère cellule contient "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
     
    ' Suspension de la MAJ visuelle (pour accélérer le processus)
    Application.ScreenUpdating = False
    ' Remplacement
    For Each cCell In Sheets("BASE").Columns(1).SpecialCells(xlCellTypeConstants)
        Sheets("COPIE").Range("$A$1").CurrentRegion.Replace cCell.Value, "A SUPPRIMER"
    Next
     
    ' Suppression
    For Each cCell In Sheets("COPIE").Columns(1).SpecialCells(xlCellTypeConstants)
        If cCell.Text = "A SUPPRIMER" Then cCell.EntireRow.Delete
    Next
     
    ' Réactivation de la MAJ visuelle
    Application.ScreenUpdating = True
    Merci je prend,

    mais ça ne supprime pas, par contre si je remplace "A SUPPRIMER" par "1" ca marche, ce n'est pas un problème de texte et numérique?
    Je met donc le "1"

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/07/2015, 14h58
  2. Suppression de ligne en fonction d'une colonne
    Par PPLILH2008 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/06/2008, 10h43
  3. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  4. Fonction retournent plusieurs valeurs
    Par Futixu dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2006, 22h49
  5. Fonction retournant plusieurs valeurs
    Par Trap D dans le forum Scheme
    Réponses: 1
    Dernier message: 17/02/2006, 21h52

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