Accélération d'une macro

Bonjour à tous,

J'ai à peu près 15504 combinaisons de 5 chiffres à vérifier parmi une liste afin de connaître le nombre de fois que cette combinaison est sortie. Cela prend un temps fou. Je cherche donc une façon d'accélérer ma macro sans l'utilisation de

With Application

.DisplayAlerts = False

.CutCopyMode = False

.ScreenUpdating = False

End With

qui n'est pas encore assez rapide. Je voudrais quelque chose de plus instantané. Est-ce possible? En cliquant sur le bouton entonnoir, cela mets en marche la macro. J'inclus le fichier.

Merci

50keno-amp-beta.xlsm (671.82 Ko)

Bonjour et sur le forum,

la macro est lourde à lire, pas de commentaire et des noms de variables pas explicites, quelqu'un qui ne l'a pas écrit a des difficultés à le comprendre à cause de tout ça. De ce que j'ai vu, il y a plusieurs choses qui ralentissent ta macro:

Les formules dans ton tableau qui se recalculent quand une cellule est modifiée:

Application.Calculation = xlCalculationManual

Puis :

Application.Calculation = xlCalculationAutomatic

Enfin ce n'est pas la seule cause du ralentissement, je vois Cells et Range partout, des .Copy et .Paste également, une façon d'accélérer un code qui traite beaucoup de données, c'est de passer par des tableaux VBA qui accéléreront considérablement ton code.

Je ne sais pas si c'est toi qui as écris le code et qui pourra le modifier, mais ce sont mes 2 préconisations pour accélérer ta macro

Merci Ausecour pour ta réponse mais je dois absolument faire un calcul sur l'ensemble du tableau pour obtenir le nombre de fois. Je ne peux donc pas utiliser Application.Calculation = xlCalculationAutomatic. J'ai bricolé le code à partir des fonctions de Excel. Je cherche un moyen plus rapide, voire quasi instantané. Je ne sais pas si cela est possible.

Re,

Comme je t'ai dis c'est possible, mais modifier ton programme... dur quand on n'est pas dans le sujet depuis le début, si tu expliques tout ce que tu fais on peut écrire ça en macro pour un traitement très rapide, est-ce que tu pourrais faire ça? comme ça on pourra te proposer des solutions

Ausecour,

Je vais essayer...

Je prends les 20 numéros de la dernière combinaison gagnante du Keno. Je les permute ( à l'aide d'une autre macro) en 5 numéros pour en faire au total 15505 combinaisons à 5 chiffres dans la grille de pronostics: combin(20;5). Puis, je vérifie combien de fois à l'aide de la macro filtrage( bouton entonnoir), cette combinaison à 5 numéros est sortie parmi les résultats antérieurs que je possède. Le nombre de fois apparaît dans la case NG de la ligne horizontale et ma macro de filtrage la copie à coté du numéro correspondant dans la grille de pronostics. Elle copie l'un après l'autre toutes les combinaisons. C'est très long. Je veux juste accélérer le processus pour trouver le nombre de fois que les 15505 combinaisons ont sortie. Je ne sais pas si je suis assez clair.

Re,

Merci pour ces explications, je comprends déjà mieux comment tourne la macro Filtrage que tu souhaites améliorer, il y a en effet beaucoup d'opérations qui sont réalisées, j'espère pouvoir produire quelque chose de rapide mais c'est pas gagné, j'ai déjà une idée pour accélérer quelque chose, mais c'est vrai que ça fait beaucoup de calculs, je reviens vers toi quand je commencerai à avoir quelque chose de fonctionnel pour voir si on peut s'en sortir

Ok. Merci.

bonjour,

une proposition, j'ai enlevé tout ce qui me paraissait inutile. il faudra ajouter par après les pièces qui manquent éventuellement.

on introduit de 5 à 20 nombres, on génère toutes les combinaisons de 5 nombres et on compte parmi les tirages précédents, combien il y en a qui contiennent les 5 nombres. (20 sec sur mon PC)

41keno-amp-beta.xlsb (126.22 Ko)

Bonjour h2so4,

Merci pour ton temps et ta solution.

Résultats en 66 secondes sur mon ordi. Beaucoup, beaucoup, beaucoup mieux que mon propre système.

Est-il possible, dans ta solution, de séparer les numéros pour n'en retrouver qu'un seul par cellule comme dans l'exemple ci-joint?

Merci

17keno-amp-beta.xlsb (216.82 Ko)

Bonjour,

voici une nouvelle version, je l'ai encore améliorée (8.5 sec sur mon PC I7)

42keno-amp-beta-1.xlsb (195.94 Ko)

Bonjour,

WOW! 29 secondes.

J'ai un petit souci, je n'arrive pas à faire varier le gain de base. Au lieu du 5, j'aimerais pouvoir également mettre le 4 en modifiant la cellule y5.

Bonne journée

Merci

Bonjour,

à quoi correspond ce 4 ? compter tous les tirages antérieurs qui contiennent 4 ou 5 nombres de la combinaison ?

Oui. Exactement. Comment puis-je le modifier?

J'obtiens maintenant les résultats en 28 secondes...

Merci

bonjour,

voir fichier adapté, performance dégradée (10 sec)

32keno-amp-beta-1.xlsb (211.75 Ko)

En lançant la macro j'obtiens le message d'erreur.

Erreur définie par l'application ou par l'objet.

Je clique sur débogage et Excel met en surbrillance la ligne suivante:

Range("AB11").Resize(k, 5) = resultat

re-bonjour,

je n'ai pas de problème avec le fichier que je t'ai envoyé

Tout est revenu à la normale.

Tout au plus 33 secondes.

Merci beaucoup.

J'apprécie tout le travail que tu as fait.

Au plaisir,

Petit Loup

Bonjour,

voici une nouvelle version, je l'ai encore améliorée (8.5 sec sur mon PC I7)

Bravo! Je te laisse gérer

Bonjour à tous et à h2so4 et Ausecour en particulier

J'aimerais remettre le sujet au devant de ce forum car je me pose la question suivante: peut-on jouer sur la variabilité du nombre de combinaisons que l'on peut faire soit 2 ou 3 ou 4....jusqu'à 10 numéros par combinaisons ( plus ou moins 185000 combinaisons possibles) à partir du même code vba? Peut-on jouer sur la variabilité du nombre de numéros pour créer une combinaison sans tout défaire le code?

Merci

Bonne journée

Bonjour,

cela multipliera les temps d'exécution par un facteur 20 (au minimum).

Rechercher des sujets similaires à "acceleration macro"