XL 2010 Transformation d'un tableau (Dictionnaire ?)

CISCO

XLDnaute Barbatruc
Bonjour à tous

Pour résoudre une demande sur ce forum, j'ai besoin de transformer des tableaux comme décrit ci-dessous, en simplifiant :
Tableau initial sur une feuille
Tableau initial.JPG

On regroupe toutes les données correspondant à une personne dans une colonne, et on remplace les X par des 0, et les vides par des 1. On obtient le tableau ci-dessous, sans avoir à l'afficher.
TableauUn (Sans la 1ère colonne ci-dessous,juste là pour comprendre la suite...).
TableauUn.JPG


On somme les uns consécutifs. On obtient le TableauUnfinal, sans avoir à l'afficher.
TableauUnfinal.JPG

On doit aussi faire presque le même travail, mais en ne prenant en compte que les W.E (Pour l'exemple de samedi 0 h à lundi matin 5h inclus). A partir de tableauUn (et non à partir de tableauUnfinal), on obtient TableauWE, toujours sans avoir à l'afficher.
TableauWE.JPG

Comme précédemment, on somme les uns contigus, mais cette fois-ci, on ne garde que le dernier de chaque série. On obtient TableauWEfinal, sans avoir à l'afficher.
TableauWEfinal.JPG

Dans tous les tableaux ci-dessus, on peut inverser les colonnes et les lignes. Peu importe...

Après, on fait des calculs assez simples sur les deux tableaux finaux.

J'ai fait quelques essais avec des formules, puis avec une macro avec des boucles et des tableaux VBA (à une ou deux dimensions). Cela semble fonctionner, mais cela rame trop.
De plus dans la réalité, il y a :
* non pas deux noms, mais au moins 130
* non pas 3 journées, mais au moins 365
* non pas 10 colonnes avec des vides ou avec des X, mais 24.
(* et les W.E. vont du samedi 6 h incluse au mardi 6 h excluse)

Conclusion : Je pense qu'il faut procéder autrement, peut-être avec un dictionnaire, en utilisant les noms comme clés...

Si vous avez une idée, merci de mettre un exemple, à partir du tableau initial ci-dessus. Je ferai les transformations nécessaires en conséquence, en fonction du fichier réel. De mon coté, je cherche, mais bon, vu mon niveau en VBA...

@ plus
P.S : Je viens de voir qu'il manque une ligne en bas des 4 derniers tableaux, celle correspondant au 03/01/05 10 h. Peu importe, c'est compréhensible sans cette ligne...
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Ce que je peux vous dire c'est que personnellement j'utiliserais ma fonction Gigogne pour faire ça.
Mais chaque fois que je propose une solution avec ça, d'autres arrivent à faire la même chose avec Power Query, voire de simples TCD.
 

CISCO

XLDnaute Barbatruc
Bonsoir

Merci Dranreb

Et en quoi consiste ta fonction Gigogne, STP ? :)

Je n'avais pas pensé aux TCD. Il va falloir que je m'y remette. N'en ayant pas beaucoup utilisés, j'ai très vite tout oublié !!!

En travaillant sur ce sujet, j'ai vu sur ce fil initié par David84 que tu y étais intervenu. Quelles techniques, que de propositions intéressantes, et très efficaces...

@ plus
 

Dranreb

XLDnaute Barbatruc
Alors j'ai un classeur précurseur fait pour s'installer en xlam, mais quand je propose une solution qui l'utilise j'implante en général le module MGigogne et le module de classe SsGr à même le projet du classeur utilisateur. je le joins quand même parce qu'il a une page d'aide qui explique pas mal de choses.

En gros la fonction Gigogne fabrique et renvoie une collection d'éléments pouvant s'explorer par des boucles For Each In imbriquées. J'y ai pensé parce que dans le cas visé ici on a ainsi des regroupement automatiques à la fois sur les dates et sur les noms.
 

Pièces jointes

  • GigIdx.xlsm
    68.9 KB · Affichages: 3

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
287 536
Messages
1 884 452
Membres
163 314
dernier inscrit
cedric.remacle
Haut Bas