Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

classement (excel, maths?)

  • Initiateur de la discussion Initiateur de la discussion jeanjacques
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jeanjacques

Guest
Bonjour,

Je bute sur un classement de colonnes difficile, je joins un fichier avec le départ et le souhait après le code.

Merci de votre aide

A+
 

Pièces jointes

Re : classement (excel, maths?)

Re,

tu veux dire que maintenant c'est 30 lignes, 5 colonnes contenant des valeurs de 1 à 70?

met une instance que tu as à gérer en ligne.

cordialement

PS : à quoi ça te sert ? Tu vas en faire quoi?
si tu en disais plus, on pourrait peut-être t'expliquer comment t'en passer.....
 
Re : classement (excel, maths?)

Bonjour,

C'est une base de Keno ou je repère les nombres dans 5 colonnes....mais ça ne change rien au problème posé. Voici un exemple du Kéno (30 derniers tirages) avec mon classement "à la menotte"....je ne sais pas si Excel peut faire mieux que mon crayon?


Bon we
 

Pièces jointes

Re : classement (excel, maths?)

Bonjour à tous,

Excusez-moi d'entrer dans ce post, mais le dernier fichier dont le classement c'est effectué à la main et envoyé par jeanjacques, comporte quelques problèmes ( voir décompte colonne A) :

Chiffre 7 >>>> Nombre dans le tableau initial 7 - Nombre dans le Classement 6

Chiffre 15 >>>> Nombre dans le tableau initial 11 - Nombre dans le Classement 10

Chiffre 18 >>>> Nombre dans le tableau initial 10 - Nombre dans le Classement 11

Chiffre 22 >>>> Nombre dans le tableau initial 9 - Nombre dans le Classement 10

Chiffre 28 >>>> Nombre dans le tableau initial 7 - Nombre dans le Classement 8

Chiffre 35 >>>> Nombre dans le tableau initial 2 - Nombre dans le Classement 1

Certes, la performances de ce tri manuel est quand même remarquable, mais demeure quand même très difficile sans l'aide de l'informatique !

Bonne journée à tous !
 

Pièces jointes

Re : classement (excel, maths?)

Bonjour,

Aurais-tu trouver la solution miracle? mieux que mon crayon!

Avec le solveur? une macro ou encore plus de formules?


Bravo!
 
Re : classement (excel, maths?)

Bonsoir,

Toujours par formule, le même modèle que précédemment, élargi à 70 colonnes par passe au lieu de 10 et une profondeur de 15 au lieu de 6, vu la faible densité des valeurs.
La profondeur correspond au nombre de valeurs différentes d'une colonne.
Il est possible d'aller à 20 ou 30 en profondeur. Ça ne dépend que du temps que l'on consacre à l'ajout des niveaux.

cordialement
 
Re : classement (excel, maths?)

Bonjour jeanjacques, ODVJI, JBARBE, le forum,

Le classement manuel de jeanjacques donne un minimum de 52 valeurs différentes.

Avec cet algorithme j'ai obtenu un minimum de 44 (formule en M3) :

Code:
Sub Minimum()
Dim NbAlea&, NbTirage&, mini&, h&, P As Range, d As Object, dc&
Dim tirage&, c As Range, j%, n&, i&, k%
NbAlea = [N6] 'nombre d'aleas
NbTirage = [N7] 'nombre de tirages
mini = 1000000
Application.ScreenUpdating = False
With [A1].CurrentRegion.Resize(, 5)
  .Copy [G1]
  h = .Rows.Count
End With
Set P = [G1].Resize(h, 5)
'---liste des valeurs sans doublon classée---
Set d = CreateObject("Scripting.Dictionary")
For Each c In P
  d(c.Value) = d(c.Value) + 1
Next
dc = d.Count
Range("Q2:S" & Rows.Count) = "" 'RAZ
[Q2].Resize(dc) = Application.Transpose(d.keys)
[R2].Resize(dc) = Application.Transpose(d.items)
[Q2].Resize(dc, 2).Sort [R2], xlDescending, Header:=xlNo 'classement
[S2].Resize(NbAlea) = "=RAND()" 'ALEA() sur les premiers
'---détarmination du minimum---
For tirage = 1 To NbTirage
  Application.Calculation = xlCalculationManual
  [Q2].Resize(NbAlea, 3).Sort [S2], Header:=xlNo 'classement aléatoire
  For Each c In [Q2].Resize(dc)
    '---comptage préalable---
    For j = 1 To 5
      n = 0
      For i = 1 To h
        If P(i, j).Interior.ColorIndex = xlNone Then
          For k = 1 To 5
            If P(i, k) = c Then
              n = n + 1
              If n = c(1, 2) Then GoTo 1
              Exit For
            End If
          Next k
        End If
    Next i, j
    '---permutations et repérages avec la couleur jaune---
1   If n = c(1, 2) Then
      For i = 1 To h
        If P(i, j).Interior.ColorIndex = xlNone Then
          For k = 1 To 5
            If P(i, k) = c Then
              P(i, k) = P(i, j)
              P(i, j) = c
              P(i, j).Interior.ColorIndex = 6
              Exit For
            End If
          Next k
        End If
      Next i
    End If
  Next c
  P.Interior.ColorIndex = xlNone 'RAZ du repérage
  Application.Calculation = xlCalculationAutomatic 'recalcul
  If Round([M3]) < mini Then mini = Round([M3]): P.Copy [U1] 'mémorisation
Next tirage
[U1].Resize(h, 5).Copy P 'restitution
[U1].Resize(h, 5) = "" 'RAZ
End Sub
Fichier joint, faites de nombreux essais pour améliorer le minimum.

A+
 

Pièces jointes

Re : classement (excel, maths?)

Bonjour jeanjacques, ODVJI, job75, le forum,

J'ai procédé à des essais du fichier de job75 et je trouve 48 minimum !

Par contre, lors des essais suivant la macro ne s'arrêtait pas ( 30 mn) et j'ai dû sortir de cette macro ( voir la photo) la cellule M3 était vide !

bonne journée !
 

Pièces jointes

  • Plantage_Macro.jpg
    29 KB · Affichages: 24
  • Minimum(1)-2.xlsm
    Minimum(1)-2.xlsm
    30.1 KB · Affichages: 19
Re : classement (excel, maths?)

Re,

Avec les tableaux VBA t test memo l'exécution est nettement plus rapide :

Code:
Sub Minimum()
Dim NbAlea&, NbTirage&, mini&, h&, P As Range, t, test() As Boolean
Dim d As Object, dc&, tirage&, c As Range, j%, n&, i&, k%, memo
NbAlea = [N6] 'nombre d'aleas
NbTirage = [N7] 'nombre de tirages
mini = 1000000
Application.ScreenUpdating = False
With [A1].CurrentRegion.Resize(, 5)
  .Copy [G1]
  h = .Rows.Count
End With
Set P = [G1].Resize(h, 5)
t = P 'tableau VBA
ReDim test(1 To h, 1 To 5) 'tableau VBA
'---liste des valeurs sans doublon classée---
Set d = CreateObject("Scripting.Dictionary")
For Each c In P
  d(c.Value) = d(c.Value) + 1
Next
dc = d.Count
Range("Q2:S" & Rows.Count) = "" 'RAZ
[Q2].Resize(dc) = Application.Transpose(d.keys)
[R2].Resize(dc) = Application.Transpose(d.items)
[Q2].Resize(dc, 2).Sort [R2], xlDescending, Header:=xlNo 'classement
[S2].Resize(NbAlea) = "=RAND()" 'ALEA() sur les premiers
'---détermination du minimum---
For tirage = 1 To NbTirage
  [Q2].Resize(NbAlea, 3).Sort [S2], Header:=xlNo 'classement aléatoire
  For Each c In [Q2].Resize(dc)
    '---comptage préalable---
    For j = 1 To 5
      n = 0
      For i = 1 To h
        If Not test(i, j) Then
          For k = 1 To 5
            If t(i, k) = c Then
              n = n + 1
              If n = c(1, 2) Then GoTo 1
              Exit For
            End If
          Next k
        End If
    Next i, j
    '---permutations dans t, repérages dans test---
1   If n = c(1, 2) Then
      For i = 1 To h
        If Not t(i, j) Then
          For k = 1 To 5
            If t(i, k) = c Then
              t(i, k) = t(i, j)
              t(i, j) = c
              test(i, j) = True
              Exit For
            End If
          Next k
        End If
      Next i
    End If
  Next c
  ReDim test(1 To h, 1 To 5) 'RAZ du repérage
  P = t
  If Round([M3]) < mini Then mini = Round([M3]): memo = P 'mémorisation
Next tirage
P = memo 'restitution
End Sub
On peut maintenant tester facilement avec 1000 tirages (22 secondes chez moi).

J'ai pu obtenir le minimum de 43 en une dizaine d'essais.

Fichier joint.
 

Pièces jointes

Dernière édition:
Re : classement (excel, maths?)

Bonsoir à tous,

Sur la base du joli travail de job75, on peut appliquer une heuristique de montée qui, en une itération fournit une solution à 41 (mais s'y arrête).

Cette heuristique de montée s'appuie sur une structure de voisinage d'une solution qui est de type transposition de colonnes pour chaque ligne, soit 30 (lignes) x 10 (transpositions) = 300 voisins.
Certains de ces voisins sont améliorants, d'autres pas.

Si les voisins améliorants sont nombreux, on peut tirer au sort celui qui deviendra la nouvelle meilleure solution.

Je ne sais pas si ça va intéresser du monde, mais le fichier joint contient les 300 voisins d'une solution considérée comme la meilleure (zone verte en AR1:AV30).
Si on y copie la solution à 42 (qui se trouve en H1:L30), on peut lire en BU37 le n° de la ligne où on trouve une solution meilleure ou équivalente.
Dans l'exemple choisi, il y a 2 voisins améliorants :
ligne 303 : transposition (3,4) de la solution ligne 9
ligne 963, transposition (2,3) de la solution ligne 29

Naturellement, ça se met dans une macro et on itère tant que ça améliore.
Mais là, c'est plus compréhensible avec le détail du voisinage d'une solution.

Cordialement
 

Pièces jointes

Re : classement (excel, maths?)

Bonsoir à tous,

Un grand merci tout d'abord.

J'ai passé du temps à comparer avec 20 lignes de données, voici le fichier résultat ....je gagne devant Job pour un nombre!!!



ps: je n'ai pas pu tester le dernier fichier d' ODVJ car la colonne insérée en M pose souci.

Bonne soirée et merci.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
112
Deleted member 453598
D
Réponses
22
Affichages
741
Réponses
14
Affichages
395
Réponses
1
Affichages
171
Réponses
1
Affichages
735
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…