Fusion et transposition de plusieurs array de taille différents

Bonjour les experts,

Je découvre tout juste VBA, et je suis épaté par la puissance de cet outil.

J'ai pu créer une macro relativement complexe (pour mon niveau du moins) allant récupérer des données dans divers fichiers excel dont les plages sont dynamiques.

J'ai réussi à transformer ces données en "array" afin d'en accélerer le traitement et la restitution, mais je me casse désormais les dents sur un problème qui pour beaucoup d'entre vous devrait être simple à résoudre, mais pour moi qui débute dans VBA, est très compliqué.

Je me suis appuyé des informations trouvées sur le site boisgontierj, mais malgré tout, je sèche :

J'ai plusieurs array de taille différentes, correspondant pour chaque année (2020 et 2021 pour le moment, 2022 plus tard) à différents type de données :

nb de commandes classiques pour 2020, nombre de commande internet 2020, CA 2020, nb de ligne de commandes 2020.

Je souhaiterai "fusionner" ces array par année, mais la structure de mes données rend la chose complexe.

Je joins un fichier démo qui résume mon objectif (beaucoup plus simple que de le décrire).

Dans l'idée, j'avais l'intention de créer une clé unique par array combinant le code client et le mois. Ensuite de rechercher cette clé dans chaque array et de remonter le résultat dans une cellule. Puis enfin de transposer cet array. Malheureusement, mes compétences me limitent fortement dans la rédaction du code. (il y a une semaine encore, je ne savais rien écrire en VBA)

Mon fichier sera je pense plus parlant.

Merci d'avance du coup de main

Amicalement

14demo.xlsx (10.70 Ko)

Bonjour,

Ta présentation est un peu nébuleuse : malgré la pièce jointe.

L'utilisation des Array est déjà un exercice de programmation assez avancé : L'utilisation habituelle est effectivement de parcourir chaque array pour récupérer chaque valeur et la transposer dans un Array de synthèse qui sera directement collé dans la feuille cible.

Comme c'est quand même de la macro d'horloger, ça ne me parait pas possible d'être plus précis au vu de ta présentation.

A+

Bonjour Galopin, et merci de ta réponse.

Je vais tâcher d'être plus précis.

Je cherche à suivre l'évolution de la prise de commande par le biais d'un site marchand, par rapport au mode classique de prise de commande chez nous (telephone, email etc). Voilà pour le contexte.

Pour cela je suis plusieurs indicateurs issus de différentes requêtes SQL fournies par mon service info. Chacun de ces fichiers est une extraction de base de donnée selon un critère sur une plage de durée (par exemple le nb de commande "site marchand" pour l'année 2020).

Pour schématiser en prenant exemple la prise de commande "site marchand" pour l'année 2020 mon fichier se compose comme suit :

clientX / nb de cde passé par ce biais / 2020 / mois de la commande

Si le client n'a pas passé de commande un mois, la ligne n'existe tout simplement pas.

Mes requêtes ne sont absolument pas liées ce qui signifie par exemple, qu'un client peut etre présent dans le fichier de commande "classique" mais absent dans les commandes "site marchand". Voilà pourquoi mes array ont des tailles différentes.

A la fin, je cherche à obtenir un tableau synthétique des différents indicateurs que je suis du style. Dans l'idée c'est le fichier de démo que j'ai joins à mon premier message.

Sa structure est la suivante :

ClientX / nb de commande site marchand en janvier/ nb de commande classique en janvier / CA du client en janvier / nb de commande site marchand en février / nb de commande classique en février / CA du client en février / ... etc

(Ce fichier ensuite sert de base pour un autre fichier d'études plus poussé avec statistiques avancées etc, d'où la nécessite de l'automatiser au maximum).

Je ne suis pas en mesure de fournir le fichier source car impossible à anonymiser (beaucoup trop de lignes, et d'info), c'est pourquoi j'étais parti sur le fichier de démo.

J'espère que c'est un peu plus clair ?

Dans l'idée, d'après mes maigres connaissances en la matière je me disais qu'il faudrait :

1/ constituer la clé "client" global. Pour cela, j'ai un array de tout les clients.

2/ constituer la clé "mois" global. La c'est facile, il y en a 12 :p

3/ de façon indépendante : créer une clé "fusion" des deux "client/mois". Cette clé est unique. client1/mois1 client1/mois2 ..... client1/mois12. Elle fixe la limite maxi de l'array car elle contiendrait tout les couples client/mois possible.

4/ créer pour chaque array (commande classique / commande internet / CA) ,une clé fusion "client/mois" et comparer si il en manque par rapport aux clés créées à l'étape 3. Si ce couple est absent du tableau, alors le créer et affecter un résultat nul. Ainsi, tout mes array auraient la même taille, ce qui rendrait possible leur fusion horizontale.

5/ Enfin, transposer ces résultats pour obtenir un array en multdimensionnel dont la structure correspond à l'exemple mentionné au dessus.

Mais je ne sais pas si cette méthode est la bonne, ou la meilleure. Et je me heurte à mes limites en matière de rédaction de codage. Je suis un bébé en matière de codage, j'ai tout appris sur le tas à la dure, depuis 1 semaine :)

Pour le moment, j'ai grugé le système en transposant mes différents array pour obtenir un format

clientX /resultat Janvier / resultat fevrier / ...

ensuite, sur une autre feuille, j'extrait de mon array "client" tout les codes clients en cellule A, et toujours en macro, j'insère un vlookup qui va balayer les tableaux a ainsi transposé.

Bonne soirée,

Sur la compréhension ce long exposé n'apporte rien de plus que je ne pressentais.

Et sur la faisabilité non plus. Aussi je ne sais pas trop quoi te répondre... Tout au plus quelques pistes, réflexions...

Sur l'hypothèse d'une clef mixte (client/mois) j'y crois pas plus qu'à une clef client seul... Sauf si chaque client est déjà référencé par une clef quelconque issue de votre système de gestion...

Après c'est pas compliquer de faire rentrer touts tes arrays dans un calendrier à 3 x12 = 36 colonnes si tu as une clef client satisfaisante.

Après... il faut pas être manchot pour extraire tous ces renseignements des différentes sources et les mettre en place dans un tableau de synthèse.

Vlookup heu... Sans vouloir te froisser je rigole !

Bref tout ça est vraiment très hypothétique : ou tu es capable d'anonymiser tes sources en supprimant ce qui est superflu, mail, adresse, téléphone... et dans ce cas tu trouveras surement un passionné désoeuvré qui te fera ça aux petits oignons, ou ça ne te parait pas possible et je ne vois vraiment pas ce que le forum pourra t'apporter.

Mébon tu peux toujours attendre la fin de la soirée pour voir si quelqu'un à un autre avis. En général quand je dis une c... Il y a toujours quelqu'un pour tousser.

Sinon, ben pas d'autre idée.

A+

Ben écoute, je ne sais pas quoi te dire non plus.

merci néanmoins d'avoir pris la peine de faire une réponse. Cela dit....

J'ai pris le temps de t exposer ce que je voulais faire avec des exemples et un fichier qui ma foi, ne me semblait pas si obscur que cela.

Mais soit. J'admet que cela puisse paraître nebuleux. Mais peut être pourrais tu me dire ce qui te semble pas clair ?

Ce qui te semble "pas compliqué" l'est forcément plus pour moi. Il me semble avoir expliqué que je débutais. Si j'avais les réponses, je ne viendrais pas les chercher ici.

Par ailleurs, je te remercie pour le fait de ne pas être manchot. Mais vois tu, j'ai lu, beaucoup. Beaucoup de ressources. Et je n ai trouve nul part de méthode permettant de m aider à aller au bout des 4 étapes que j ai expliqué dans mon précédent post. Et pourtant de rien, je suis arrivé à construire une macro plutôt robuste. Mais oui. Combiner 4 array de taille différente m est compliqué. Je n ai aucun problème à être manchot.

et pour le vlookup.... Oui. Nous sommes d accord que ce n est sûrement pas une méthode glamour.

cest pour cela que je cherche une autre façon de faire. Sinon je ne m embêterai pas a venir ici. Cette solution bien que pas terrible a au moins le mérite de fonctionner le temps de faire quelque chose de plus efficient.

Bonne soiree

Bah... Le mieux est d'attendre si quelqu'un est plus inspiré que moi ! Les oiseaux de nuit ont souvent une vue un peu différente...

A+

Rechercher des sujets similaires à "fusion transposition array taille differents"