Mak_tarmak
XLDnaute Junior
Bonjour,
Je sollicite votre conseil car je n'arrive pas à trouver la bonne méthode pour obtenir ce que je veux.
Dans un fichier, j'ai deux onglets :
- ELT_SESSIONS qui contient des cellules avec des données fixes (en gris) et des données calculées en vba (en jaune).
On peut effacer à souhait les données en jaune, elles sont générées par les macros.
- audit_user qui contient les données d'un rapport qui peut faire plus de 50 000 lignes.
Ce fichier me sert à contrôler des présences de stagiaires par rapport à des heures saisies afin de voir si elles coincident.
Par exemple le code session 6380 devrait remonter 4, 4, 1 dans les colonnes D à K car le code utilisateur 3102465 apparait 2 fois dans audit_user.
Du coup, cela influera aussi sur la somme des heures en colonne O puisque l'on prendra 7 au lieu de 10,5 pour cet utilisateur.
La macro ctrl_presences est censée parcourir chaque id session de la colonne B de ELT_SESSIONS et vérifier s'il y a une occurrence dans la colonne I de audit_user.
Si l'id session est trouvé dans audit_user, elle doit vérifier dans la colonne A que le code utilisateur est unique. S'il y a plusieurs fois le même code, il ne faut traiter que la dernière ligne de ce code utilisateur (il peut y avoir 3 ou 4 fois le même code utilisateur mais il ne faut pas supprimer les autres lignes, juste ne pas en tenir compte dans le traitement).
Une fois que la liste des codes utilisateurs valides est dressée, je regarde la valeur du statut d'avancement dans N et je compte combien de fois il apparait selon une liste de statuts et je colle chaque compte dans les cellules D à K pour chaque id session.
Sur cette macro, mon compte est faux car je n'arrive pas à écarter les lignes précédentes quand il y a plusieurs codes utilisateurs identiques.
La macro CalculerPrevisionHeures me calcule la prévision d'heures si toutes les inscrits en colonne C de ELT_SESSIONS sont tous présents.
La macro CalculerHeuresParStatut me calcule le nombre d'heures que je dois avoir (colonne N) en fonction des statuts de présence (colonnes D à K) et du nombre de segments (colonne L).
Un segment est une demi-journée de 3,5 heures.
Si une personne est absente, cela retourne 0.
Si présente, cela retourne le nombre de présents * (nbre de segments * 3,5).
Si partiellement présent, cela retourne le nombre de partiellement présent * ((nbre de segments * 3.5) - 3.5))
Actuellement mon nombre d'heures retournées est faux car je n'arrive pas à écarter les lignes des codes utilisateurs en plus sur la macro précédente.
La macro ReelHeuresSaisies est censée retournée la somme des heures en colonne O de audit_user, une fois les codes utilisateurs identiques écartés en ne gardant que celui de la dernière ligne.
Je n'ai pas le droit de supprimer des lignes dans le rapport, c'est pour cela que je voulais vérifier les codes utilisateurs uniques et les stocker dans une collection ou un dictionnaire mais je ne maitrise pas cette fonctionnalité et je n'ai pas réussi à adapter les différentes macros que j'ai trouvé sur le sujet.
J'espère que vous pourrez m'orienter sur une méthode qui pourrait convenir car je ne sais plus par quel bout attaquer
Si j'ai oublié quelque chose, n'hésitez pas à revenir vers moi.
En vous remerciant,
Je sollicite votre conseil car je n'arrive pas à trouver la bonne méthode pour obtenir ce que je veux.
Dans un fichier, j'ai deux onglets :
- ELT_SESSIONS qui contient des cellules avec des données fixes (en gris) et des données calculées en vba (en jaune).
On peut effacer à souhait les données en jaune, elles sont générées par les macros.
- audit_user qui contient les données d'un rapport qui peut faire plus de 50 000 lignes.
Ce fichier me sert à contrôler des présences de stagiaires par rapport à des heures saisies afin de voir si elles coincident.
Par exemple le code session 6380 devrait remonter 4, 4, 1 dans les colonnes D à K car le code utilisateur 3102465 apparait 2 fois dans audit_user.
Du coup, cela influera aussi sur la somme des heures en colonne O puisque l'on prendra 7 au lieu de 10,5 pour cet utilisateur.
La macro ctrl_presences est censée parcourir chaque id session de la colonne B de ELT_SESSIONS et vérifier s'il y a une occurrence dans la colonne I de audit_user.
Si l'id session est trouvé dans audit_user, elle doit vérifier dans la colonne A que le code utilisateur est unique. S'il y a plusieurs fois le même code, il ne faut traiter que la dernière ligne de ce code utilisateur (il peut y avoir 3 ou 4 fois le même code utilisateur mais il ne faut pas supprimer les autres lignes, juste ne pas en tenir compte dans le traitement).
Une fois que la liste des codes utilisateurs valides est dressée, je regarde la valeur du statut d'avancement dans N et je compte combien de fois il apparait selon une liste de statuts et je colle chaque compte dans les cellules D à K pour chaque id session.
Sur cette macro, mon compte est faux car je n'arrive pas à écarter les lignes précédentes quand il y a plusieurs codes utilisateurs identiques.
La macro CalculerPrevisionHeures me calcule la prévision d'heures si toutes les inscrits en colonne C de ELT_SESSIONS sont tous présents.
La macro CalculerHeuresParStatut me calcule le nombre d'heures que je dois avoir (colonne N) en fonction des statuts de présence (colonnes D à K) et du nombre de segments (colonne L).
Un segment est une demi-journée de 3,5 heures.
Si une personne est absente, cela retourne 0.
Si présente, cela retourne le nombre de présents * (nbre de segments * 3,5).
Si partiellement présent, cela retourne le nombre de partiellement présent * ((nbre de segments * 3.5) - 3.5))
Actuellement mon nombre d'heures retournées est faux car je n'arrive pas à écarter les lignes des codes utilisateurs en plus sur la macro précédente.
La macro ReelHeuresSaisies est censée retournée la somme des heures en colonne O de audit_user, une fois les codes utilisateurs identiques écartés en ne gardant que celui de la dernière ligne.
Je n'ai pas le droit de supprimer des lignes dans le rapport, c'est pour cela que je voulais vérifier les codes utilisateurs uniques et les stocker dans une collection ou un dictionnaire mais je ne maitrise pas cette fonctionnalité et je n'ai pas réussi à adapter les différentes macros que j'ai trouvé sur le sujet.
J'espère que vous pourrez m'orienter sur une méthode qui pourrait convenir car je ne sais plus par quel bout attaquer
Si j'ai oublié quelque chose, n'hésitez pas à revenir vers moi.
En vous remerciant,
Pièces jointes
Dernière édition: