OVH Cloud OVH Cloud

VBA peut-il distribuer des travaux ?

7 réponses
Avatar
garnote
Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge

7 réponses

Avatar
Nicolas B.
Salut Serge,

D'après ce que j'ai compris, il faut que les 40 élèves n'aient pas la même
combinaison de travaux, et que chaque version de chaque thème apparaisse
équitablement (c'est à dire qu'une version d'un thème doit être traitée par
40/5 = 8 élèves).

Une ébauche de solution :
En ligne 1, les noms des thèmes,
en colonne A, les élèves.

En B2:E2, rentre 1,1,1,1.
En B3 colle la formule =MOD(B2;5)+1 et étire-la sur B3:E6.

Tu obtiens alors les travaux générés pour 5 élèves avec chaque version de
chaque thème apparaissant une fois.
Change alors les valeurs en B2:E2 pour obtenir d'autres combinaisons.
Je te conseille de faire ces changements à la main : Si tu mets
successivement :
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
...
1,1,2,3 (il faut le faire 8 fois pour 40 élèves)

Dans ce cas, la répartition sera mauvaise. Les travaux seront tous
différents et les versions et thèmes également répartis, mais beaucoup de
travaux se ressembleront à 75 % (les 5 premiers dans l'exemple). Je pense
qu'il ne vaut pas mieux "automatiser" ce choix.

Je te conseillerais d'utiliser par exemple les séries suivantes :
1,1,1,1
1,1,2,2
2,2,1,1
1,2,1,2
2,1,2,1
1,2,2,1
2,1,1,2
1,2,3,4

Les travaux seront alors assez différents les uns des autres.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge


Avatar
Nicolas B.
Et voici par macro, une répartition aléatoire des thèmes telle que aucun
thème ne doit ressembler à plus de 50 % à n'importe quel autre :

(le tableau se présente comme dans l'autre message)

Sub Repartir()
Dim Theme(3)
Randomize
For ligne = 2 To 41
OnRefait:
For t = 0 To 3
Theme(t) = Int(5 * Rnd) + 1
Next
For ligne2 = 1 To ligne - 1
test = 0
For t = 0 To 3
If Theme(t) = Cells(ligne2, t + 2).Value Then test = test + 1
Next
If test > 2 Then GoTo OnRefait
Next
For t = 0 To 3
Cells(ligne, t + 2) = Theme(t)
Next
Next
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Salut Serge,

D'après ce que j'ai compris, il faut que les 40 élèves n'aient pas la
même combinaison de travaux, et que chaque version de chaque thème
apparaisse équitablement (c'est à dire qu'une version d'un thème doit
être traitée par 40/5 = 8 élèves).

Une ébauche de solution :
En ligne 1, les noms des thèmes,
en colonne A, les élèves.

En B2:E2, rentre 1,1,1,1.
En B3 colle la formule =MOD(B2;5)+1 et étire-la sur B3:E6.

Tu obtiens alors les travaux générés pour 5 élèves avec chaque
version de chaque thème apparaissant une fois.
Change alors les valeurs en B2:E2 pour obtenir d'autres combinaisons.
Je te conseille de faire ces changements à la main : Si tu mets
successivement :
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
...
1,1,2,3 (il faut le faire 8 fois pour 40 élèves)

Dans ce cas, la répartition sera mauvaise. Les travaux seront tous
différents et les versions et thèmes également répartis, mais
beaucoup de travaux se ressembleront à 75 % (les 5 premiers dans
l'exemple). Je pense qu'il ne vaut pas mieux "automatiser" ce choix.

Je te conseillerais d'utiliser par exemple les séries suivantes :
1,1,1,1
1,1,2,2
2,2,1,1
1,2,1,2
2,1,2,1
1,2,2,1
2,1,1,2
1,2,3,4

Les travaux seront alors assez différents les uns des autres.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge




Avatar
garnote
Merci pour ces belles suggestions. Je me retrousse
les manches et je plonge !
J'essaie de trouver un truc pour vérifier le nombre
de travaux entièrement différents, le nombre de travaux
contenant une seule chose en commun, deux choses ...

A+

Serge


"Nicolas B." a écrit dans le message de
news: eGxgE2U$
Et voici par macro, une répartition aléatoire des thèmes telle que aucun
thème ne doit ressembler à plus de 50 % à n'importe quel autre :

(le tableau se présente comme dans l'autre message)

Sub Repartir()
Dim Theme(3)
Randomize
For ligne = 2 To 41
OnRefait:
For t = 0 To 3
Theme(t) = Int(5 * Rnd) + 1
Next
For ligne2 = 1 To ligne - 1
test = 0
For t = 0 To 3
If Theme(t) = Cells(ligne2, t + 2).Value Then test = test + 1
Next
If test > 2 Then GoTo OnRefait
Next
For t = 0 To 3
Cells(ligne, t + 2) = Theme(t)
Next
Next
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Salut Serge,

D'après ce que j'ai compris, il faut que les 40 élèves n'aient pas la
même combinaison de travaux, et que chaque version de chaque thème
apparaisse équitablement (c'est à dire qu'une version d'un thème doit
être traitée par 40/5 = 8 élèves).

Une ébauche de solution :
En ligne 1, les noms des thèmes,
en colonne A, les élèves.

En B2:E2, rentre 1,1,1,1.
En B3 colle la formule =MOD(B2;5)+1 et étire-la sur B3:E6.

Tu obtiens alors les travaux générés pour 5 élèves avec chaque
version de chaque thème apparaissant une fois.
Change alors les valeurs en B2:E2 pour obtenir d'autres combinaisons.
Je te conseille de faire ces changements à la main : Si tu mets
successivement :
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
...
1,1,2,3 (il faut le faire 8 fois pour 40 élèves)

Dans ce cas, la répartition sera mauvaise. Les travaux seront tous
différents et les versions et thèmes également répartis, mais
beaucoup de travaux se ressembleront à 75 % (les 5 premiers dans
l'exemple). Je pense qu'il ne vaut pas mieux "automatiser" ce choix.

Je te conseillerais d'utiliser par exemple les séries suivantes :
1,1,1,1
1,1,2,2
2,2,1,1
1,2,1,2
2,1,2,1
1,2,2,1
2,1,1,2
1,2,3,4

Les travaux seront alors assez différents les uns des autres.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge








Avatar
Clément Marcotte
Bonjour,

Puisque le Solveur, peut résoudre des problèmes de programmation
linéaire, tu pourrais lui donner en pâture une fonction à maximiser,
avec les contraintes qui viennent avec...

(Moi cela fait trop longtemps)


"garnote" a écrit dans le message de
news:poJ%b.81745$
Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge




Avatar
garnote
J'ai essayé mais avec160 cellules variables,
pas la patience d'attendre la réponse :-)))

Serge


"Clément Marcotte" a écrit dans le message
de news: #P$iwiV$
Bonjour,

Puisque le Solveur, peut résoudre des problèmes de programmation
linéaire, tu pourrais lui donner en pâture une fonction à maximiser,
avec les contraintes qui viennent avec...

(Moi cela fait trop longtemps)


"garnote" a écrit dans le message de
news:poJ%b.81745$
Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge







Avatar
Daniel.M
Salut Nicolas,

Avec la même bonne idée mais sans Goto :-)

Sub Repartir2()
Dim i As Integer, Ligne As Long
Randomize
For Ligne = 2 To 41
With Range("B" & Ligne).Resize(1, 4)
.Formula = "=INT(RAND()*5)+1": .Value = .Value
End With
i = Evaluate("=MAX(MMULT(--(B2:E" & Ligne - 1 & "=B" & Ligne & _
":E" & Ligne & "),{1;1;1;1}))")

If Ligne > 2 And i > 2 Then Ligne = Ligne - 1
Next
End Sub

Salutations,

Daniel M.

"Nicolas B." wrote in message
news:eGxgE2U$
Et voici par macro, une répartition aléatoire des thèmes telle que aucun
thème ne doit ressembler à plus de 50 % à n'importe quel autre :

(le tableau se présente comme dans l'autre message)

Sub Repartir()
Dim Theme(3)
Randomize
For ligne = 2 To 41
OnRefait:
For t = 0 To 3
Theme(t) = Int(5 * Rnd) + 1
Next
For ligne2 = 1 To ligne - 1
test = 0
For t = 0 To 3
If Theme(t) = Cells(ligne2, t + 2).Value Then test = test + 1
Next
If test > 2 Then GoTo OnRefait
Next
For t = 0 To 3
Cells(ligne, t + 2) = Theme(t)
Next
Next
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Salut Serge,

D'après ce que j'ai compris, il faut que les 40 élèves n'aient pas la
même combinaison de travaux, et que chaque version de chaque thème
apparaisse équitablement (c'est à dire qu'une version d'un thème doit
être traitée par 40/5 = 8 élèves).

Une ébauche de solution :
En ligne 1, les noms des thèmes,
en colonne A, les élèves.

En B2:E2, rentre 1,1,1,1.
En B3 colle la formule =MOD(B2;5)+1 et étire-la sur B3:E6.

Tu obtiens alors les travaux générés pour 5 élèves avec chaque
version de chaque thème apparaissant une fois.
Change alors les valeurs en B2:E2 pour obtenir d'autres combinaisons.
Je te conseille de faire ces changements à la main : Si tu mets
successivement :
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
...
1,1,2,3 (il faut le faire 8 fois pour 40 élèves)

Dans ce cas, la répartition sera mauvaise. Les travaux seront tous
différents et les versions et thèmes également répartis, mais
beaucoup de travaux se ressembleront à 75 % (les 5 premiers dans
l'exemple). Je pense qu'il ne vaut pas mieux "automatiser" ce choix.

Je te conseillerais d'utiliser par exemple les séries suivantes :
1,1,1,1
1,1,2,2
2,2,1,1
1,2,1,2
2,1,2,1
1,2,2,1
2,1,1,2
1,2,3,4

Les travaux seront alors assez différents les uns des autres.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge








Avatar
garnote
Pus rapide, pas possible !
J'ai comme la nette impression que Nicolas et Daniel
comprennent nos questions et un tipeu le VBA.

Chapeau !

:-)))

Serge


"Daniel.M" a écrit dans le message de
news: uWSe$HX$
Salut Nicolas,

Avec la même bonne idée mais sans Goto :-)

Sub Repartir2()
Dim i As Integer, Ligne As Long
Randomize
For Ligne = 2 To 41
With Range("B" & Ligne).Resize(1, 4)
.Formula = "=INT(RAND()*5)+1": .Value = .Value
End With
i = Evaluate("=MAX(MMULT(--(B2:E" & Ligne - 1 & "=B" & Ligne & _
":E" & Ligne & "),{1;1;1;1}))")

If Ligne > 2 And i > 2 Then Ligne = Ligne - 1
Next
End Sub

Salutations,

Daniel M.

"Nicolas B." wrote in message
news:eGxgE2U$
Et voici par macro, une répartition aléatoire des thèmes telle que aucun
thème ne doit ressembler à plus de 50 % à n'importe quel autre :

(le tableau se présente comme dans l'autre message)

Sub Repartir()
Dim Theme(3)
Randomize
For ligne = 2 To 41
OnRefait:
For t = 0 To 3
Theme(t) = Int(5 * Rnd) + 1
Next
For ligne2 = 1 To ligne - 1
test = 0
For t = 0 To 3
If Theme(t) = Cells(ligne2, t + 2).Value Then test = test +
1


Next
If test > 2 Then GoTo OnRefait
Next
For t = 0 To 3
Cells(ligne, t + 2) = Theme(t)
Next
Next
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Salut Serge,

D'après ce que j'ai compris, il faut que les 40 élèves n'aient pas la
même combinaison de travaux, et que chaque version de chaque thème
apparaisse équitablement (c'est à dire qu'une version d'un thème doit
être traitée par 40/5 = 8 élèves).

Une ébauche de solution :
En ligne 1, les noms des thèmes,
en colonne A, les élèves.

En B2:E2, rentre 1,1,1,1.
En B3 colle la formule =MOD(B2;5)+1 et étire-la sur B3:E6.

Tu obtiens alors les travaux générés pour 5 élèves avec chaque
version de chaque thème apparaissant une fois.
Change alors les valeurs en B2:E2 pour obtenir d'autres combinaisons.
Je te conseille de faire ces changements à la main : Si tu mets
successivement :
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
...
1,1,2,3 (il faut le faire 8 fois pour 40 élèves)

Dans ce cas, la répartition sera mauvaise. Les travaux seront tous
différents et les versions et thèmes également répartis, mais
beaucoup de travaux se ressembleront à 75 % (les 5 premiers dans
l'exemple). Je pense qu'il ne vaut pas mieux "automatiser" ce choix.

Je te conseillerais d'utiliser par exemple les séries suivantes :
1,1,1,1
1,1,2,2
2,2,1,1
1,2,1,2
2,1,2,1
1,2,2,1
2,1,1,2
1,2,3,4

Les travaux seront alors assez différents les uns des autres.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour le monde,

Un ami géographe m'a soumis le problème suivant.
Il a quarante étudiants auxquels il veut donner un travail.
Le travail comporte quatre thèmes et chacun des thèmes
a cinq versions différentes.
Chaque étudiant doit recevoir une version de chaque thème.
Comment organiser la distribution des travaux pour maximiser
le nombre de travaux différents ?
J'ai beau tripoter ça avec Excel, je n'y arrive pas.
Par tâtonnement, j'ai un début de solution :
T (thème)
Les chiffres : numéros des versions.

T1 T2 T3 T4

1. 1 1 1 1
2. 2 2 2 2
3. 3 3 3 3
4. 4 4 4 4
5. 5 5 5 5
6. 1 2 3 4
7. 1 3 2 5
8.
.
.
.
40.

Pas évident, il me semble.
Et même pas sûr d'avoir été clair !


Serge