Autres Code VBA sur Excel 2007

maart

XLDnaute Nouveau
Bonjour,

Hier soir, j'ai commencé un test avec la fonction "prevision" d'excel et des formules alambiquées avec " indirect + prevision " pour modifier la plage prévisionnelle....un fiasco !

Pourriez-vous tenter de me réaliser un code selon le modèle expliqué en pièce jointe, je pense que vous comprendrez le but recherché (score max) et si vous avez une autre idée de formule de modélisation, surtout ne vous gênez pas Lol

Bonne journée.
 

Pièces jointes

  • Classeurtest.xlsx
    13.4 KB · Affichages: 18

maart

XLDnaute Nouveau
je viens de télécharger le fichier.
J'ai du faire Echap au bout de 10 minutes (option ligne=3) car la macro ne s'arrête pas et j'ai vu qu'elle remplit le fichier excel, quand j'ai stoppé elle était à la ligne 62000?
cf fichier joint et allégé.

ps: pour avoir plus de chance au score, on pourrait ajouter la fonction ABS avant l'arrondi ainsi -3 serait équivalent à 3

merci
 

Pièces jointes

  • maart_Codetest.xlsm
    28.4 KB · Affichages: 1

Rouge

XLDnaute Impliqué
J'avais bien précisé que si vous mettiez la valeur la plus faible (3) le temps serait plus long.
De plus, j'avais écrit aussi que pour une valeur choisie de 3, cela faisait 1 million de combinaisons, mais j'avais oublié de préciser que c'était uniquement pour traiter une seule ligne et il faut multiplier ça par le nombre de lignes à traiter pour obtenir le nombre de combinaisons total. Je vous laisse imaginer les calculs, de plus on dépasse allègrement le nombre de lignes d'une feuille excel.
J'ai déplacé la ligne de code qui faisait le calcul des scores, ce qui réduit le temps d'exécution.
J'ai aussi fait quelques corrections.
J'ai mis un tableau avec les résultats obtenus pour le nombre de lignes de la base de données colonne A à G.
Sachez que pour 1 ligne ajoutée dans ces colonnes, vous doublez les temps de calcul.

Cdlt
 

Pièces jointes

  • maart_Code VBA sur Excel 2007_3.xlsm
    21.6 KB · Affichages: 4

maart

XLDnaute Nouveau
A JBARBE: Non, c'est pour le Monopoly lol

A Rouge, merci pour ta macro, mais je ne comprends pas du tout ce qu'elle fait.
A quoi correspond H:M et O:T ?

De plus, ma plage finit à la ligne 24, et la plage trouvée va jusqu'à la ligne 64? c'est impossible.

Merci de m'expliquer mais je pense déjà que je me suis très mal expliqué dans ma demande.....et que si c'est clair pour moi, ce n'est peut-être pas évident ..

En tout cas, merci

Bonne soirée
 

Rouge

XLDnaute Impliqué
Les colonnes H à M et colonnes O à T.

De plus, ma plage finit à la ligne 24, et la plage trouvée va jusqu'à la ligne 64? c'est impossible.
Merci de m'expliquer mais je pense déjà que je me suis très mal expliqué dans ma demande.....et que si c'est clair pour moi, ce n'est peut-être pas évident ..


Alors, si je reprends ce que vous avez demandé dans le fichier joint(dans votre 2ème billet) et d'après ce que j'ai compris:
Supposons qu'on traite la première ligne et que vous vouliez faire les prévisions avec les 9 lignes en dessous. il faut pour chaque colonne passer 1 à 1 tous les chiffres de chaque colonne et en sortir toutes les combinaisons possibles soit 10exp 6 combinaisons. Une fois toutes les combinaisons trouvées pour cette ligne, on passe à la ligne suivante et recommence le cycle. N'était-ce pas ce que vous aviez demandé? Parce que d'après l'image ci-dessous, ça y ressemble fortement.

maart.JPG
 

maart

XLDnaute Nouveau
Bonsoir, c'est bien ce que j'avais cru comprendre...
Non, ce n'est pas pas les chiffres dans la colonne mais les nombres dans les 2 plages de la formule excel qui sont à combiner pour tester différentes plages de la formule.
.
Les nombres en N :S ne sont pas à combiner, c'est le nombre de lignes dans les 2 plages de la formule Excel , ex : A3:A6 renvoie 4 et c'est ici qu'on place les nombres qui ont donné le meilleur score pour les 6 colonnes

je vais juste le marquer sur le fichier joint, je ne sais pas si c'est plus clair ainsi?
J'ai gardé qu'une ligne pour tester la ligne au dessus.

Merci et bonne soirée
 

Pièces jointes

  • Classeurtest2.xlsx
    15.9 KB · Affichages: 1

Rouge

XLDnaute Impliqué
Bonjour,

Alors, vous n'avez pas compris mon fichier.
D'abord sur le terme "Combinaison". La première des choses à faire c'est de sortir toutes les combinaisons qui se font par permutation des chiffres possibles des colonnes B à G et ce pour chaque date. Ces résultats, je les affiche dans les colonnes O à T. Ensuite, il faut calculer les prévisions par colonnes et sur le nombres de lignes demandées et le résultat est inscrit en colonne H à M et en face chaque lignes des colonnes O à T. Il ne reste plus qu'à appliquer la formule des scores avec les valeurs d'un côté des combinaisons (permutations) et les prévisions de l'autre.

Donc, l'affichage en colonnes de O à T de mon fichier n'a rien à voir avec le vôtre pour les colonnes N à S.
Les colonnes O à T ne sont que l'aperçu de la ligne une fois traitée pour chaque permutation de tous les chiffres de ces lignes.
Pour les permutations des valeurs, voici un petit exemple pour trouver toutes les combinaisons possibles de valeurs, avec 3 lignes sur 3 colonnes. 3 * 3 * 3 = 27 combinaisons possibles. Voici ce que renvoient les colonnes O à T de mon fichier (sur 3 lignes et 3 colonnes)
maart.JPG


De plus en préparant, ce billet je me suis aperçu, que mon fichier ne traitait que la première ligne, j'ai dû
faire une mauvaise manip car il n'affiche plus les calculs qui répète ce cycle pour toutes les autres lignes jusqu'à la dernière.

Dans vôtre mot précédent vous écrivez:
"De plus, ma plage finit à la ligne 24, et la plage trouvée va jusqu'à la ligne 64? c'est impossible."
Eh oui et d'après ce qu je viens d'écrire juste au-dessus cela aura dû aller beaucoup plus loin.
D'après-vous, combien devrions-nous trouver de combinaisons?
 

maart

XLDnaute Nouveau
Bonjour Rouge,

Je reviens vers vous avec un fichier d'une colonne pour la clarté du sujet.
Il n'y a pas de combinaisons, juste des plages à étendre de 3 à 12 pour 6 colonnes.
Dites-moi si vous avez compris?

Merci et bon AM
 

Pièces jointes

  • explication.xlsx
    12.9 KB · Affichages: 2

Rouge

XLDnaute Impliqué
Bonjour,

Je commence à mieux comprendre, sauf un point qui n'est pas suffisamment clair et j'ai besoin de précisons.
Quand on applique la recherche sur une plage de 3 à 12, on commence par 3 qu'on applique sur toutes les colonnes de H à M, puis on passe 4 pour toutes les colonnes , puis 5 etc..
ou bien on applique tour à tour et individuellement ces valeurs de 3 à 12?
Ensuite suivant le résultat des scores pour chaque étude, on ne conserve que celui qui affiche le meilleur score ou doit-on tous les afficher?
 

maart

XLDnaute Nouveau
Tout à fait ça...tour à tour en permutations sur 6 colonnes..On fait toutes les permutations possibles de 3 à 12 sur toutes les colonnes:
3 3 3 3 3 3
3 3 3 3 3 4
Etc
12 12 12 12 12 12
Bien sûr si le score max est trouvé on écrit le nb de lignes de cette plage, on note les lignes concernées et on monte d'une ligne en 12 lignes glissantes

On n'affiche que le nb de lignes qui à fourni le meilleur score ( tout s'ecrit sur la même ligne)

Ainsi quand la macro à terminé en ligne 1, je ferai mode() sur chaque colonne de lignes et je saurai quel est la plage qui me donne le meilleur score sur l'ensemble

Voili... Voilou... C'est pour ça que je comprenais pas les combinaisons!

Bon am et merci
 

Rouge

XLDnaute Impliqué
Alors ça correspond bien à ce que j'avais fait
3 3 3 3 3 3
3 3 3 3 3 4
3 3 3 3 3 5
etc, jusquà 12 sur la première colonne, puis on incrémente le chiffre de la 2ème colonne, et on recommence avec les chiffres de la 1ère colonne
3 3 3 3 4 3
3 3 3 3 4 4
3 3 3 3 4 5
etc
3 3 3 3 5 3
3 3 3 3 5 4
etc, jusqu'à 12 sur la 2ème colonne, puis on incrémente le chiffre de la 3ème colonne, et on recommence avec les chiffres de la 1ère et 2ème colonne
12 12 12 12 12 12
de 3 à 12, cela fait 10 tests pour une seule colonne, reporté sur 6 colonnes, cela fait 10 * 10 *10 *10 * 10 * 10 soit 1 000 000 tests pour 1 seule ligne à traiter.

Moi je pars de la première ligne et je vais en descendant alors que vous partez du bas et en remontant, c'est peut-être pour cela que vous ne vous y retrouvez pas.
 

maart

XLDnaute Nouveau
Bonsoir
Si c'est compliqué à coder, faites au plus simple: une seule colonne
Ensuite, je traiterai successivement mes autres colonnes avec ce code en copiant les données à traiter dans cette colonne une après l'autre.
Merci
Bonne soirée
 

Rouge

XLDnaute Impliqué
Bonsoir,

Je pense que c'est bon pour le code, par contre, vu le nombre de combinaisons possibles et que pour chaque combinaisons il faut effectuer des calculs pour voir les scores et que les lignes avec des scores inférieurs à 100% sont éliminées au fur et à mesure, ça met beaucoup de temps.
Je vous retourne le fichier, ne soyez pas gourmand, après avoir cliqué sur le bouton choisissez la valeur 3 pour commencer, puis vous augmenterez progressivement pour vous faire une idée, mais sachez que, plus le nombre de lignes demandées et la longueur du tableau de données(colonnes( A à G) à traiter sera grande, plus le nombre de tests sera énorme et le temps d'exécution sera très très très long.
J'ai mis un tableau qui récapitule le nombre de tests à effectuer suivant ce que vous choisirez comme nombre de lignes et qui est fonction de la longueur du tableau de données(colonnes( A à G). Suivant le nombre de lignes que vous aurez choisi, les cellules du tableau correspondant à cette valeur passeront en vert pour se rappeler ce qui à été demandé.
La colonne U donne le numéro de la ligne de référence qui a été testée testée.
Cdlt

Edit:
Bon, j'ai fait des tests et c'est vraiment pas terrible, c'est horriblement long, je vais voir ce que je peux modifier pour l'améliorer.
 

Pièces jointes

  • maart_Code VBA sur Excel 2007_4.xlsm
    24.5 KB · Affichages: 1
Dernière édition:

Rouge

XLDnaute Impliqué
Bonjour,

Je vous propose une autre solution pour "contourner "le problème de la durée d'exécution. Plutôt que de tester systématiquement toutes les lignes, je suggère de le faire seulement sur une ligne choisie à la demande, j'explique:
La liste des tirages est dans la feuille 2. Sélectionnez une des dates (pas les 3 dernières, évidemment puisqu'il n' y aurait pas de prévisions possibles), puis cliquez sur le bouton et saisissez le nombre de lignes de la plage à traiter. Les données correspondantes sont recopiées dans la feuille 1 et l'analyse commence.

Pour faire des tests, sélectionnez la date du 17/02/2021 (elle donne des scores à 100%), puis sélectionnez le nombre de lignes sur lesquelles vont s'effectuer l'analyse (faites 3 essais avec 3, puis 5, puis 8)

Cdlt
 

Pièces jointes

  • maart_Code VBA sur Excel 2007_5.xlsm
    25.7 KB · Affichages: 1
Haut Bas