Bonjour,
J'ai chargé ton fichier mais pas encore étudié ... on est passé de 10Mo à 28Mo, cela commence à faire beaucoup, il faudra peut-être envisager à terme de scinder en plusieurs fichiers "homogènes" quitte à dupliquer la BD. Traiter à part les absences par exemple et les primes.
Peux tu m'expliquer comment faire pour aller chercher les informations dans les autres tableaux stp merci.
Absolument, il faut en effet que tu maîtrise toutes les fonctions peut-être nouvelles pour toi, mais plus simples du reste que SOMMEPROD.
Prenons l'onglet MOIS
- en L2
=EQUIV(D1;ABSENCE!$8:$8;0)
ce qui signifie que je vais rechercher dans la ligne 8 de l'onglet ABSENCE la valeur de D1 (début de période) = c'est la fonction EQUIV avec le paramètre 0 au bout
- en L3
=EQUIV(F1;ABSENCE!$8:$8;0)
ce qui signifie que je vais rechercher dans la ligne 8 de l'onglet ABSENCE la valeur de F1 (fin de période) = c'est la fonction EQUIV avec le paramètre 0 au bout
=> à ce stage je sais donc quelles sont les colonnes de ABSENCE concernées par la période
- en colonne L, à partir de L6
=EQUIV(A6;ABSENCE['#Rep];0)
je vais chercher la valeur #Rep dans l'onglet ABSENCE, plus exactement dans le tableau ABSENCE à la colonne #Rep
=> à ce stade, je connais donc aussi la ligne concernée par la personne (ou le contrat) identifiée par son #Rep
Qu'est-ce qu'on peut faire avec cela ? Hé bien d'abord déterminer la zone ("matrice") concernée par une fonction DECALER. Cette zone est :
DECALER(ABSENCE[[#En-têtes];['#Rep]];$L6;$L$2-1;1;$L$3-$L$2+1)
qui veut dire :
- - je pars de ABSENCE[[#En-têtes];['#Rep]] l'en-tête intitulée #Rep du tableau ABSENCE
- - je décale la ligne de la valeur trouvée en L6
- - je décale la colonne de la valeur trouvée en L2-1
- - je prends une seule ligne
- - je prends (L3-L2+1) colonnes
Et au final, on comptera le nombre de fois où on rencontre le terme de la ligne 4 dans cette zone, exemple :
=NB.SI(DECALER(ABSENCE[[#En-têtes];['#Rep]];$L6;$L$2-1;1;$L$3-$L$2+1);M$4)
Prenons l'onglet INDIVIDUEL
- en X4, j'ai la ligne du tableau ANSENCE concernée par la personne (ou du contrat) identifiée par son #Rep en W5
=EQUIV(W5;ABSENCE['#Rep];0)
- en ligne 15, je vais trouver dans les colonnes paires la colonne correspondant au début de chaque mois
Et je vais donc reporter dans le tableau la valeur trouvée dans la cellule obtenue par DECALER ... à noter la subtilité qui est d'utiliser la ligne courante LIGNE()-LIGNE(A$16)
pour incrémenter les jours du mois.
Si c'est pas clair, n'hésite pas !
Michel