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 ligne qui ne contient pas de cellule de couleur. [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut Suppression ligne qui ne contient pas de cellule de couleur.
    Bonjour à tous,

    Tout d'abord, meilleurs vœux pour cette nouvelle année !!!

    Voici mon problème : j'ai un tableau qui contient des cellules sans couleurs et des cellules avec couleurs. Je souhaiterai supprimer chaque ligne qui ne contient pas de cellule rouge ou orange.

    Pourriez-vous m'éclairer sur le sujet s'il vous plait ?

    Je vous ai mis un exemple en pièce-jointe.

    Merci d'avance pour ce petit coup de pouce et bonne soirée,

    Bien à vous,

    PA.
    Fichiers attachés Fichiers attachés

  2. #2
    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 773
    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 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu ne dis pas si la mise en couleur des cellules a été faite manuellement ou si cela provient d'une mise en forme conditionnelle.
    Dans les deux cas, depuis la version 2007, il est possible d'effectuer un filtre sur une couleur.
    Tu pourrais donc filtrer les cellules mise en rouge, sélectionner les cellules visibles, les supprimer et ensuite faire la même chose pour les cellules Orange.
    Si tu souhaites le faire en VBA, tu effectues le travail manuellement à l'aide de l'enregistreur de macros qui va créer ton code que tu peux ensuite nettoyer. Si tu ne t'en sors pas pour alléger ton code, tu peux reposer la question.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Bonjour Philippe,

    Merci pour ton aide. Les couleurs viennent d'une mise en forme conditionnelle.

    Mon souci est le suivant : j'ai beaucoup de cellules fusionnées dans cette feuille, ce qui pose problème pour l'utilisation du filtre de couleurs. Je souhaite donc passer par un code VBA qui va me supprimer chaque ligne ne contenant pas de cellule rouge ou orange.

    Est-ce possible avec un code ?

    Merci d'avance et bonne journée,

    Bien cordialement,

    PA.

  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 773
    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 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mon souci est le suivant : j'ai beaucoup de cellules fusionnées dans cette feuille, ce qui pose problème pour l'utilisation du filtre de couleurs. Je souhaite donc passer par un code VBA qui va me supprimer chaque ligne ne contenant pas de cellule rouge ou orange.
    Une bonne pratique de gestion de liste de données consiste à ne pas fusionner les cellules.
    Est-ce possible avec un code ?
    Ce que tu as difficile à faire à la main l'est aussi avec le VBA. C'est possible mais ce n'est pas aussi simple qu'une liste de données parfaitement gérée.
    Tu trouveras certainement ici quelqu'un qui va t'aider car pour ma part je ne m'investis que pour des données bien structurées.

    [EDIT]
    Par curiosité, j'ai manuellement fusionné des cellules ai placé quelques couleurs et appliqué les filtres sur ceux-ci et ensuite supprimé la ligne filtrée. Cela fonctionne.
    Ce qui ne fonctionne pas c'est la sélection des cellules visibles car fusionnées.

    Par contre, si tu souhaites supprimer la fusion des cellules, voici une petite procédure pour le faire.
    Il faut remplacer la constante data par le nom de ta feuille et si ta liste commence à une autre cellule que A1, il y a lieu de remplacer également cette référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub t()
      ThisWorkbook.Worksheets("data").Range("A1").CurrentRegion.Cells.MergeCells = False
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Toujours impossible de créer cette macro, je viens d'y passer la journée...

    Un petit coup de pouce ?

    Voici le code que j'ai concocté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 4 To 150
    For j = 4 To 60
     
         If Cells(i, j).Interior.Color <> 49407 Or Cells(i, j).Interior.Color <> 255 Then
         Rows(i).Delete
         End If
     
    Next j
    Next i
    Merci à tous.

    PA.

  6. #6
    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 773
    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 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Plusieurs problèmes
    1) N'avais-tu pas indiqué qu'il fallait supprimer les cellules orange et rouge ?
    Si c'est toujours le cas, l'opérateur de comparaison doit être = et pas <>. Donc la ligne de test doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(Row, Column).Interior.Color = 49407 Or Cells(Row, Column).Interior.Color = 255 Then Rows(Row).Delete
    2) Lorsque l'on supprime des lignes et des colonnes, on part de la dernière vers la première
    3) Ce n'est qu'une remarque, il est utile d'utiliser des nom de variables facile à repérer. Tu utilises i et j pour désigner des lignes et des colonnes R et C aurait été plus simple ou L et C en français mais encore mieux Row ou Ligne et Colonne ou Column. De plus il est important de déclarer et typer ces variables.

    La procédure complète pour 10 lignes et 6 colonnes commençant à la ligne 2 et colonne 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Row As Long, Column As Integer
     For Row = 10 To 2 Step -1
      For Column = 1 To 6
       If Cells(Row, Column).Interior.Color = 49407 Or Cells(Row, Column).Interior.Color = 255 Then 
          Rows(Row).Delete: Exit For
      Next Column
     Next Row
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Bonjour Philippe,

    Merci beaucoup pour ton aide et tes remarques, c'est vraiment sympa .

    La macro ci-dessus ne fonctionne pas, je n'obtiens pas le résultat attendu. Tu trouveras ci-joint mon fichier, ça sera plus facile je pense. La macro en question s'appelle "extraction_certif".

    Pour rappel : je souhaite conserver (isoler) les cellules rouge et orange avec les personnes associées (colonne A, B et C) dans la feuille "Validité_Certif" de mon classeur. Je souhaite donc que tout le reste soit supprimé.

    Si tu peux m'aiguiller...

    Merci d'avance pour ton aide et bonne journée,

    Bien cordialement,

    PA.
    Fichiers attachés Fichiers attachés

  8. #8
    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 773
    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 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'avais compris l'inverse et de plus j'ai placé la ligne de test sur deux lignes au moment de la publication alors que mon test avait été effectué sur une seule ligne de code (il manquait donc le End If).
    Voici une procédure qui fonctionne et qui donc conserve les lignes de 10 à 2 dont au moins une cellule a comme code couleur 255 ou 49407.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim Row As Long, Column As Integer, flagDelete As Boolean
     For Row = 10 To 2 Step -1
      flagDelete = True
      For Column = 1 To 6
       If Cells(Row, Column).Interior.Color = 49407 Or Cells(Row, Column).Interior.Color = 255 Then
        flagDelete = False: Exit For
       End If
      Next Column
      If flagDelete Then Rows(Row).Delete
     Next Row
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Wow ça fonctionne merveilleusement bien, merci Philippe !

    D'autre part, est-il possible de faire la même chose mais cette fois-ci pour les colonnes ?

    Le but étant d'isoler les cellules colorées.

    Merci !

    PA.

  10. #10
    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 773
    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 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'autre part, est-il possible de faire la même chose mais cette fois-ci pour les colonnes ?
    Bien évidemment, il suffit de boucler sur les colonnes (toujours de la dernière vers la première) au lieu des lignes.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Nouveau membre du Club
    Profil pro
    Cadre
    Inscrit en
    Novembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Novembre 2011
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Tout fonctionne très bien, merci beaucoup Philippe !!

    Passe une bonne journée,

    PA.

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

Discussions similaires

  1. Suppression des lignes qui n'ont pas la plus grande valeur
    Par Oberown dans le forum Développement
    Réponses: 5
    Dernier message: 21/12/2012, 16h40
  2. un module qui ne contient pas une fonction qu'il contient :?
    Par duplo dans le forum Général Python
    Réponses: 12
    Dernier message: 15/08/2006, 19h30
  3. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 14h50
  4. Réponses: 4
    Dernier message: 01/10/2005, 13h52
  5. Réponses: 3
    Dernier message: 21/01/2004, 08h47

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