Code VBA beaucoup trop lent

moteurV12

XLDnaute Occasionnel
Bonjour à Tous,

Tout est dans le titre
une optimisation du code est elle possible ??
 

Pièces jointes

  • Tirage.xlsm
    242.7 KB · Affichages: 49
  • Tirage.xlsm
    242.7 KB · Affichages: 50
  • Tirage.xlsm
    242.7 KB · Affichages: 51

camarchepas

XLDnaute Barbatruc
Re : Code VBA beaucoup trop lent

Lol Moteur ,

Mais avant d'avoir du poil au menton, il faut semer , arroser et veiller sur sa plantation,
Bon , j'aurais pu le couper en 2 aussi , mais à des fins plus sympatiques . voilà ,

Et bien content de t'avoir destressé avec 1 minute de rire.....
 

ROGER2327

XLDnaute Barbatruc
Re : Code VBA beaucoup trop lent

Suite...


En effaçant les colonnes A à E de "Onglet 1", le poids s'effondre à... 221 Ko.
Et ce n'est pas gênant : il suffit d'un petit clic bien placé pour récupérer les contenu de ces colonnes.​


Bonne soirée à tous.


ℝOGER2327
#7680


Jeudi 12 As 142 (Dispute du signe + et du signe - - fête Suprême Tierce)
24 Brumaire An CCXXIII, 7,6467h - orange
2014-W46-5T18:21:07Z
 

ROGER2327

XLDnaute Barbatruc
Re : Code VBA beaucoup trop lent

Suite...


Je réponds d'abord et seulement à cela :


(...)
Sur votre onglet1 vous remarquerez que j'ai laissé totalement vide la ligne des placés et le tableau de la sélection restreinte.
Je suis étonné en faisant un tirage dans ces conditions de n'avoir que 3 possibles 1er. La réalité va au delà.
(...)
Dans ces conditions, vous cherchez toutes les arrangements de cinq parmi douze partants, soit 95 040 arrangements.

Je vous suggère de lire le commentaire que j'ai pris la peine d'associer à la procédure TaTa :​
Code:
'
'Paramètres de la fonction fTaTa:
'
'Partants     (Range)   (Obligatoire)   Au moins deux lignes.
'Restrictions (Range)   (Obligatoire)   Cinq ou six lignes.
'Placés       (Range)   (Obligatoire)   Deux à cinq colonnes.
'Exclus       (Range)   (Obligatoire)   Au moins deux colonnes.
'Ordonné      (Boolean) (Facultatif)    Omis ou False : tirage aléatoire ; True : tirage ordonné.
'Limite       (Long)    (Facultatif)    Nombre maximum de lignes du tirage. Si omis : le nombre
'                                       de lignes du tirage est contrôlé par fTaTa.
'
Dans la foulée, Allez voir ce qu'on raconte dans la fonction fTaTa :​
Code:
'
'Le paramètre optionel Limite fixe le nombre maximal de combinaisons à
'calculer. Pour éviter une durée de calcul trop longue, j'ai mis une valeur
'de 20 000 par défaut. On peut changer cette limite si besoin est...
'
Je pense que, ceci fait, vous paramètrerez l'appel de la fonction pour outrepasser la limitation à 20 000 lignes d'affichage. En écrivant, par exemple,​
Code:
    Tirage = fTaTa([J9].Resize(20, 1), [M9].Resize(5, 2), [K6].Resize(1, 5), [K3].Resize(1, 14), , 100000)
Lancez alors la procédure, et voyez si le résultat est plus conforme à votre attente.

Pour le reste, on verra plus tard, en fonction de vos constatations.


Bonne nuit.


ℝOGER2327
#7681


Jeudi 12 As 142 (Dispute du signe + et du signe - - fête Suprême Tierce)
24 Brumaire An CCXXIII, 9,7524h - orange
2014-W46-5T23:24:21Z
 

moteurV12

XLDnaute Occasionnel
Re : Code VBA beaucoup trop lent

J'aurai du y penser, effectivement car j'avais bien lu vos commentaires mais pas assimilé. ( on veut toujours aller trop vite )

En fait cette fonction est beaucoup plus puissante qu'on pourrai le croire de prime abords, c'est un bijoux, reste à la mettre dans son écrin avec la suite de mon questionnement.

Bonne nuit et grand merci
 

moteurV12

XLDnaute Occasionnel
Re : Code VBA beaucoup trop lent

Bonsoir à Toutes et à Tous,

Je vous joint ma feuille réelle de destination.

Par rapport à Ftata et vos définitions nous avons :

Partants = AN1- AN20
Exclus = X1 – AK1
Restrictions = AJ44 – AK48
Placés s’appelle ordre dans le fichier = AF6 – AJ6
Ordonnés toujours False laissons une part de hasard dans l’ordonnancement
Limite ici 1500 ce qui est très peu mais le fichier est bourré de matricielles.
En cellules vertes V5 – Z5 nous avons le résultat réel d’arrivée.

Ceci dit :

1er Justement il serait peut être intéressant que la limite soit complétée si besoin par un intervalle.
On aurait le choix entre la limite ou l’intervalle entre bornes.

2eme les Placés de Ftata doivent obligatoirement occuper la place donnée dans les combinaisons.
Afin d’élaguer le nombre conséquent de combinaisons possible je propose d’avoir des choix plus souples et plus nombreux qui vont se croiser, je m’explique.

Sur la ligne du dessus des Placés, soit AF5 – AJ5 il serait intéressant de pouvoir entrer un ou plusieurs N° qui eux seraient n’importe ou dans les 5 de chaque combinaisons, si 2 N° données c’est forcément les 2 qui doivent être dans chaque combinaisons de 5 etc … Donc ET

3eme En AD15, AE15, AF15 nous avons 1er 2eme 3eme avec un tableau donnant 4 valeurs pour chaque. Ces colonnes servent dans le cas ou l’on a plusieurs N° pouvant être 1er 2eme ….

Dans ce cas on inscrit rien en AF6 mais dans la colonne 1er on l’on aura 2 ou 3 ou 4 valeurs considérées pouvant finir 1er. Là il s’agit d’un OU l’un OU l’autre dans chaque combinaisons.
Idem pour colonne 2eme et 3eme.

4eme En dessous nous avons « tiercé » en bleu et « pas tiercé » en rouge.
Les N° figurant dans la colonne tiercé doivent forcément figurer dans chaque combinaison mais cette fois uniquement aux 3 premières places. Nous sommes sur un OU l’un OU l’autre etc ….
Nous avons exactement la même chose en V21 – V24

Colonne rouge « pas tiercé » aucun des N° mentionnés ne doit figurer aux 3 premières places d’aucune combinaison. Par contre à la 4eme ou 5eme place rien ne l’interdit.

en AA5 – AD5 et AA6 – AD6 cellule jaunes doré nous pouvons entrer 1 à 4 N° .
Pour chacune de ces 2 lignes c’est OU l’un OU l’autre OU ….. dans les 5 de chaque combinaison.

En Z54 – AD61 5 colonnes des éliminés de la place indiquée.
Exemple en Z54 – Z61 les N° ne pouvant pas être 1er.

Pour finir les cases à cocher.

En AE45 si coché égale VRAI alors toute combinaison doit avoir au moins 1 N° PMU de 1 à 4 inclus.
En AE46 si coché VRAI 1 des 4 plus gros N° PMU de la course.
Donc si 16 partants on retient 13 ou 14 ou 15 ou 16.
En AL9 si coché VRAI toute combinaison doit avoir au moins 2 des 4 N° de AL1 à AL4.
En AI8 ……………………. 1 des 2 N° AL1 – AL2


------Le plus important de tout est de considérer la matrice de base comme contenant pour 20 partants par exemple (4 * 8 * 18 * 19 * 20) solutions et non pas (16*17*18*19*20) -------
Soit 218 880 combinaisons de base ordre au lieu de 1 860 480, une paille, pour environ 5.63% de perte.

En effet favoris 1 à 4 ayant 96.36% de réussite et 2 à 8 97.94% cela nous mène à une perte de 1-(96.36%*97.94%) soit environ 5.63% pour plus de 1 641 000 combinaisons éliminées.


Bien j’arrête là, ce serait déjà …..Vraiment pas mal.

Le panneau bleu « SYNTHESE » contient d’autres conditions mais je m’en arrange avec les matricielles.

Et si l’amalgame croisé des conditions engendrait une impossibilité ????

J’en doute, mais alors il suffirait d’un message l’indiquant.

Reste les questionnements précédents avec le précédent envoi de fichier.
 

Pièces jointes

  • CANEVAS.zip
    136.4 KB · Affichages: 21
  • CANEVAS.zip
    136.4 KB · Affichages: 22
  • CANEVAS.zip
    136.4 KB · Affichages: 24

Discussions similaires

Réponses
10
Affichages
220

Statistiques des forums

Discussions
312 392
Messages
2 087 988
Membres
103 691
dernier inscrit
christophe89