Re : [VBA] - PLANNING - Extraire rationnellement les infos d'un tableau à 2 dimension
Bonjour Jean Marie,
Bonjour le forum,
Waouh, tu es allé plus loin que je ne l'imaginais !
Tu as déjà bossé sur la restitution des données alors que j'en suis qu'à l’extraction des données et leur agrégation dans des tableaux virtuels.
Si je sais que je compte utiliser un Usf comme interface de sélection (choix de filtrage, et choix d'édition), je n'ai pas encore vraiment envisagé la configuration finale. J'attends d'avoir toutes les données utiles.
Mais l'idée du Usf avec des Listview me semble excellente et pertinente. Je comptais utiliser des list et des combobox.
Une question toutefois sur ces Listview : elles ne figurent pas d'office dans la boite à outil Excel 2007 (je suis descendu de XL 2010 à XL 2007 vu que la plupart des utilisateurs seront probablement en version 2007). Je suppose qu'on peut les ajouter mais en fouinant sur le net, j'ai relevé que des messages d'erreurs apparaissaient parfois du fait de ce contrôle selon les versions utilisées. C'est toujours d'actualité ?
Quand au code que tu fournis, c'est une vrai mine d'or ... mais je n'ai pas encore tout étudié : le VBA c'est comme une langue étrangère qu'on n'a plus utilisé depuis un moment : ça revient petit à petit, mais j'ai besoin encore d'un peu de temps pour tout décortiquer.
Pendant que tu travaillais dur sur ma demande (je n'en attendais pas autant - merci !), j'ai poursuivi ma quête de données à partir du fichier "Data" initial.
J'en suis arrivé à un tableau virtuel dont je te fournis une extraction.
A partir de ce tableau, je sais faire un filtrage avec une boucle et des "Select Case" mais je me doute que ce n'est pas optimal et qu'on peut envisager d'autres méthodes plus rationnelles et efficaces :
- via la méthode
"Find"
- via l'objet
"Dictionary" : là je découvre. Quand je pratiquais assidument le VBA dans les années 2005-2010, je n'en avais pas entendu parler. J'ai vu quelques exemples et je devine le potentiel de cette méthode. Est-elle la mieux adaptée à mon tableau, je n'en sais rien ?
- via d'autres méthodes qui ne me viennent pas à l'esprit
Là, inutile de consacrer trop de temps à construire mon projet, je ne déciderai du mode de restitution qu'une fois toute la phase d'extraction réalisée.
J'aimerais juste avoir un avis pertinent sur la meilleure façon de filtrer mon tableau de synthèse (et éventuellement d'un exemple pour "Find" et "Dictionary" si ces méthodes sont adaptées)
Concernant tes demandes :
"XX" : ce n'est ni une Tâche, ni une Absence. Il s'agit de la représentation d'un temps non travaillé quand la personne est présente ce jour là, mais qu'elle n'est pas encore arrivée, qu'elle est en "pause déjeuner", ou qu'elle à terminé son service :
En effet la plage horaire du fichier d'origine "Data" démarre à 06:00 et termine à 19:45 soit 13,8 heures (et je suis tenu malgré tout de faire respecter le Code du travail
)
Quand une personne est absente l'intégralité de la journée (congés par exemple), l'Absence correspondante est annoté de 06:00 à 19:45
Quand elle est présente et travaille dans la plage horaire 08:00 16:30, les cellules 06:00-07:45 sont marquées par "XX", idem pendant la pause déjeuner et le soir après sa fin de service.
Les cases vides sont des anomalies puisque :
toutes les cellules de 06:00 à 19:45 doivent être complétées par : une Tâche (T1 à T23), une Absence (A1 à A19), ou "XX"
Si la case est vide, c'est que la planif est incomplète ou qu'une donnée a été supprimée
Le total agent par ligne doit être de 55 quarts d'heure ou 13,8 heures (soit l'équivalent de cette plage 06:00 19:45)
(j'ai volontairement mis quelques cellules vides dans l'exemple pour vérifier que leur décompte fonctionne bien)
J'ai fini la phase d'extraction, j'en suis à la phase de filtrage :
Je te joins un fichier tout simple avec les données telles que je les ai agrégées.
Ne passes pas trop de temps à vouloir finaliser mon projet, j'ai juste une question sur la meilleure façon de filtrer mes données
Tout est expliqué dans le fichier .
Plus tard, quand j'aurais tous les tableaux alimentés par les différents filtres, je verrai comment restituer au mieux et te demanderai si besoin.
Tu vas bien plus vite que moi !
En tout cas un énorme merci pour le travail effectué. Je vais consacrer un moment à détailler ton code.
A+
Kotov