macro de classement spécial.

OlivGM

XLDnaute Occasionnel
Bonsoir le Forum,

Comment écrire un code VBA sous Excel 2007 qui arrangerait mes nombres de départ en 3 paquets de 1 ou 2 nombres identiques par paquet?

Dois-je utiliser un aléa? Un excelnaute a-t-il une idée de code à me proposer?

merci.
(petit exemple succint joint, il y aura plus de lignes et des nombres au delà (70) pour l'instant je classe à la main (enfin j'essaye...).
 

Pièces jointes

  • arrang1.xlsx
    10.4 KB · Affichages: 49
  • arrang1.xlsx
    10.4 KB · Affichages: 36

ODVJ

XLDnaute Impliqué
il y aura plus de lignes et des nombres au delà (70)
Bonjour à tous,

Indique le nombre de lignes maxi, l'amplitude des nombres qui remplissent les cellules (ce seront bien toujours des nombres? De 1 à...? Consécutifs ?).
Le nombre de nombres différents dans chaque paquet doit être le même pour chaque paquet ? Si oui, le nbre de nombres différents est-il toujours un multiple de 3?
Le nombre de colonnes sera toujours 5?

Au fait, pourquoi veux -tu faire ce classement original ?

Pour finir, donne un exemple complet avec un nombre de lignes maxi ou quasi maxi.

Cordialement

Remarque : quand j'ai ce genre de problème, je cherche à le modéliser sur un Solver (sans doute parce que je ne vois pas trop comment le faire en VBA!).
Ici, j'utiliserais une variable binaire de dimension 4 (nblignes, nbcol, nbpaquets, nbnombres) avec les contraintes kivonbien.
Enfin, si j'avais un PC sous la main, c'est ce que j'essaierais.
 
Dernière édition:

OlivGM

XLDnaute Occasionnel
Bonjour ODVJ,

Merci pour ta réponse, l'idée du solveur paraît bonne mais je ne connais pas...
Pour les paramètres, ils sont variables, je dirai 30 à 40 lignes, 5 colonnes (sans doublon sur la ligne) et nombres allant de 1 à 50 ou 70 selon le cas.
Je sais que le solveur ne pourra résoudre toutes les lignes, il y aura donc des "conflits" entre les nombres...(il faudrait arriver au moins de conflits possible)

merci
Olive
 

ODVJ

XLDnaute Impliqué
Bonsoir,

Maintenant que j'ai retrouvé mon PC, le solver me propose une autre solution pour ton exemple :
paquet 1 : 6, 9, 10, 11
paquet 2 : 1, 3, 5, 7
paquet 3 : 2, 4, 8, 12​

ou encore :
paquet 1 : 1, 3, 7, 11
paquet 2 : 8, 9, 10, 12
paquet 3 : 2, 4, 5, 6​

Rem : pour correspondre à la valeur en N4, j'ai corrigé la cellule E4 de ton fichier en y mettant un 6 à la place du 5.

Si E4 doit contenir 5 et non 6, une solution pourrait être :
paquet 1 : 1, 3, 7, 12
paquet 2 : 6, 9, 10, 11
paquet 3 : 2, 4, 5, 8​

Cordialement
 
Dernière édition:

OlivGM

XLDnaute Occasionnel
Bonsoir ODVJ,

Ou, sur un petit fichier avec peu de nombres, il peut y avoir d'autres solutions permutées.
As-tu une solution de Solveur pour le problème du fichier réel (3 lignes avec des nombres allant de 1 à 50 /ou 70)

merci
Bonne soirée
ps : je ne connais las le solveur du tout.
 

ODVJ

XLDnaute Impliqué
Bonsoir eriiic,

Si tu veux une version simplex du problème, en voici une.
Si tu as l'addin Solverstudio, il y a une solution GMPL dans le classeur.

Pour 70 lignes je crains que ça coince avec le solver de base d'excel au niveau du nbre de variables et de contraintes.

Cordialement
 

Pièces jointes

  • xld_arrang1_olivgm.xlsx
    22.8 KB · Affichages: 37

eriiic

XLDnaute Barbatruc
Bonjour,

Nettement plus complet et adapté (et propre... ;-) )
Merci pour cet exemple Simplex PL que je n'avais jamais réussi à utiliser.
Ca m'ouvre de nouveaux horizons et m'occupera un moment le temps d'approfondir.
Tu peux me confirmer qu'avec cette méthode on ne définit donc que des contraintes et pas de cellule cible. Tu as quand même mis A: 0 , c'est impératif ?
eric
 

ODVJ

XLDnaute Impliqué
Bonjour eriiic,

Dans ce modèle, il n'y a pas besoin de maximiser, minimiser une fonction économique ni de lui affecter une valeur quelconque.
J'ai donc laissé valeur à 0 mais tu peux mettre Max ou Min, ça ne change rien.
L'important c'est de ne pas mettre d'objectif à définir.

Il faudra sans doute revoir le modèle lorsqu'il n'y aura pas de solution, en créant une cellule qui calculera une sorte d'écart de conformité d'une solution.
Il suffira de minimiser alors cette cellule.
Ça risque d'arriver avec 70 lignes. C'est pour ça que j'aurais aimé que OlivGM fournisse ses exemples.

@OlivGM :
les 3 dernières contraintes (=$T$22:$V$28<=2, =$T$22:$V$28>=1 et =$W$22:$W$28=5) sont là pour forcer les paquets à respecter une configuration 122, 212 ou 221.
La contrainte =$O$16:$O$18=4 oblige les paquets à contenir 4 nombres chacun.
La contrainte =$C$19:$N$19=1 force un nombre à appartenir à 1 paquet et un seul.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 512
Messages
2 089 202
Membres
104 063
dernier inscrit
lisadp