Fonction Index et Equiv

Le
Billylaroche
Bonjour,

J'ai créé un calendrier de vacances.

Dans un onglet, j'ai le calendrier :
Avec la formule suivante dans un module, je peux indiquer et compter les
vacances des employés en colorant les cellules correspondantes aux dates de
vacances :

Function NBCOLOR(Cible As Range, oRef As Range) As Long
Dim o, i%, k%
Application.Volatile
k = oRef.Interior.ColorIndex
For Each o In Cible
If o.Interior.ColorIndex = k Then i = i + 1
Next
NBCOLOR = i
End Function

Dans un autre onglet, j'ai une liste qui indique, à partir du calendrier de
vacances, si l'employé à la date du jour est présent ou absent.

La formule doit d'abord rechercher dans le calendrier la date du jour et si
la cellule correspondante est en gris, indiquer que l'employé est absent, et
si la cellule n'est pas coloriée, l'employé est absent.

Voici mon raisonnement :
Fonction 1: Compter les vacances représentées par des cellule en couleur
Si la cellule est en grise, c'est que la cellule vaut 1.
=NBCOLOR(PLAGE;cellule de couleur de référence)>0

Fonction 2 : Rechercher la date de maintenant dans le calendrier
Si je dois chercher la date du jour dans un tableau comprenant plusieurs
lignes et plusieurs colonnes (voir schéma plus bas de mon fichier), je peux
utiliser Index/Equiv
=INDEX(plage;EQUIV(cellule de la date de maintenant;plage;valeur exacte))

Fonction 3 : Déterminer la présence ou l'absence de l'employé.
=SI(CELLULE DE LA DATE DU JOUR EST GRISE; si vrai "ABSENT"; si faux "PRÉSENT"

Récapitulatif
=SI(NBCOLOR(INDEX(plage;EQUIV(cellule date maintenant;plage;0));Cellule de
couleur de référence)>0;"ABSENT";"PRÉSENT")

Adaptée à mon tableau, la formule se lit comme suit :
=SI(NBCOLOR(INDEX('2009'!$H$5:$H$11;EQUIV(LIST!$B$1;'2009'!$H$5:$H$11;0));'2009'!$G$2)>0;"ABSENT";"PRÉSENT")

Mon problème est le suivant : la formule fonctionne que dans la plage d'une
seule colonne (ici de H5:H11 représentant 1 semaine du mois de janvier). Mais
quand je veux étendre ma plage pour les autres mois, un message #Valeur!
m'apparaît! Pourtant ca fonctionne super bien lorsque ma plage n'est qu'une
colonne.

Voici un croquis de mon fichier :

Lig/col H I J K
janvier février mars
5 D 4 11 18 15
6 L 5 12 19 25
7 M 6 13 20 26
8 M 7 14 21 27
9 J 8 15 22 28
10 V 9 16 23 29
11 S 10 17 24 30


S'il vous plaît, qu'en pensez-vous? Peut-être aurais-je dû choisir
d'identifier les vacances pour un autre moyen que la couleur, mais par aspect
pratique et visuel, cette méthode est préférable pour nous.

Merci de votre aide!

--
Billy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Papyjac
Le #18039301
Bonjour Billylaroche,

Je te vais pas te donner la solution, mais une piste pour l'atteindre.

En ta formule qui marche me fait peur. je te propose avant de pousuivre de
décomposer ta formule en formule élémentaire non imbriquée.
Mettre chaque formule intermédiaire dans une cellule différente
Une cellule pour le SI
Une cellule pour Le NBColor
Une cellule pour le INDEX
Une cellule pour le EQUIV
Je pense en effet que tu as 4 niveau d'imbrication
Tu fais marcher cette série de formule pour ta colonne H5 à H11
Puis tu chercheras à étendre
Ensuite tu effectueras la mise au point
Puis tu réimbriqueras tes formule

Le résultat sera peut être plus simple ou plus complexe. Tu verras bien
bien. Mais s'il est plus complexe je te déconseille d'imbriquer tes formules
car personne, ni toi sauras la modifier l'année prochaine


--
Papyjac


"Billylaroche" a écrit :

Bonjour,

J'ai créé un calendrier de vacances.

Dans un onglet, j'ai le calendrier :
Avec la formule suivante dans un module, je peux indiquer et compter les
vacances des employés en colorant les cellules correspondantes aux dates de
vacances :

Function NBCOLOR(Cible As Range, oRef As Range) As Long
Dim o, i%, k%
Application.Volatile
k = oRef.Interior.ColorIndex
For Each o In Cible
If o.Interior.ColorIndex = k Then i = i + 1
Next
NBCOLOR = i
End Function

Dans un autre onglet, j'ai une liste qui indique, à partir du calendrier de
vacances, si l'employé à la date du jour est présent ou absent.

La formule doit d'abord rechercher dans le calendrier la date du jour et si
la cellule correspondante est en gris, indiquer que l'employé est absent, et
si la cellule n'est pas coloriée, l'employé est absent.

Voici mon raisonnement :
Fonction 1: Compter les vacances représentées par des cellule en couleur
Si la cellule est en grise, c'est que la cellule vaut 1.
=NBCOLOR(PLAGE;cellule de couleur de référence)>0

Fonction 2 : Rechercher la date de maintenant dans le calendrier
Si je dois chercher la date du jour dans un tableau comprenant plusieurs
lignes et plusieurs colonnes (voir schéma plus bas de mon fichier), je peux
utiliser Index/Equiv
=INDEX(plage;EQUIV(cellule de la date de maintenant;plage;valeur exacte))

Fonction 3 : Déterminer la présence ou l'absence de l'employé.
=SI(CELLULE DE LA DATE DU JOUR EST GRISE; si vrai "ABSENT"; si faux "PRÉSENT"

Récapitulatif
=SI(NBCOLOR(INDEX(plage;EQUIV(cellule date maintenant;plage;0));Cellule de
couleur de référence)>0;"ABSENT";"PRÉSENT")

Adaptée à mon tableau, la formule se lit comme suit :
=SI(NBCOLOR(INDEX('2009'!$H$5:$H$11;EQUIV(LIST!$B$1;'2009'!$H$5:$H$11;0));'2009'!$G$2)>0;"ABSENT";"PRÉSENT")

Mon problème est le suivant : la formule fonctionne que dans la plage d'une
seule colonne (ici de H5:H11 représentant 1 semaine du mois de janvier). Mais
quand je veux étendre ma plage pour les autres mois, un message #Valeur!
m'apparaît! Pourtant ca fonctionne super bien lorsque ma plage n'est qu'une
colonne.

Voici un croquis de mon fichier :

Lig/col H I J K
janvier février mars ...
5 D 4 11 18 15
6 L 5 12 19 25
7 M 6 13 20 26
8 M 7 14 21 27
9 J 8 15 22 28
10 V 9 16 23 29
11 S 10 17 24 30


S'il vous plaît, qu'en pensez-vous? Peut-être aurais-je dû choisir
d'identifier les vacances pour un autre moyen que la couleur, mais par aspect
pratique et visuel, cette méthode est préférable pour nous.

Merci de votre aide!

--
Billy


Billylaroche
Le #18046431
Bonjour,

J'ai tenté de suivre votre conseil, mais malheureusement ça ne fonctionne
toujours pas sur plusieurs colonnes.

=SI(NBCOLOR(INDEX('2009'!H5:H11;EQUIV(LIST!B1;'2009'!H5:H11;0));'2009'!G2:G3)>0;"absent";"présent")

L'imbrication ne fonctionne que sur 1 seule colonne. La fonction
Index/Équivalent ne me permet pas la recherche sur plusieurs colonnes.

Néanmoins, je tiens à vous remercier d'avoir pris le temps de me répondre.

--
Billy


"Papyjac" a écrit :

Bonjour Billylaroche,

Je te vais pas te donner la solution, mais une piste pour l'atteindre.

En ta formule qui marche me fait peur. je te propose avant de pousuivre de
décomposer ta formule en formule élémentaire non imbriquée.
Mettre chaque formule intermédiaire dans une cellule différente
Une cellule pour le SI
Une cellule pour Le NBColor
Une cellule pour le INDEX
Une cellule pour le EQUIV
Je pense en effet que tu as 4 niveau d'imbrication
Tu fais marcher cette série de formule pour ta colonne H5 à H11
Puis tu chercheras à étendre
Ensuite tu effectueras la mise au point
Puis tu réimbriqueras tes formule

Le résultat sera peut être plus simple ou plus complexe. Tu verras bien
bien. Mais s'il est plus complexe je te déconseille d'imbriquer tes formules
car personne, ni toi sauras la modifier l'année prochaine


--
Papyjac


"Billylaroche" a écrit :

> Bonjour,
>
> J'ai créé un calendrier de vacances.
>
> Dans un onglet, j'ai le calendrier :
> Avec la formule suivante dans un module, je peux indiquer et compter les
> vacances des employés en colorant les cellules correspondantes aux dates de
> vacances :
>
> Function NBCOLOR(Cible As Range, oRef As Range) As Long
> Dim o, i%, k%
> Application.Volatile
> k = oRef.Interior.ColorIndex
> For Each o In Cible
> If o.Interior.ColorIndex = k Then i = i + 1
> Next
> NBCOLOR = i
> End Function
>
> Dans un autre onglet, j'ai une liste qui indique, à partir du calendrier de
> vacances, si l'employé à la date du jour est présent ou absent.
>
> La formule doit d'abord rechercher dans le calendrier la date du jour et si
> la cellule correspondante est en gris, indiquer que l'employé est absent, et
> si la cellule n'est pas coloriée, l'employé est absent.
>
> Voici mon raisonnement :
> Fonction 1: Compter les vacances représentées par des cellule en couleur
> Si la cellule est en grise, c'est que la cellule vaut 1.
> =NBCOLOR(PLAGE;cellule de couleur de référence)>0
>
> Fonction 2 : Rechercher la date de maintenant dans le calendrier
> Si je dois chercher la date du jour dans un tableau comprenant plusieurs
> lignes et plusieurs colonnes (voir schéma plus bas de mon fichier), je peux
> utiliser Index/Equiv
> =INDEX(plage;EQUIV(cellule de la date de maintenant;plage;valeur exacte))
>
> Fonction 3 : Déterminer la présence ou l'absence de l'employé.
> =SI(CELLULE DE LA DATE DU JOUR EST GRISE; si vrai "ABSENT"; si faux "PRÉSENT"
>
> Récapitulatif
> =SI(NBCOLOR(INDEX(plage;EQUIV(cellule date maintenant;plage;0));Cellule de
> couleur de référence)>0;"ABSENT";"PRÉSENT")
>
> Adaptée à mon tableau, la formule se lit comme suit :
> =SI(NBCOLOR(INDEX('2009'!$H$5:$H$11;EQUIV(LIST!$B$1;'2009'!$H$5:$H$11;0));'2009'!$G$2)>0;"ABSENT";"PRÉSENT")
>
> Mon problème est le suivant : la formule fonctionne que dans la plage d'une
> seule colonne (ici de H5:H11 représentant 1 semaine du mois de janvier). Mais
> quand je veux étendre ma plage pour les autres mois, un message #Valeur!
> m'apparaît! Pourtant ca fonctionne super bien lorsque ma plage n'est qu'une
> colonne.
>
> Voici un croquis de mon fichier :
>
> Lig/col H I J K
> janvier février mars ...
> 5 D 4 11 18 15
> 6 L 5 12 19 25
> 7 M 6 13 20 26
> 8 M 7 14 21 27
> 9 J 8 15 22 28
> 10 V 9 16 23 29
> 11 S 10 17 24 30
>
>
> S'il vous plaît, qu'en pensez-vous? Peut-être aurais-je dû choisir
> d'identifier les vacances pour un autre moyen que la couleur, mais par aspect
> pratique et visuel, cette méthode est préférable pour nous.
>
> Merci de votre aide!
>
> --
> Billy


Publicité
Poster une réponse
Anonyme