VBA : ordonner 5040 arrangements

  • Initiateur de la discussion Initiateur de la discussion cibleo
  • 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 !

cibleo

XLDnaute Impliqué
Bonsoir le forum,

Pour bien comprendre ma demande, visualiser la Feuil2 du fichier joint.
A partir de 4 prénoms, j'ai généré 24 arrangements (Algo de Myrna Larson) ---> 4 x 3 x 2 x 1
De la colonne J à M, je les ai repris et ordonnés manuellement pour former des blocs de 4 sur 4, chaque prénom étant représenté sur chaque ligne et sur chaque colonne.
Dans la colonne J (la première donc), les prénoms ont toujours la même position.

Dans l'illustration ci-dessous : ce qu'il ne faut pas faire, Anne ne figure pas dans la 3ème colonne, mais figure 2 fois en colonne 2.
Arrangements.jpg

En I1, il y a une liste de validation pour bien visualiser la position des prénoms.

Avec 24 arrangements, c'est simple à faire 🙂
Mais avec 7 prénoms représentant 5040 arrangements, j'ai laissé tomber 😕 Voir la Feuil3
L'arrangement de départ (colonne K) : Bill Anne Yves Tom Zoé Paul Sam
Liste de validation en B1.

Une macro pourrait-elle résoudre cet algorithme ?

Cibleo

Précision : il y a quelques mois, je l'ai réalisé manuellement avec 6 prénoms soit 720 arrangements : bonjour les maux de tête.
 

Pièces jointes

Re : VBA : ordonner 5040 arrangements

Bonjour le fil, cibleo

Un exemple parmis d'autres (avec des numéros, donc à adapter)
Code:
Sub b()
    Dim L%, C%, d%, n%
 
    Application.ScreenUpdating = False
 
    With Feuil1
 
        .[A:G].ClearContents
        .[A1] = 1: .[B1] = 2: .[A2] = 2: .[B2] = 1
 
        For n = 3 To 7
 
            d = 1
            L = .[A1].CurrentRegion.Rows.Count
            .[A1].CurrentRegion.Copy .[A1].Offset(L).Resize(L * (n - 1))
 
            .[A1].Offset(, n - 1).Resize(L) = n
            For C = n - 2 To 0 Step -1
                .[A1].Offset(L * d, C).Resize(L).Insert (xlToRight)
                .[A1].Offset(L * d, C).Resize(L) = n
                d = d + 1
            Next
 
        Next
 
    End With
 
End Sub
A plus
 
Re : VBA : ordonner 5040 arrangements

Bonjour à tous,
Bonjour Soenda,

Merci pour ta réponse Soenda.

Voilà ce que j'obtiens avec ta macro pour le 1er bloc de 7.
Bill est bien présent 7 fois mais 3 arrangements commence par Bill 🙁
3 fois en colonne A
2 fois en colonne B
2 fois en colonne C
et rien en colonne D, E, F et G.

Bill.jpg

Voilà ce que j'aimerais obtenir. (Ici les 2 premiers blocs d'une série de 720 blocs de 7 sur 7)
Donc reprendre 5040 arrangements générés avec 7 prénoms.

Chaque prénom ne doit figurer qu'une fois dans chaque colonne et ligne d'un bloc de 7 sur 7.

Bill1.jpg

Précision : en colonne A, les 7 prénoms sont toujours placés dans le même ordre (le même arrangement répété 720 fois à la verticale)
En fait, c'est l'arrangement placé en ligne1.

Pas simple à résoudre, j'en conviens 😎
Je vais vous renvoyer le fichier, je ne suis pas certain que vous puissiez tous l'ouvrir. Patience je ne suis pas chez moi.

Cibleo
 
Re : VBA : ordonner 5040 arrangements

Revoilà le fichier,

En Feuil3, j'aimerais ordonner 5040 arrangements (7 prénoms) selon le même principe qu'en Feuil2, dans laquelle j'ai ordonné manuellement 24 arrangements (4 prénoms) voir partie verte.

Bonne soirée Cibleo
 

Pièces jointes

Re : VBA : ordonner 5040 arrangements

Bonjour le forum,
Bonjour soenda et merci 🙂

Devant la difficulté, j'essayais de résoudre le problème à coups de copier/coller après l'application du filtre automatique sur chaque colonne.
D'où mon silence.
Le résultat, je le mettrai en ligne, mais ce sera long, patience.

Comme le fil est relancé, continuons sur la voie du VBA et la solution de soenda illustrée ci-dessous.
Je reprends : ligne 1 le 1er arrangement 1 2 3 4 5 6 7
En colonne A, cet arrangement doit être repris successivement 720 fois dans cet ordre. Voir l'illustration du post #4#

Soenda.jpg

On y est presque car on retrouve bien la bonne disposition des différents arrangements.

Ci-dessous, ce que je réalise manuellement 🙄
J'ai filtré sur "Bill" en colonne A.
En colonne B, les 6 autres prénoms lui sont associés successivement dans un même ordre.

Hareng.jpg

En fait, c'est logique, exemple avec Bill en A1 :

On retrouve en colonne A, Bill toutes les 7 lignes.
En colonne A et B, on retrouve Bill associé à Anne toutes les 42 lignes (7 x 6)
En colonne A B et C, on retrouve Bill associé à Anne et Yves toutes les 210 lignes (7 x 6 x 5)
En colonne A B C et D, on retrouve Bill associé à Anne Yves et Tom toutes les 840 lignes (7 x 6 x 5 x 4)
Etc, etc, etc ....

Ainsi les 5040 arrangements peuvent être ordonnés en suivant ce raisonnement pour tous les prénoms.

Cibleo
 
Dernière édition:
Re : VBA : ordonner 5040 arrangements

Bonjour le forum,
Bonjour Soenda,

Oui, dans l'absolu, c'est tout à fait ça, sauf qu'il y a une contrainte.
Pour bien comprendre, il faut que j'explique la finalité du problème posé.

Explication :
J'essaie de réaliser un planning de gardes avec 7 chauffeurs et donc créer 7 cycles.

Planning.jpg
Ci-dessus, le planning a éte réalisé avec 6 chauffeurs. Il y a 6 cycles soit 720 arrangements que j'avais ordonnés manuellement.

En reprenant ton exemple, j'essaie de composer 7 cycles en ordonnant les 5040 arrangements.
Chacune des 7 colonnes (A, B, C, D, E, F et G) doit représenter un cycle et sera une plage nommée.

Ainsi, la colonne A de ton fichier représentera le cycle de la ligne 9 du planning.
B : cycle de la ligne 10
C : cycle de la ligne 12
D : cycle de la ligne 13
E : cycle de la ligne 14
F : cycle de la ligne 15
G : cycle de la ligne 16

Dans l'illustration, la formule (Monique) en D9 reprend une plage nommée "List" qui sera la colonne A de ton exemple.
Idem pour les autres colonnes qui représenteront les autres lignes.

Dans ton fichier, la colonne A doit toujours afficher successivement la série 1 2 3 4 5 6 et 7 dans cet ordre contrairement aux autres colonnes.
Vois la ligne 9 de l'illustration, les prénoms reviennent à intervalles réguliers.

J'espère ne pas vous avoir trop embrouillé avec mes explications 😎
Cibleo

PS : si c'est trop compliqué, je le réaliserai manuellement, il n'y a rien d'urgent.
 

Pièces jointes

  • Planning.jpg
    Planning.jpg
    59.6 KB · Affichages: 1 788
  • Planning.jpg
    Planning.jpg
    59.6 KB · Affichages: 1 922
Re : VBA : ordonner 5040 arrangements

Bonsoir le forum,

Comme promis, je reviens sur le fil avec les 5040 arrangements ordonnés. (voir la Feuil1 du fichier joint)
Pour mémoire :

7 éléments 1, 2, 3, 4, 5, 6, 7 représentent 5040 arrangements ---> 7 x 6 x 5 x 4 x 3 x 2 x 1
En colonne K : j'ai listé les 5040 arrangements selon l'Algo de Myrna Larson
En colonne I, ceci sont ordonnés selon un ordre précis.

En plage (A:G), c'est le résultat souhaité (retranscription de la colonne I)
Cela a été réalisé manuellement 😛, car je n'ai jamais su résoudre cet algorithme malgré l'aide de soenda.

Cibleo
 

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

Discussions similaires

Réponses
0
Affichages
433
Réponses
0
Affichages
556
Réponses
3
Affichages
1 K
O
Réponses
5
Affichages
2 K
B
Réponses
2
Affichages
2 K
bastienb
B
G
Réponses
4
Affichages
3 K
G
J
  • Question Question
Réponses
3
Affichages
1 K
Réponses
6
Affichages
3 K
Retour