Bonjour à toutes et à tous,
Attention cette question me semble assez complexe et nécessite un très bon niveau d'excel (voir de gestion de bdd)
J'ai une base de données (excel) des articles commandés avec le n° de commande sur la ligne, ainsi que la quantité, comme ceci :
n° cmd | n° produit | qte
Je cherche à identifier les couples (de deux ou plus de 2 articles) qui se vendent le plus ensemble au sein d'une même commande.
Exemple :
n°cmd | n°produit | qte
-----------------------------
1 | A | 1
1 | B | 1
1 | C | 1
2 | C | 1
2 | A | 1
3 | A | 1
3 | C | 1
Résultats : Les couples les plus vendues ensemble :
1 - Couple AC : avec 3 counts
2 - Couple ABC : avec 1 count
Je cherche à effectuer cet exercice via un automatisme (formule excel ou macro) car j'ai une base de données de plus de 100.000 lignes.
Qu'en pensez-vous ? Est-ce possible avec Excel ? Suis-je obligé de le traité informatiquement via du SQL en injectant les données dans une BDD ?
- Tout d'abord je pense la demande n'est pas réalisable dans Excel, car cela demanderait environ 500.000 recherche dans un million de ligne : cela ferait planter Excel (à vérifier ?).
- La solution à laquelle j'avais déjà pensé et qui m'a été confirmé sur un autre forum est la suivante : Faire un algo qui tri les commandes et qui identifie les x couples de chaque commandes (on les insères dans un dictionnaire clé-valeur), et qui pour chacun de ces x couples recherche dans les 1 million de ligne commande s'il a une présence de ce couple et qui le compte. (dans le cas où un couple déjà existant est identifié dans une autre commande : on écrase pas le couple mais on incrémente). Je pense le faire en PL/SQL.
Voilà ce n'est surement pas la solution idéal, d'autant plus qu'elle ne sera pas fait sur Excel... Si d'autres personnes ont une meilleur solution je suis bien sûr preneur !
Bonsoir,
C'est, à mon avis, réalisable avec Excel mais il faut le programmer en VBA.
Il faut lire ta base de données ligne à ligne et traiter de la manière suivante :
1 Nous créons une plage de résultat (dans un autre onglet par exemple) et qui va contenir toutes les clefs que nous allons créer et un compteur
2 lire toutes les lignes d'une commande et les mémoriser (question : combien de lignes possibles par commande ?)
3 trier par référence article (à moins que tu ne certifies que les références soient TOUJOURS dans l'ordre des numéros de références ?) ensuite on crée en mémoire une clef contenant toutes les références.
4 on teste si la clef existe déjà dans la plage si oui on agrémente le compteur de cette clef de 1 ; si non on ajoute une ligne dans la plage et on met le compteur à 1
5 quand toute la base de données a été parcourue, on trie la plage sur base du compteur et on obtient ce que tu demandes me semble t il
Si tu répond aux 2 questions que j'ai posées et que tu donnes un peu plus de détail sur le format de tes références, je veux bien tenter de le réaliser si tu me donnes quelques jours.
A+
Chris
Aux anonymes qui se permettent de mettre des notes négatives :
soit vous justifier votre jugement soit vous proposez une solution sinon : TAISEZ VOUS !
Chris