Sélections de données suivant couleur de cellules

Résolu
antoine_ic Messages postés 8 Statut Membre -  
 Mosca -
Bonjour,

Je travaille actuellement sur une feuille Excel qui contient des relevés de température et d'hygrométrie, avec un temps t associé à chaque couple (Température, Hygrométrie), au format "dd/mm/yy hh/mm".
J'ai donc en colonne B le temps, en C l'hygrométrie et en D la température.
Les relevés sont donnés dans l'ordre chronologique.


A l'aide de VBA j'ai fait la chose suivante :

J'ai colorié les cellules de la colonne B (le temps) pour lesquelles l'hygrométrie associée (colonne C) est inférieure ou supérieure à une certaine valeur (respectivement 45 et 60%).

Soit dans mon code :

"
Dim maPlage100 As Range
Dim DernLigne100 As Long
Dim ii As Long

DernLigne100 = Range("C" & Rows.Count).End(xlUp).Row
Set maPlage100 = Range("C2:C" & DernLigne100)

For ii = 2 To DernLigne100

If Cells(ii, 3).Value < 45 Then
Cells(ii, 2).Interior.ColorIndex = 20
End If

If Cells(ii, 3).Value > 60 Then
Cells(ii, 2).Interior.ColorIndex = 20
End If

Next ii

"

J'ai donc plusieurs plages colorées dans la colonne B (une plage peut également être une seule cellule).

Ce que j'essaie de faire maintenant, c'est comptabiliser le temps (le nombre d'heures finalement) pendant lequel l'hygrométrie n'est pas comprise entre mes bornes de 45 et 60%.

J'ai pensé le faire de la manière suivante :

1) Je colorie les cellules de temps correspondant à des valeurs d'hygrométrie trop faibles ou trop fortes par rapport à mes bornes de 45 et 60%. J'obtiens donc sur ma feuille Excel dans la colonne B (temps), plusieurs plages de couleur plus ou moins grandes (parfois même une seule cellule).

2) Je sélectionne chaque plage de temps colorée et je prend la première et la dernière cellule de cette plage pour faire ("ValeurDernièreCellule - ValeurPremièreCellule"), car j'ai les données dans l'ordre chronologique. Ce qui me donne donc une valeur de temps (exemple 2h et 30 min, car entre 15h30 et 18h l'hygrométrie était supérieure à 60%).

3) Après avoir fait ceci pour toutes les plages colorées, je peux sommer chaque temps et avoir un nombre d'heures total pendant lequel l'hygrométrie n'est pas dans mes bornes.

Et me voici bloqué à l'étape 2...!
Soit comment sélectionner la première et la dernière valeur de chacune de mes plages de temps colorées ?


Je ne sais pas si je suis très clair...

Merci beaucoup pour votre aide et désolé pour le pavé !

1 réponse

  1. Mosca
     
    Bonjour

    Cette macro indiquera en colonne D la durée d'un bloc hors normes (au niveau de la dernière cellule du bloc)

    La colonne D doit être formatée pour afficher une durée ("hh:mm")
    Sub test()

    Dim maPlage100 As Range
    Dim DernLigne100 As Long
    Dim ii As Long
    Dim TimeStart As Variant
    Dim TimeStop As Variant
    Dim Start As Boolean
    Start = False

    DernLigne100 = Range("C" & Rows.Count).End(xlUp).Row
    Set maPlage100 = Range("B2:B" & DernLigne100)
    With maPlage100.Interior
    .Pattern = xlNone
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    For ii = 2 To DernLigne100
    If Cells(ii, 3).Value < 45 Or Cells(ii, 3).Value > 60 Then
    Cells(ii, 2).Interior.ColorIndex = 20
    If Not Start Then
    Start = True
    TimeStart = Cells(ii, 2).Value
    End If
    Else
    If Start Then
    Start = False
    TimeStop = Cells(ii - 1, 2).Value
    Cells(ii - 1, 4).Value = TimeStop - TimeStart
    End If

    End If
    Next ii

    End Sub
    0
    1. Mosca
       
      Edit:

      A compléter la macro par ces lignes, afin de prendre en compte le denier bloc du tableau
      Ajouter entre Next ii et End Sub
      Next ii

      If Start Then
      TimeStop = Cells(ii - 1, 2).Value
      Cells(ii - 1, 4).Value = TimeStop - TimeStart
      End If

      End Sub
      0
      1. antoine_ic Messages postés 8 Statut Membre > Mosca
         
        Le code marche à merveille !

        Je ne suis pas sûr cependant qu'il y ait besoin de l'édit car quand je check manuellement en faisant la somme de tous les temps, le dernier bloc du tableau est bien pris en compte.

        Je suis en train de l'appliquer à tout mon classeur, et j'obtiens des résultats concluants.

        Merci beaucoup et à une prochaine fois peut-être
        0
      2. Mosca > antoine_ic Messages postés 8 Statut Membre
         
        Le dernier bloc du tableau ne sera pas pris en compte s'il est hors normes.
        Si le dernier bloc est dans la norme, ça ne changera rien.

        Mieux vaut compléter la macro pour un usage plus général

        A+
        0