J'ai crée un tableau de présence sur un poste pour des agents qui travaillent sur deux postes en même temps. Seul un poste m’intéresse.
la tranche horaire du poste est de 12 h jour et nuit.
Donc, j'ai un tableau pour la tranche 08h-20h et l'autre 20h-08h
Chaque colonne correspond à 1 h et est divisée en 4 colonnes pour les quart d'heure.
Donc quand l'agent est sur le poste qui m'interesse, je met en rouge les cellules.
Je souhaiterais valorisée ma couleur pour 15 min et en dehors du tableau en fin de ligne faire le total des cellules en rouge pour le transformer en temps de présence.
Je vous met en pièce jointe mon tableau se sera plus simple
Re : valorisée des cellules colorées en minutes (15 min) puis...
Bonjour Louna13 et bienvenue sur le forum.
Voici une solution par fonction personnalisée dans le fichier ci-joint. La fonction NbCoul(CoulRef; Zone) compte le nombre de cellules contenant la couleur de la cellule de référence (CoulRef) dans la zone (Zone). Ensuite, on miltiplie par 1/4 d'heures et on obtient le résultat souhaité.
Re : valorisée des cellules colorées en minutes (15 min) puis...
Bonjour louna, bonjour fred0o,
Je trouve cette solution très intéressante et cherche à la comprendre.
te serait il possible de rajouter des commentaires à ton code car je galère un peu à le comprendre (je ne vois notamment pas ou tu détermines que la couleur doit être rouge).
Re : valorisée des cellules colorées en minutes (15 min) puis...
Bonjour,
2 solutions possibles :
soit tu écris 1 dans les cellules à colorier en rouge : avec une MFC telle que si valeur =1 fond rouge police rouge; ensuite il n'y a plus qu'à faire la somme et multiplier par 15 pour avoir des minutes
soit tu ne veux rien changer à ton tableau mais alors il faut créer une fonction personnalisée avec le code suivant dans un nouveau module du classeur :
VB:
Function ColorCountIf(ZoneDeRecherche As Object, Modele As Range) As Integer
Application.Volatile True
ColorCountIf = 0
Rem pour l'interieur : modele.interior.colorindex et cell.interior.colorindex
Rem pour police : modele.Font.colorindex et cell.Font.colorindex
MaCoul = Modele.Interior.ColorIndex
For Each cell In ZoneDeRecherche
If cell.Interior.ColorIndex = MaCoul Then ColorCountIf = ColorCountIf + 1
Next cell
End Function
Re : valorisée des cellules colorées en minutes (15 min) puis...
Je te remercie pour ta solution.
Dans le fond, j'ai compris la formule par contre comment fait tu pour que la couleur rouge corresponde à 15 min et pour le totaliser en heure stp?
Encore 2explications ou trouve la fonction nbcoul, Pour voie le code : <ALT> + <F11> ça veut dire quoi et ou le voir surtout.
Re : valorisée des cellules colorées en minutes (15 min) puis...
Bonjour,
Salut Fredoo
pour correspondre à 15 mn on multiplie le nb de cellules en rouge par 1/96 (nb de 1/4 d'heures dans 24 heures)
pour voir le code : quand tu es dans excel : appuyer simultanément sur alt et sur F11 pour voir le code qui se trouve dans un module.
Re : valorisée des cellules colorées en minutes (15 min) puis...
encore désolé mais je n'ai pas d'onglet outil et ca me parait bizarre je n'y avais même pas fait attention. C'est peut être du a une version pro ou je ne c'est quoi.
Je te remercie de des réponse je vais approfondir tout ca.
Re : valorisée des cellules colorées en minutes (15 min) puis...
Bonsoir à tous,
Louna, tu n'as pas précisé la version d'EXCEL que tu utilises. Si c'est 2003, tu dois avoir le menu "Outils" Si c'est 2007 et au delà (Comme dirait Buzz l'éclair...), il te faut aller dans le ruban développeur, puis choisir "Visual basic". Si tu n'as pas le ruban développeur dans EXCEL >= 2007, tu cliques sur le bouton en haut à gauche "Bouton Office", puis "Options EXCEL" puis "Standard" et là, tu coches la 3° case : "Afficher l'onglet Développeur dans le ruban". Puis tu cliques sur OK.
Le plus simple restant : <ALT> + <F11>.
Lorsque tu es sous Visual Basic, tu cliques sur Module1 et là, tu verras apparaître ce code :
VB:
Function NbCoul(CR As Range, Zone As Range)
Dim c, nb
nb = 0
For Each c In Zone
If c.Interior.ColorIndex = CR.Interior.ColorIndex Then nb = nb + 1
Next
NbCoul = nb
End Function
Pour faire simple, cette fonction compare la couleur de chaque cellule de la zone à la couleur de la cellule de référence.
Dans l'exemple de ton fichier, la cellule de référence est la cellule "AX6" que j'ai coloré en rouge.
Maintenant, voici le code commenté :
VB:
' Fonction personnalisée NbCoul. Les paramètres sont :
' CR (couleur de référence. En fait c'est la couleur contenue dans la cellule désignée ici).
' Zone. C'est la plage de cellules dans laquelle ont veut compter les cellules contenant la couleur de référence.
Function NbCoul(CR As Range, Zone As Range)
' Déclaration des variables c (pour cellule) et bn (pour nombre)
Dim c, nb
' on initialise nb à zéro
nb = 0
' Pour chaque cellule de la zone
For Each c In Zone
' Si la couleur de la cellule est égale à la couleur de référence, alors on rajoute 1 à nb
If c.Interior.ColorIndex = CR.Interior.ColorIndex Then nb = nb + 1
' Porchaine cellule
Next
' Le résultat de la fonction = le nombre de cellue contenant la couleur de référence.
NbCoul = nb
End Function
Ensuite, dans la feuille de calcul, on divise le nombre de cellules rouges par 96 pour obtenir le nombre d'heures souhaitées. En effet, dans EXCEL, au format heure ou date, la valeur 1 est égale à 1 jour. Donc, 1/4 d'heure = 1 jour divisé par 24 heures divisé par 4 1/4 d'heures, soit 1 jour divisé par 96 quarts d'heures.
Re : valorisée des cellules colorées en minutes (15 min) puis...
je v approfondir ton explication je trouve cela tres interressant .
Je te remercie
Je v essayer de m'y mettre à ce code vba, ta fonction je l'ai comprise mais expliquer comme cela c plus compliquée et plus intéressant
merci et surement à très bientôt