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 :

Macro suppression ligne avec condition [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Macro suppression ligne avec condition
    Bonjour,

    j'aimerais de nouveau faire une macro pour supprimer des lignes de mon fichier excel.

    Je vous explique ma requête.

    Je dois supprimer toutes les lignes contenant "MAGASIN DE PARIS" en colonne B sauf celles qui ont pour entreprise VEOL ou REC en colonne C que je dois garder malgré qu'elles appartiennent à MAGASIN DE PARIS.

    Je vois comment supprimer les lignes MAGASIN de PARIS (grâce à votre aide d'ailleurs !) mais je bloque sur le fait de créer 2 conditions pour ne pas supprimer VEOL ou REC.

    Je vous joins mon tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
    Dim Derlig As Long, b As Long
        With ActiveWorkbook.Worksheets("Feuil1")
            Derlig = .Range("B2").End(xlDown).Row
            For b = Derlig To 2 Step -1
                If .Range("B" & b).Value = "MAGASIN DE PARIS" Then
                    .Range("B" & b).EntireRow.Delete
                End If
            Next b
        End With
    End Sub
    Cette macro supprime bien magasin de paris, mais je pense que l'on peut rajouter une petite condition pour VEOL ET REC.

    merci d'avance de vos éclairements.

    Jenifer
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Un truc de ce genre.....

    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 Test()
    Dim Derlig As Long, b As Long
    With ActiveWorkbook.Worksheets("Feuil1")
    Derlig = .Range("B2").End(xlDown).Row
    For b = Derlig To 2 Step -1
    If .Range("B" & b).Value = "MAGASIN DE PARIS" Then
    Select Case Trim(.Range("C" & b).Value)
           Case "VEOL", "REC"  'ne rien faire'
           Case Else           'supprimer
                .Range("B" & b).EntireRow.Delete
    End Select
    End If
    Next b
    End With
    End Sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    merci beaucoup, cela marche parfaitement, mais je bloque sur un dernier petit détail.

    En effet, je voudrais que ma macro supprime toute l'année 2011 de mon fichier de base de donnée et me garde que 2012. (j'ai seulement ces 2 années sur ce fichier)

    peut-on faire un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim E As Long
    Dim Plage As Range
    Set Plage = Range("E2:E" & Range("E2").End(xlDown).Row)
    For E = Plage.Cells.Count To 1 Step -1
    If Plage.Cells(E).Value < 31/12/11 Then
    Plage.Cells(E).EntireRow.Delete
    End If	
    Next
     
    End Sub
    ça ne fonctionne pas mais suis je sur la bonne piste ?

    merci d'avance de vos éclairements.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu veux tester l'année d'une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF YEAR(RANGE("E2")) = 2011 then .....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    merci de votre réponse. Cela marche bien.

    Mais malheureusement quand j'éxécute la macro j'ai une

    erreur "13" en fin d'éxécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Year(Range("E" & i).Value) = "2011" Then
    incompatibilité de type

    savez vous quel est le problème ?

    merci d'avance.

  6. #6
    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
    Jenifer,

    2 choses :

    1) Si ton problème n'est plus résolu, il faut enlever le résolu !!
    2) Tu dois lire les réponses et les appliquer correctement :

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF YEAR(RANGE("E2")) = 2011 then .....
    n'est pas équivalent à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Year(Range("E" & i).Value) = "2011" Then

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF YEAR(RANGE("E2")) = 2011 then .....
    cela ne fait rien du tout. Mon fichier reste pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim i 
    For i = Range("E65536").End(xlUp).Row To 1 Step -1
        If Year(Range("E2")) = 2011 Then
        Rows(i).Delete
        End If   
    Next i
    End Sub

    quand je fais celle que j'ai dite avant avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Year(Range("E" & i).Value) = "2011" Then
    cela fonctionne, mes 2011 disparaissent. Mais j'ai une erreur.

    Dans un premier temps j'avais appliqué votre réponse mais comme elle ne fonctionnait pas je l'ai remanié. Pour tester.

  8. #8
    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
    quand je fais celle que j'ai dite avant avec :

    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    If Year(Range("E" & i).Value) = "2011" Then
    parce que probablement tu as des titres de colonnes en ligne 1, donc en E1 et que ta boucle remonte jusqu'en ligne 1 par pas de -1 depuis la fin de la colonne E.

    La ligne à adapter est probablement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Range("E65536").End(xlUp).Row To 2 Step -1
    NB : tu n'as toujours pas enlevé le RESOLU !!!!!!!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    oui effectivement j'ai des titres en haut des colonnes

    cela fonctionne à merveille maintenant.

    je vous remercie de votre patience

    ps : sii j'avais enlevé le résolu mais là je le remet grâce à vous

  10. #10
    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

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Evidemment dans mon exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF YEAR(RANGE("E2")) = 2011 then .....
    Je pensais que c'était évident qu'il fallait l'adapter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF YEAR(RANGE("E" & I)) = 2011 then .....
    A condition naturellement que la cellule de la colonne E soit bien une date et comme l'a précisé Godzestla que la boucle s'arrête à I=2

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

Discussions similaires

  1. Macro suppression lignes en fonction plusieurs conditions
    Par edouardM dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/07/2013, 16h32
  2. [XL-2003] Macro suppression ligne avec condition 3 mots
    Par jenifer699 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2012, 17h45
  3. [XL-2003] Recherche et suppression ligne avec condition
    Par jeromeph75 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/05/2011, 10h31
  4. [AC-2000] Suppression ligne avec conditions sur deux tables
    Par Loufink dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 09/07/2009, 11h38
  5. Suppression des lignes avec condition
    Par tientinou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/03/2009, 12h35

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