Sélections de données suivant couleur de cellules

Résolu/Fermé
antoine_ic Messages postés 8 Date d'inscription mardi 26 avril 2016 Statut Membre Dernière intervention 12 mai 2016 - 26 avril 2016 à 18:53
 Mosca - 27 avril 2016 à 10:52
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

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
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
antoine_ic Messages postés 8 Date d'inscription mardi 26 avril 2016 Statut Membre Dernière intervention 12 mai 2016 > Mosca
27 avril 2016 à 10:20
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
Mosca > antoine_ic Messages postés 8 Date d'inscription mardi 26 avril 2016 Statut Membre Dernière intervention 12 mai 2016
27 avril 2016 à 10:52
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