XL 2021 déterminer heure de début et fin + pause en fonction de cellules de couleurs.

natadom

XLDnaute Occasionnel
bonjour à tous,
sur le fichier ci dessous, nous avons sur la ligne numéro 7 une plage de données. le calcul de heures début (cellule bw7), fin (cellule bx7) et les pauses ( cellule ca 7 à ch 7) sont déterminées actuellement par les lettres que trouve la formule dans la ligne. première lettre trouvé = début. dernière trouvé= fin. et toute les coupures trouvées entre le début et la fin représentent les pauses de la journée dans les cellule bleu bleu.

un membre de excel downloads, que je remercie au passage a trouver la formule pour additionner les cases de couleurs, ceci me donne le total de cases de couleur dans la plage . et déterminer le temps total de la journée. cellule ck7

reste à trouver comment déterminer, juste avec les couleurs le reste. sans avoir besoin de mettre des lettres dans les cases.

je ne suis malheureusement pas assez doué avec excel pour réussir cette étape. si l'un d'entre vous peut m'aider,
bien cordialement.
 

Pièces jointes

  • BASE PLANNING COULEUR addition couleur ok.xlsm
    170.5 KB · Affichages: 5

Phil69970

XLDnaute Barbatruc
Re

@natadom

20240818_154937.gif


Tu veux compter les cellules de couleur de la ligne 7
C'est bien ce que ma macro fait il me semble ?
sur le fichier ci dessous, nous avons sur la ligne numéro 7 une plage de données. le calcul de heures début (cellule bw7), fin (cellule bx7) et les pauses ( cellule ca 7 à ch 7) sont déterminées actuellement par les lettres que trouve la formule dans la ligne. première lettre trouvé = début. dernière trouvé= fin. et toute les coupures trouvées entre le début et la fin représentent les pauses de la journée dans les cellule bleu bleu.
Sinon explique ce que tu veux faire et ou tu veux le résultat !
 

natadom

XLDnaute Occasionnel
oui je t'explique. le total des cases couleurs , je l'ai déjà en ck7.
ce dont j'ai besoin maintenant c'est :
i7 en gris détermine la premiere case coloré trouvé et donc heure de début qui doit s'afficher en bw7.
bo 7 en gris détermine la dernière lettre de couleur trouvé et donc heure de fin qui doit s'afficher en bx7

ensuite il y a les pauses = cellules sans couleur, chaque pause doit s'afficher dans les cases bleu ciel. comme sur le premier fichier que je t'ai envoyé.

pas simple je m'en doute à faire
 

Phil69970

XLDnaute Barbatruc
Donc il faut que le code cherche la 1ere couleur trouvée sur la ligne 7 par exemple et quand il la trouve il met l'heure de la ligne 5 dans la cellule BW7
Et idem pour la dernière couleur pour l'heure de fin de la ligne 6 en BX7
J'attends ta confirmation
 

piga25

XLDnaute Barbatruc
Bonjour,
avec ces fonctions personnalisées cela devrait le faire:

VB:
Function NombreCellulesColorées(Plage As Range) As Long
    Dim cel As Range
    Dim compteur As Long

    ' Parcourir chaque cellule de la plage
    For Each cel In Plage
        ' Si la cellule a une couleur de fond différente de blanc, on incrémente le compteur
        If cel.Interior.ColorIndex <> xlColorIndexNone Then
            compteur = compteur + 1
        End If
    Next cel

    NombreCellulesColorées = compteur
End Function

Function PremiereColonneColorée(Plage As Range) As Long
    Dim Col As Long
    Dim Row As Long

    ' Parcourir chaque colonne de la plage
    For Col = 1 To Plage.Columns.Count
        ' Parcourir chaque ligne de la colonne
        For Row = 1 To Plage.Rows.Count
            ' Si la cellule a une couleur de fond différente de blanc, on sort des boucles
            If Plage.Cells(Row, Col).Interior.ColorIndex <> xlColorIndexNone Then
                PremiereColonneColorée = Col
                Exit Function
            End If
        Next Row
    Next Col

    ' Si aucune colonne n'a été trouvée, on retourne 0
    PremiereColonneColorée = 0
End Function

Function DerniereColonneColorée(Plage As Range) As Long
    Dim Col As Long
    Dim Row As Long

    ' Parcourir les colonnes en partant de la dernière
    For Col = Plage.Columns.Count To 1 Step -1
        ' Parcourir chaque ligne de la colonne
        For Row = 1 To Plage.Rows.Count
            ' Si la cellule a une couleur de fond différente de blanc, on sort des boucles
            If Plage.Cells(Row, Col).Interior.ColorIndex <> xlColorIndexNone Then
                DerniereColonneColorée = Col
                Exit Function
            End If
        Next Row
    Next Col

    ' Si aucune colonne n'a été trouvée, on retourne 0
    DerniereColonneColorée = 0
End Function

Reste à adapter avec les fonctions ENT et MOD pour définir un horaire, ce qui permet de supprimer les lignes 5 et 6 (pour le premier tableau) cela sera idem pour les autres.

formule pour heure de début :
Code:
=SI(BV7=0;"";ENT((PremiereColonneColorée(B7:BQ7)+23)/4)&"h"&MOD(PremiereColonneColorée(B7:BQ7)+23;4)*15)

formule pour heure de fin :
Code:
=SI(BV7=0;"";ENT((DerniereColonneColorée(B7:BQ7)+24)/4)&"h"&MOD(DerniereColonneColorée(B7:BQ7)+24;4)*15)
 

Pièces jointes

  • BASE PLANNING COULEUR addition couleur ok (1).xlsm
    181.6 KB · Affichages: 2

fanfan38

XLDnaute Barbatruc
Question déjà poser dans le lien suivant
où j'ai donné la réponse...
Tu devrai ouvrir un troisieme, voir un quatrieme post sur la même question

A+ François
 

natadom

XLDnaute Occasionnel
impressionnant merci .
par contre je suis obligé de mettre au moins une lettre dans la plage pour que le calcul heure debut et fin se fasse. et si j'efface des couleurs de la ligne cela ne se met pas a jour
exemple sur la ligne 7 si on efface les couleurs de la dernière heure en faisant "aucun remplissage" cela ne se met pas à jour sur la l'heure de fin.

possible de règler cela ?

on y est presque en tout cas .
 

Phil69970

XLDnaute Barbatruc
@natadom

Tu t'adresses à qui ???

impressionnant merci .
par contre je suis obligé de mettre au moins une lettre dans la plage pour que le calcul heure debut et fin se fasse. et si j'efface des couleurs de la ligne cela ne se met pas a jour
exemple sur la ligne 7 si on efface les couleurs de la dernière heure en faisant "aucun remplissage" cela ne se met pas à jour sur la l'heure de fin.

possible de règler cela ?
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 661
dernier inscrit
Michel974