Selectionner des lignes sous condition

Résolu
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour,

Dans un très long tableau, je cherche à sélectionner les lignes entre 2 couleurs. Je m'explique, je sélectionne une cellule du tableau et je veux sélectionner les lignes jusqu'à la prochaine ligne en violet.

J'ai essayé un code mais sans succès :

Sub TEST()

DL = Sheets("NATIONAL").Cells(Application.Rows.Count, 23).End(xlUp).Row

Ligne = ActiveCell

For i = Ligne To DL

Do While Range("A" & i).Interior.Color <> RGB(128, 0, 128)
    Rows(i).Select
Loop

Next i

End Sub


Merci d'avance pour votre aide.

Cordialement.

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    2 questions :
    1- la couleur violette est une couleur de cellule ou due à une MFC?
    2- pourquoi sélectionner?
    0
  2. eljojo_e Messages postés 1255 Statut Membre 155
     
    Bonjour,

    Essaye ca plutot :
    Sub TEST()

    DL = Sheets("NATIONAL").Cells(Application.Rows.Count, 23).End(xlUp).Row

    ligne = ActiveCell.Row

    For i = ligne To DL

    If Range("B" & i).Interior.Color = RGB(128, 0, 128) Then
    Rows(ligne & ":" & i).Select
    End If
    Next i

    End Sub


    Cordialement,
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    J'avais fait cela il y a quelque temps, il faudra mettre un point d'arrêt et adapter:

    https://forums.commentcamarche.net/forum/affich-31994139-comment-savoir-si-une-cellule-est-colorer-ou-non-sur-vba#2
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Je n'ai pas spécialement besoin de ça, la cellule étant colorée en violet sans MFC, pas besoin de condition (si couleur....). Je voudrais juste avoir accès à la ligne après ma cellule sélectionnée jusqu'à la prochaine ligne violette et je rajoute à ma demande (pardon, pas pris en compte au départ) ou jusqu'à la prochaine ligne vide.
      0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    pour la ligne cellule active:

    Ligne = ActiveCell.Row


    ensuite si la couleur est d'une MFC, prendre le meme test pour le code VBA
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Exact, il s'agissait d'une erreur de ma part après de nombreux tests, merci. Je l'ai corrigée mais le code ne marche toujours pas.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Bonjour,

    Non, ce n'est pas une MFC, simplement une couleur de cellule.

    On n'est pas obligé de sélectionner, je vais simplement copier/coller ces données. Je cherche simplement à y avoir accès. Je vais regarder ton lien cs_Le Pivert, merci.
    0
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      J'ai essayé ce code mais il ne marche pas :

       Dim Col As Range, C As Range
       
       Ligne = ActiveCell.Row
       
       For Each C In Range(Cells(Ligne, 1), Cells(5000, 1))
       
        If C.Interior.Color = RGB(128, 0, 128) Then
        C.Row = Ligne2
        Range(Cells(Ligne, 1), Cells(Ligne2, 23)).Select
        Exit For
        End If
        Next
      
      End Sub


      Pourtant j'avais bon espoir..
      0
  7. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Dans mon code tu as tout pour faire ce que tu veux, numéro de ligne et colonne, il faut bien les placer!
    Tu as les commentaires
    0
  8. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Trouvé. Le code modifié :

    Dim C As Range
     
     Ligne = ActiveCell.Row
     
     For Each C In Range(Cells(Ligne + 1, 1), Cells(5000, 1))
     
      If C.Interior.Color = RGB(128, 0, 128) Then
      Ligne2 = C.Row
      Range(Cells(Ligne + 1, 1), Cells(Ligne2 - 1, 23)).Select
      Exit For
      End If
      Next
    
    End Sub


    Il me faut encore prévoir que si il n'y a pas de ligne violette, alors jusqu'à la dernière ligne mais ca devrait le faire.

    Merci à tous.
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Tu as trouvé l'erreur:

      Ligne2 = C.Row
      0