Fonction indirecte???

valenti

XLDnaute Nouveau
Bonjour à tous,

Je vous fait parvenir un fichier sur lequel une personne du forum (Gael) a travaillé dessus afin de m'aider à résoudre mon problème.

Gael m'a fait du bon boulot mais le problème c'est que cette personne a utilisé des formules que je ne connais pas et j'aimerai en comprendre le sens.

Par exemple:

=SI(ESTERREUR(INDIRECT(NomF&"!$B$5"));"";NB.SI(PSEM1;"=9:00"))

=MAJUSCULE(TEXTE('DET HORAI'!$C10;"mmmm")&ANNEE('DET HORAI'!$C10))

=DECALER(INDIRECT(NomF&"!$B$5");Nosem*22;(JOURSEM('DET HORAI'!$C10;3))*4;19;1)


Aussi, à l'intérieur du fichier je vous soumet un dsyfonctionnement dans l'utilisation de celui-ci.

Lien du fichier:
Cijoint.fr - Service gratuit de dépôt de fichiers

Merci et bonne journée
 

tototiti2008

XLDnaute Barbatruc
Re : Fonction indirecte???

Bonjour valenti,

peut-être y aller par étape...

La fonction Indirect permet de transformer un texte en référence de plage de cellules

Code:
=INDIRECT("A1")

renvoie la valeur de la cellule A1

Code:
=SOMME(INDIRECT("A1:B12"))

renvoie la somme des valeurs de A1 à B12

L'intérêt est que comme il s'agit de texte, il est possible de modifier un numéro de la référence en se basant sur un calcul par exemple, et donc de construire une référence variable
 

Gael

XLDnaute Barbatruc
Re : Fonction indirecte???

Bonjour Valenti, Tototiti, le Forum,

Je réponds tout d'abord à ton dernier message sur l'autre fil, mais tu aurais du rester sur la même discussion:

Par contre j'aurai aimé que certains jours appartenant au mois précédent soient pris en compte.
Je m'explique: par exemple le mois de Juillet début avec le lundi 28, le mardi 29 et le mercredi 30 Juin mais le nombre de personnes présentes ne s'affiche pas.
Es-possible de remédier à ce problème???

Sauf erreur de ma part, ce problème n'existe pas. Dans ton exemple, il n'y a pas de feuille "JUIN2010" donc aucun résultat à afficher. Si tu crées la feuille correspondante, les résultats devraient apparaître.

Pour l'explication des formules:

Code:
=MAJUSCULE(TEXTE('DET HORAI'!$C10;"mmmm")&ANNEE('DET HORAI'!$C10))

C'est la définition de "NomF" qui correspond au nom de la feuille.

Le nom varie en fonction de la ligne sur laquelle on se trouve. Si l'on est en ligne 10 de la feuille "DET HORAI", on va chercher le mois et l'année de la date en colonne C de cette ligne pour constituer le nom de la feuille.

Ex: en C10 on a "Samedi 3 juillet", le mois complet sera obtenu avec la fonction TEXTE et le format "mmmm" et la fonction MAJUSCULE va le mettre en majuscules soit: "JUILLET" et l'on ajoute l'année pour avoir "JUILLET2010" comme nom de feuille.

Le nom "Nosem" correspond au numéro relatif de la semaine, 0 pour la première, 1 pour la deuxième etc.

Code:
=DECALER(INDIRECT(NomF&"!$B$5");Nosem*22;(JOURSEM( 'DET HORAI'!$C10;3))*4;19;1)

Cette formule définit la plage PSEM1:
On decale la cellule B5 de la feuille du mois par ex "JUILLET2010!$B$5" de 0, 22, 44 etc lignes selon la semaine car il y a 22 lignes au total pour une semaine dans la feuille du mois puis de 4 fois le n° du jour en commencant à 0 pour le lundi car il y a 4 colonnes par jour, on conserve une hauteur de 19 lignes et une largeur d'une colonne.

Enfin, la formule
Code:
=SI(ESTERREUR(INDIRECT(NomF&"!$B$5"));"";NB.SI(PSE M1;"=9:00"))

va servir:
1 - à ne rien mettre dans la cellule si la feuille n'existe pas
2 - Si OK, on compte le nombre de "9:00" dans PSEM1 qui est la plage du jour de la colonne C.

Dans les autres colonnes, on décale la plage de 1 2 ou 3 colonnes pour gérer les différentes heures:

ex: pour 12h-13h:
Code:
NB.SI(DECALER(PSEM1;;1;);">12:00"))
, la plage est décalée d'une colonne pour considérer la 2ème colonne du jour au lieu de la première.

Voilà, j'espère que c'est à peu près clair. Ajoute une feuille pour le mois de JUIN2010 avec quelques chiffres et tu devrais voir les résultats dans le détail horaire.

@+

Gael
 

Statistiques des forums

Discussions
312 584
Messages
2 089 985
Membres
104 328
dernier inscrit
Bocain