Recherche de communs et/ou non communs

erics83

XLDnaute Impliqué
Bonjour,

Beaucoup inspiré par le code de JB :
Fonction communs à 3 listes,


Je cherche à faire des combinaisons avec 8 noms :

3 positions :
1 = commun
0 = je ne prends pas les valeurs
-1 = la lettre n'est pas dans la liste.

(pour être plus clair, j'ai mis un fichier test en PJ)

Pour calculer toutes les combinaisons possibles j'ai donc fait :
Code:
For I1 = -1 To 1
For I2 = -1 To 1
For I3 = -1 To 1
For I4 = -1 To 1
For I5 = -1 To 1
For I6 = -1 To 1
For I7 = -1 To 1
For I8 = -1 To 1

'Calculs


Next I8
Next I7
Next I6
Next I5
Next I4
Next I3
Next I2
Next I1
Je prends un exemple de combinaison :
I1=1
I2=0
I3=-1
I4=1
I5=0
I6=0
I7=-1
I8=1

veut dire : je calcule les lettres communes entre I1, I4, I7, I8, mais ces lettres ne doivent pas être dans I3 et I7 et je ne tiens pas compte de I2, I5,I6
I1=l'ensemble des lettres de Nom1
I2=l'ensemble des lettres de Nom2, etc.....

J'aimerai pour chaque date (j'en ai mis juste 2 pour l'exemple) faire cette opération....

Une petite aide ?
Merci,
 

Pièces jointes

  • Fichiertest1.xlsm
    12.2 KB · Affichages: 40

ODVJ

XLDnaute Impliqué
Re,

Et que signifie la valeur contenue dans résultat? par exemple, 13 en ligne 267 ou 5 en 275?

Je vois que le 4/2/2014 il y a 16 pronostics (2 par personne) avec des valeurs différentes dans la colonne résultats.. Quid?

Si le nombre de pronostiqueurs par journée n'est pas identique quelle que soit la journée, il ne sera pas possible de comparer les combinaisons vu que certaines auront des longueurs 7, d'autres 8 et au moins une 16.
(en longueur 16, il y a 43 046 721 combinaisons....)

Donc, sauf si je n'ai rien compris depuis le début et que tes explications sur la colonne résultat ouvrent de nouvelles perspectives, je ne vois pas comment traiter le problème.

Cdlt
 

erics83

XLDnaute Impliqué
Re,

Merci pour ta perspicacité, effectivement mon fichier comportait des erreurs, je viens de les corriger....et mis en PJ le "bon" fichier.....le 4/2/14 était une erreur...Par contre, le nombre de pronostics est "bon" (=1 pronostiqueur peut être absent (donc pas de pronostic pour la journée), et certains peuvent donner entre 4 et 8 pronostics...

(je travaille dessus aussi et donc à force de faire des essais, je me suis "mélangé".....sorry....)

Merci pour ton aide,
 

Pièces jointes

  • TestericcompletV2.xlsx
    48.9 KB · Affichages: 30

ODVJ

XLDnaute Impliqué
Bonsoir,

Le fichier est lisible mais ce que j'ai dit dans le post #16 reste valable :
Si le nombre de chroniqueurs n'est pas fixe, la longueur des combinaisons ne sera pas constante et je ne vois pas comment comparer des combinaisons de longueurs 3, 4, 5, 6, 7 et 8.

Il est possible de créer des pronostics vides pour les pronostiqueurs absents de façon à avoir des combinaisons de 8 de long partout.
Il y a 55 dates à compléter ainsi, parfois avec 5 chroniqueurs absents.

Il me semble important également de trier sur date + chroniqueur sinon je ne vois pas la finalité de faire des stats sans le tri chroniqueur.

Au fait, quelle est la finalité des stats que tu veux faire?

Cordialement
 

erics83

XLDnaute Impliqué
Re,

On pourrait mettre les pronostiques '"vides " à l'état "w" (qui ne sortira jamais...), permettant l'analyse....par exemple....
Pour les pronostiqueurs "absents", je peux les "virer" s'ils posent problème....
La finalité est toujours la même : avoir la meilleure combinaison (=celle qui ressort le plus grand nombre de fois).....

Un petit début de code, histoire que je vois un peu vers quelle piste on s'oriente ?

Merci pour ton aide,
 

ODVJ

XLDnaute Impliqué
Re,

"avoir la meilleure combinaison",
Ok, mais pour quoi faire?

"Pour les pronostiqueurs "absents", je peux les "virer" s'ils posent problème...." : Comment veux-tu "virer" des pronostiqueurs absents?
Surtout que c'est leur absence qui pose problème!

"Un petit début de code,....."
Dans le post #11, je t'ai proposé une approche qui semblait te convenir mais tu proposes des fichiers qui n'y sont pas conformes. Il est donc bien trop tôt pour parler de mon code.
En revanche, tu commences ton premier post par "Beaucoup inspiré par le code de JB : Fonction communs à 3 listes"; je n'ai pas vu ton code. Où est-il?

Cordialement
 

erics83

XLDnaute Impliqué
Re,

Ci joint le code que j'ai fait, sur 1 date....je n'en suis vraiment pas très "fier", il est lent, mais il retranscrit la logique que je cherchais....: calcul des combinaisons, analyse des communs et des non communs, comparaison avec le résultat...si pas 8 pronostics, pas de problème, si pas de NOM9, pas de problème (puisque chiffres pas importés dans "Feuil2" ..J'ai pensé utiliser des formules, mais pour l'exploitation des -1 et 1, cela posait problème, car formule trop longues....c'est pourquoi j'ai été séduit par le code de JB...qui m'a inspiré pour "l'écriture" sur des lignes des résultats, mais je n'ai vraiment pas la rapidité souhaitée et/ou sû l'exploiter..d'où mon besoin d'aide, car je pense qu'en passant par des tableaux (dictionary et autres), c'est vraiment plus rapide....surtout que la "logique" parait simple....

Ici, 384 combinaisons donnent le résultat OK, donc mon but, c'est de faire tourner sur 250 jours, pour "voir" quelles sont les combinaisons qui ressortent le plus souvent....et donc, pour répondre à ta question : si la combinaison x ressort souvent, c'est elle que je "jouerai" : je prends la "meilleure combinaison", je prends les pronostics du jour, j'applique la combinaison et...statistiquement j'ai plus de chance d'avoir le "bon" résultat...

(j'ai pris des chiffres au lieu de lettres, car j'avais déjà du mal avec les chiffres, alors si je codais avec des lettres....:eek:

En te remerciant pour ton aide,
 

Pièces jointes

  • Essai communs et non communs V2.xlsm
    22.4 KB · Affichages: 27
Dernière édition:

erics83

XLDnaute Impliqué
Bonjour,

J'ai posté le fichier + code, je pense que tout mes "sheets("Feuil2")" peuvent être modifiés en utilisant un tableau, mais je ne sais pas bien comment faire....

Tu m'as dit que tu avais travaillé sur le fichier (je l'ai vu dans tes propositions et questions), le fichier et la "logique" que j'ai utilisé sont bons ?
Aurais-tu une proposition ?
En te remerciant pour ton aide,
 

ODVJ

XLDnaute Impliqué
Bonsoir,

Je suis parti sur des dictionary et un tableau du décompte des combinaisons (6561 lignes x 122 colonnes) que je réinjecte dans la feuille de calcul. J'ai gardé l'écriture base 3 pour le lien entre l'indice ligne du tableau et la combinaison correspondante.

48 secondes pour 122 jours, tous ramenés à 8 pronostiqueurs. C'est un peu long.
Reste à contrôler les résultats.

Cordialement
 

erics83

XLDnaute Impliqué
Wouf.....code assez simple ? je le relis depuis 5 fois et j'ai un peu de mal à tout comprendre....o_O pour moi, c'est du très haut vol..., mais je vais m'accrocher...:)

Pour éclairer ma petite lanterne à quoi correspond :
Max cumul
indice associé
filtre associé
Base3 .....?

et donc, quelle est la "meilleure" combinaison ? (= comment je la retrouve dans ton tableau ?) c'est la ligne 3361 ? si oui, elle correspond à quelle combinaison ? comment je retrouve la combinaison ?
Je commence à comprendre ta logique : en W:EN on a les jours, en U, les combinaisons possibles, mais c'est le comptage des communs-non communs que je ne comprends pas...donc les combinaisons .....

En te remerciant pour tes éclaircissements,
Et bravo, c'est top !!!
 
Dernière édition:

ODVJ

XLDnaute Impliqué
Le tableau de 6561 lignes sur 122 colonnes posé en W1 représente, en colonne, les jours et en lignes, les combinaisons en base 10.
Il y a un 1 à l'intersection d'une combinaison et d'une journée si cette combinaison permet d'obtenir le résultat de la journée considérée.
Le total ligne (colonne V) permet de connaître le nombre de bons résultats la combinaison a permis d'obtenir.
La colonne U donne le n° de la combinaison correspondant aux lignes du tableau en W1. En effet, le tableau de la macro (stats) est indicé à partir de 0.
On trouve le max de la colonne V (113) en P1, l'indice correspondant à la combinaison du max en P2 (3361) et la transcription en base 3 moins 1 de cet indice en P4 : P11.
En effet, 3361 s'écrit sur 8 positions en base 3 : 1 1 1 2 1 1 1 1
Si on soustrait 1 on obtient la combinaison : 0 0 0 1 0 0 0 0. Elle est en P4: P11.
C'est ce que j'appelle le filtre associé (même chose que combinaison).

Pour le comptage des communs, ce sont les dictionary qui s'en chargent, dans la boucle sur r (les combinaisons).
Tu remarqueras que j'ai omis la valeur 0 vu que ça correspond à une combinaison qui ne prend aucune ligne d'une journée.
Il y a un dictionary pour les lignes 1 et un pour les lignes -1.
Celui des lignes 1 compte le nombre de clé des lignes 1.
Celui des lignes -1 enregistre seulement les clés qui devront disparaître des lignes 1.
C'est la boucle de nettoyage qui s'en occupe.
Il ne reste qu'à tester si le dictionary des lignes 1, pour la clé_résultat, vaut le nombre de fois que la valeur 1 apparaît dans la combinaison (variable Nb_plus_1).
Si oui, on remplit le tableau stats().

La boucle la plus extérieure, c'est pour les jours (indice k).

Cordialement
 

erics83

XLDnaute Impliqué
Re-re Wouf.....je lis, je relis le code et le résultat....

Super merci pour ces explications, quelle logique !!! je suis encore largement loin de tout ça....mais grace à toi, j'espère m'en rapprocher....

3 questions :
* je ne comprends pas la "base3", ok, elle permet de faire les combinaisons, mais comment cela fonctionne-t-il ? Je pose la question pour savoir/connaitre si je mets 9 pronostiqueurs....
*
En effet, 3361 s'écrit sur 8 positions en base 3 : 1 1 1 2 1 1 1 1
Si on soustrait 1 on obtient la combinaison : 0 0 0 1 0 0 0 0. Elle est en P4: P11.
Nous avons 3 positions : -1, 0, 1
, est-il possible de mettre (en "EP" par exemple ou autre ), les combinaisons où je peux "voir" les combinaisons ? "0 0 0 1 0 0 0 0", c'est "0001000" ou "-1 -1 -1 1 -1 -1 -1 -1" ? en "voyant" les combinaisons, j'espère comprendre....toujours cette base3
* Faut-il (en cas d'absence du pronostiqueurs) mettre une ligne "vide" pour palier au problème (comme tu as fait pour Nom3 en ligne4) ?

En te remerciant pour ton aide, explications, et surtout ton développement de compétence.....

Merci,
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 183
dernier inscrit
angelique76120