Pointer dans une liste selon deux critères

marc.as

XLDnaute Junior
Bonjour à tous,

J'ai un fichier de 3 feuilles
- base contient une liste de noms avec des numéros et des jours (lu-ma-je) pour chaque nom. Les jours ne sont pas les mêmes pour tous.
- Today dans laquelle je pointe les présents par leur numéro (la fonction recherche me donne les noms...)
- absents dans laquelle je voudrais pointer les absents de la feuille "today" MAIS, le pointage des absents de la feuille "today" doit tenir compte des jours de présences indiqués dans la liste de la base : une personne absente un lundi mais qui ne devait pas être là le lundi n'est pas un absent..

Le pointage des absents doit se faire une fois, en fin de session, c'est à dire quand tous les présents sont pointés dans la feuille today.

j'espère avoir été assez clair, si non, dites moi... je joins un exemple de fichier.
J'ai imaginé des solution avec des if et des boucles pour reprendre tous les présents, mais je bute sur la vérification du jour de présence.

J'ai mis un bouton et une ébauche de code qui lancerait ce pointage, mais mes compétences sont très limitées.
Merci pour votre aide efficace et chaque fois renouvelée

Cordialement
Marc A.S.
 

Pièces jointes

  • Exemple Marc V1-3.xlsm
    21.5 KB · Affichages: 23
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Pointer dans une liste selon deux critères

Bonjour

Une possibilité en pièce jointe, avec une formule matricielle à valider avec Ctrl+maj tempo+entrer, uniquement pour les badges des absents (Pour les autres colonnes, tu pourras faire avec un RECHERCHEV).



@ plus
 

Pièces jointes

  • 323705d1418735905-pointer-dans-une-liste-selon-deux-criteres-exemple-marc.xlsm
    19.1 KB · Affichages: 27
Dernière édition:

marc.as

XLDnaute Junior
Re : Pointer dans une liste selon deux critères

Merci Cisco,
Je n'avais pas imaginé une solution par une formule, je n'ose pas dire un simple formule dans la mesure où je suis assez loin de comprendre comment cette dernière s'organise en détail.
Je vais me creuser un peu les méninges pour y voir plus clair

Encore une fois merci pour ton aide
mac A.S.
 

CISCO

XLDnaute Barbatruc
Re : Pointer dans une liste selon deux critères

Bonsoir

Il me semble que le NON dans la formule était de trop (On cherche dans la feuilles base! des gens devant travailler aujourd'hui, et pas le contraire). Je le supprime et je modifie le précédent fichier en conséquence. J'y ajoute aussi quelques $ oubliés. Résultat, on obtient les bons résultats, mais des #NOMBRE peuvent apparaitre. Je vais essayer d'arranger ça.

En attendant, histoire de t'aider un peu à comprendre la formule utilisée, quelques explications :

En A5

(NB.SI(Today!A$4:A$16;Badges)=0 renvoie VRAI si le n° de badge, pris dans la feuille base!, n'est pas présent dans la liste des n° de badges dans la feuille Today (donc la personne est absente aujourd'hui), FAUX s'il est présent. Comme on travaille en matriciel, on fait le calcul NB.SI pour tous les n° de badges. Cela renvoie donc une liste de VRAI et de FAUX.

ESTNUM(CHERCHE(STXT(TEXTE(AUJOURDHUI();"jjj");1;2);Les_jours)) renvoie VRAI si les deux premières lettres d'aujourd'hui sont sur la ligne testée en colonne base!D (donc la personne correspondant à cette ligne devait travailler ce jour là). Comme on travaille en matriciel, cela renvoie donc une liste de VRAI et de FAUX.

(NB.SI(Today!A$4:A$16;Badges)=0)*ESTNUM(CHERCHE(STXT(TEXTE(AUJOURDHUI();"jjj");1;2);Les_jours)) renvoie une liste de 0 et de 1 (FAUX*FAUX = 0, FAUX*VRAI= 0, VRAI*VRAI=1)

SI((NB.SI(Today!A$4:A$16;Badges)=0)*ESTNUM(CHERCHE(STXT(TEXTE(AUJOURDHUI();"jjj");1;2);Les_jours));LIGNE(Badges)) renvoie la liste des n° de lignes contenant des n° de badges dans la feuille base! non cités dans la feuille Today des gens devant travailler aujourd'hui.

PETITE.VALEUR(SI((NB.SI(Today!A$4:A$16;Badges)=0)*ESTNUM(CHERCHE(STXT(TEXTE(AUJOURDHUI();"jjj");1;2);Les_jours));LIGNE(Badges));LIGNES(Absents!$4:4))) renvoie la première plus petite valeur de cette liste. En A6, cela sera la seconde plus petite valeur, en A7, la troisième...

INDEX(base!A$1:A$18;PETITE.VALEUR(SI((NB.SI(Today!A$4:A$16;Badges)=0)*ESTNUM(CHERCHE(STXT(TEXTE(AUJOURDHUI();"jjj");1;2);Les_jours));LIGNE(Badges));LIGNES(Absents!$4:4))) renvoie le contenu de la colonne base!A$1:A$18 sur la ligne trouvée précédemment.

La condition après le SI permet d'avoir des "" lorsqu'il ni y a plus de n° de badge à afficher.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Pointer dans une liste selon deux critères

Bonsoir

Quelques modifications plus tard...

@ plus
 

Pièces jointes

  • 323705d1418735905-pointer-dans-une-liste-selon-deux-criteres-exemple-marc bis.xlsm
    19.1 KB · Affichages: 32
Dernière édition:

marc.as

XLDnaute Junior
Re : Pointer dans une liste selon deux critères

Merci CISCO,
J'allais me pencher sur ta solution ce WE pour l'intégrer dans mon fichier.
Merci pour la version 2 et les explications. Dans l'ensemble, je connaissais toutes les fonctions ou presque, mais c'est leur imbrication que je trouve géniale.
C'est surtout la validation matricielle dont je ne perçois pas totalement la portée. je l'ai déjà vu dans certains fichiers d'aide, mais je ne l'avais encore pas utilisé vraiment.

Thank's a lot
Marc A.S.
 

marc.as

XLDnaute Junior
Re : Pointer dans une liste selon deux critères

Bonjour SISCO,
Bonjour à tous,

Je bute sur un problème que je ne sais pas résoudre avec ta formule.
Dans mon fichier de gestion, je pars de 2 feuilles qui sont des modèles.
Quand j'arrive le jour J pour faire un pointage des passages, j'ai une macro qui fait une copie de chacun des modèles et qui les renomme en y ajoutant la date du jour pour les archiver en fin de session. . (la macro d'archivage recopie en valeur tout le contenu de la feuille pour le couper des éventuelles modifications de la base.

Du coup, avec les changement de nom des feuilles, les formules qui font références à la base ne changent pas mais toutes les coordonnées faisant référence à la feuille "Today" ou "Absents" sont frappées d'obsolescence puisque j'ai une nouvelle feuille (today 2014-12-20" et "absents 2014-12-20" par exemple.
C'est la raison pour laquelle j'avais initialement opté pour une solution par macro parce que je sais initialiser une variable qui prend le nom de la feuille de travail actuelle et y revenir.

S'il est possible de gérer la mise à jour de la formule si la feuille change de nom, je n'ai pas la moindre idée de comment m'y prendre.

Si tu sais comment vérifier ou non la présence d'une chaîne de caractère dans une cellule en VBA je suis preneur .
Quoi qu'il en soit, merci pour ton temps et pour tout ce que j'ai appris dans la formule que tu m'as proposée.

Cordialement
Marc A.S.
 

marc.as

XLDnaute Junior
Re : Pointer dans une liste selon deux critères

Bonsoir Cisco et les autres

J'ai pris le temps de suivre le lien que tu m'avais proposé sur les validations matricielles, c'est très intéressant, je comprends mieux leur intérêt.

En creusant un peu, j'ai réussi à boucler mon projet, je n'ai donc plus besoin d'aide.
Merci encore pour la formule de départ et les explications connexes

Cordialement
Marc A.S.
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 894
Membres
103 021
dernier inscrit
Sergyl75