Explication sur Siz

Bonjour à tous,

Un membre expert de ce forum m'a donné ce code ci-dessous afin de déchiffrer la combinaison ayant le plus souvent sortie parmi un ensemble de combinaison passée. Je l'ai quelque peu modifié pour l'adapter à mon fichier même si je ne reproduis ici que la version originale. Cependant, je bloque dans ma compréhension sur la fonction "siz" (size ou taille?) et "sol". J'aimerais en connaître l'utilité et obtenir des explications à ce sujet.

Merci

With Worksheets("test")

dl = .Cells(Rows.Count, 1).End(xlUp).Row

tb = .Cells(11, 4).Resize(dl - 10, 20).Value

Dim ctr(70, 2)

For i = 1 To 70

ctr(i, 1) = i

ctr(i, 2) = Application.WorksheetFunction.CountIf(.Cells(11, 4).Resize(dl - 10, 20), i)

Next i

For i = 1 To 69

For j = i To 70

If ctr(i, 2) < ctr(j, 2) Then a = ctr(i, 1): ctr(i, 1) = ctr(j, 1): ctr(j, 1) = a: a = ctr(i, 2): ctr(i, 2) = ctr(j, 2): ctr(j, 2) = a

Next j

Next i

siz = 36

ReDim v(1 To siz)

For i = 1 To siz

v(i) = ctr(i, 1)

Next i

sol = 0

combine v, dl, tb

End With

Bonjour,

Le code avec les commentaires et les variables typées :

Dim ctr(70, 2) As Integer
Dim V() As Integer
Dim Tb
Dim Dl As Long
Dim I As Integer
Dim J As Integer
Dim A As Integer
Dim Siz As Integer
Dim Sol As Long

With Worksheets("test")

    'recherche la dernière cellule non vide en partant du bas de la colonne A
    Dl = .Cells(Rows.Count, 1).End(xlUp).Row

    'affecte le Range à un tableau en le redimensionnant à partir de D11 à W-->Dl
    Tb = .Cells(11, 4).Resize(Dl - 10, 20).Value

    'affecte à un tableau à deux dimensions, la valeur de I dans la première et dans la seconde, le nombre de fois
    'que I a été trouvé, CountIf() = NB.SI(), seules les valeurs de 1 à 70 sont cherchées
    For I = 1 To 70

        ctr(I, 1) = I
        ctr(I, 2) = Application.WorksheetFunction.CountIf(.Cells(11, 4).Resize(Dl - 10, 20), I)

    Next I

    'tri le tableau du plus grand au plus petit
    For I = 1 To 69: For J = I To 70
            If ctr(I, 2) < ctr(J, 2) Then A = ctr(I, 1): ctr(I, 1) = ctr(J, 1): ctr(J, 1) = A: A = ctr(I, 2): ctr(I, 2) = ctr(J, 2): ctr(J, 2) = A
    Next J, I

    'défini la taille maximale d'un tableau à une dimension pour n'avoir que les 36 premiers résultats
    Siz = 36

    'et dimensionne le tableau
    ReDim V(1 To Siz)

    For I = 1 To Siz: V(I) = ctr(I, 1): Next I

    Sol = 0

    combine V, Dl, Tb

End With

Génial! Merci Theze

Bonjour,

ce code calcule le nombre d'occurences des nombres (1 à 70) dans un tableau et trie ensuite le tableau en ordre décroissant sur le nombre d'occurences.

siz détermine parmi ces 70 nombres, ceux qu'il faut garder pour la suite du traitement (génération de toutes les combinaisons possibles sur base du tableau réduit à siz éléments). -> siz! combinaisons au lieu de 70! combinaisons à générer.

Grâce au comptage et au tri, les nombres qui ont la meilleure probabilité de contribuer à un bon résultat se trouvent parmi les premiers du tableau. Ceci permet une convergence rapide vers une solution qui ne doit pas être très éloignée de l'optimum aboslu, l'optimum absolu étant celui résultant de l'examen des 70! combinaisons (10^73 ans si on compte 100 microsecondes par combinaison).

sol est un compteur utilisé dans la procédure combine, qui permet l'affichage du meilleur résultat dès que celui-ci égale ou dépasse le meilleur résultat précédent.

Merci H2so4 pour ce complément d'explication.

Rechercher des sujets similaires à "explication siz"