Regroupement d'objets 3 par 3 Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'577
Appréciations reçues : 57
Inscrit le : 18 septembre 2008
Version d'Excel : 2010 / 2016
Téléchargements : Mes applications

Message par galopin01 » 1 août 2016, 15:43

La macro n'écrit que le N° des objets : tu as tous les triplettes ou trios ou regroupements que tu veux pour n'importe quelle quantité que veux-tu de plus ?
Au lieu de 1, 2, 3 Il faut que je t'écrive Objet 1, Objet 2, Objet 3 ? Tu comprendras mieux ?
Je t'ai fait une macro polyvalente qui te fait aussi bien les tirages pour 6 que pour 9, 12 ou plus.

Tu n'as qu'à remplacer le N= 49 par N= 6 au début de la macro et tu te retrouves avec le cas de figure avec tes 20 combinaisons.
Après YAPUKA faire glisser la seconde moitié des résultats à coté de la première moitié et tu as tous tes regroupements...

Je t'ai amélioré la macro pour qu'elle te fasse le rapprochement en plus et t'ai mis N = 6 pour que tu te retrouves en terrain familier, mais là je peux plus rien faire de plus pour toi.... Si tu comprends pas !
A+
combinatoire.xlsm
(24.8 Kio) Téléchargé 20 fois
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
Avatar du membre
Elhevan
Membre fidèle
Membre fidèle
Messages : 244
Inscrit le : 1 juillet 2016
Version d'Excel : Home : 2016 EN Work : 2010 FR

Message par Elhevan » 1 août 2016, 15:52

Semble fonctionner pour tout multiples de 3, je galère un peu plus pour le cas où il y a des reste :D (m'enfin j'ai pas vérifié que j'avais les bons résultats sans reste donc je galère peut-être des deux côtés en fait)
3yi3.xlsm
(13.42 Kio) Téléchargé 18 fois
Mia san mia.

On n'envoie pas des satellites avec des yourtes !
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 1'932
Appréciations reçues : 26
Inscrit le : 13 mai 2014
Version d'Excel : 2007-201364bits-2011MAC

Message par fred2406 » 1 août 2016, 16:19

Bonjour Yvouille
bonjour tous
alors j'ai fait des tests avec ma machine, qui est très récente (Intel I7+16Go de RAM)
avec 15 objets temps exécution de la macro de H2So4 => 80s (1 min 20) (taille du fichier 4.8Mo)
avec 16 objets temps exécution de la macro de H2So4 => 337s (5 min 37s) (taille fichier 20Mo)
avec 17 objets temps exécution de la macro de H2So4 => 925s +de 15 minutes = >taille du fichier : 56Mo....
dispo ici si tu veux : EDIT je supprime le lien vers mon Dropbox....

pour 18 objets je pourrais lancer la macro ce soir car là je penses qu'il y en a pour 45 minutes... et je ne peux pas bloquer mon excel pour ce laps de temps pour le moment...
je pourrais te mettre aussi le fichier a dispo si tu le souhaite comme cela tu pourras archiver le résultat sur ta machine (mais cela fera gros comme taille de fichier....)
dis moi si cela t’intéresse....

a+
fred
Modifié en dernier par fred2406 le 3 août 2016, 17:56, modifié 1 fois.
Je ne réponds pas aux M.P. non sollicités.
Fred
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'552
Appréciations reçues : 32
Inscrit le : 6 avril 2007
Version d'Excel : 2010

Message par Yvouille » 1 août 2016, 16:21

Re,

@ Elhevan
Si tu vas vois la macro que me propose h2so4, tu verras qu’il y a normalement 3970 combinaisons possibles avec 12 objets. Ta macro en trouve 58. C’est nettement insuffisant. Par exemple ta macro ne trouve pas le trio CDL.

@ Galopin
Désolé, mais j’ai inscrit des objets dans la ligne 1 comme dans le fichier de h2so4 – en pensant que tu avais peut-être repris l’idée – puis j’ai essayé d’inscrire des objets dans la colonne N – comme je l’avais indiqué dans mon tout premier message – et comme ça semblait tourner dans le vide, j’ai pensé que je n’inscrivais pas les objets de base au bon endroit.

Maintenant que j’ai compris comment fonctionne ta macro, je me rends compte que tu ne formes à chaque fois que deux trios, alors que je voudrais à chaque fois tous les trios possibles ; trois trios pour 9 objets, 4 trios pour 12 objets, etc. J’avais encore indiqué que s’il y avait des trios incomplets, ce serait bien de les traiter, mais que je pouvais m’en passer. C’est du moins dans ce sens que l’on discute avec h2so4.

Merci à tous les deux pour votre aide.

EDIT

Salut Fred,

Je vois ton message après avoir inscrit le mien ! Merci pour ton intervention :)

Les informations que tu me donnes sont amplement suffisantes ; je sais ainsi qu’il est inutile de vouloir partir dans le sens d’effectuer un tirage avec plus de 15 objets. Mon PC étant plus ou moins deux fois plus lent (2 minutes 30 pour 15 objets contre 1 minute 20 chez toi), je ne vais pas me lancer dans des tirages plus longs.

Comme je l’ai indiqué à h2so4, je vais si nécessaire effectuer plusieurs tirages de 9 à 15 objets. Les résultats seront moins bons, mais déjà intéressants.

J’ai de la peine à ouvrir ton fichier. A titre d’information, combien a-t-il de lignes ?
Yvouille


:btres:
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 7'853
Appréciations reçues : 218
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 1 août 2016, 16:31

Yvouille a écrit :Bonjour tout le monde,

J’ai remarqué que si je lance la macro avec 13 objets par exemple, dans la dernière colonne, je n’ai pas tous les objets qui y apparaissent, alors que logiquement il devrait y avoir le même nombre d’occurrences dans cette colonne pour tous les objets. Après avoir formé 4 x 3 trios, il devrait régulièrement rester un dernier objet seul. Ce n’est pas très important car je vais probablement lancer ma macro qu’avec des multiples de 3 (dans le cas présenté ci-dessus avec 13 objets, j’en choisirais par exemple 12 au hasard), mais c’est juste pour avoir ton avis.
tu as raison la macro ne fonctionne correctement qu'avec des multiples de 3
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 1'932
Appréciations reçues : 26
Inscrit le : 13 mai 2014
Version d'Excel : 2007-201364bits-2011MAC

Message par fred2406 » 1 août 2016, 16:43

RE
pour 17 objets 792011 Lignes ....
fred
Je ne réponds pas aux M.P. non sollicités.
Fred
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'552
Appréciations reçues : 32
Inscrit le : 6 avril 2007
Version d'Excel : 2010

Message par Yvouille » 1 août 2016, 16:53

@ Fred
Merci Fred, ce renseignement ne fait que renforcer mon idée première ; je ne vais pas travailler avec plus de 15 objets.

@ h2so4
Tant pis pour les trios incomplets, je peux très bien m’en passer. La macro que tu m’as offerte là fait déjà un boulot gigantesque. Je t’en remercie sincèrement.

Je laisse le sujet ouvert quelques jours si quelqu’un a des remarques, des idées à présenter.

Bonnes salutations à tous les intervenants :D
Yvouille


:btres:
Avatar du membre
AMIR
Membre dévoué
Membre dévoué
Messages : 733
Appréciations reçues : 6
Inscrit le : 19 janvier 2015
Version d'Excel : 2007

Message par AMIR » 1 août 2016, 17:12

bonjour
ce que j ai compris
Je voudrais connaitre toutes les possibilités de les grouper 3 par 3,
Vous ne voulez pas répéter les trios dont leurs éléments se ressemblent (les mêmes éléments)
Si nécessaire avec des objets laissés de côté.
Afficher les autres trios restants
Le résultat devrait être placé dans les colonnes suivantes,
Si possible avec chaque objet dans une colonne différente.
Si possible avec chaque Trio dans une colonne différente.

Essayer ca : pour 12 objet (0,30 secondes) et pour 48 objet (4,19 secondes)
DémoV3.xlsm
(20.31 Kio) Téléchargé 17 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 7'853
Appréciations reçues : 218
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 1 août 2016, 17:33

re-bonjour,

code qui traite également un nombre d'objets qui n'est pas un multiple de 3.
Dim ia$(1 To 50), a$(1 To 50), v&(1 To 50), u&(1 To 50), sol&, p$(1 To 2)
Sub permute(n&, Optional ind& = 1, Optional niveau& = 1)
    If niveau = 1 Then
        limi = 1
    ElseIf niveau Mod 3 = 1 Then
        limi = niveau + 2
        If limi > n Then limi = n
    Else
        limi = n
    End If
    For i& = ind To limi
        If u(i) = 0 Then
            u(i) = 1
            v(niveau) = i
            If niveau = n Then
                sol = sol + 1
                For j& = 1 To n
                    Cells(sol, j) = a(v(j))
                Next j
                For j = 1 To 2
                    Cells(sol, n + j) = p(j)
                Next j
            Else
                If niveau Mod 3 = 0 Then
                    permute n, niveau - 2, niveau + 1
                Else
                    permute n, i + 1, niveau + 1
                End If
            End If
            u(i) = 0
        End If
    Next i
End Sub
Sub aargh()
    t = Timer
    Application.ScreenUpdating = False
    n& = Cells(1, Columns.Count).End(xlToLeft).Column
    sol = 1
    For i& = 1 To n
        ia(i) = Cells(1, i)
    Next i
    If n Mod 3 = 0 Then
        p(1) = ""
        p(2) = ""
        For i = 1 To n
            a(i) = ia(i)
        Next i
        permute n
    ElseIf n Mod 3 = 1 Then
        For i = 1 To n
            p(1) = ia(i)
            p(2) = ""
            k = 0
            For j = 1 To n
                If j <> i Then k = k + 1: a(k) = ia(j)
            Next j
            permute n - 1
        Next i
    Else
        For i = 1 To n - 1
            p(1) = ia(i)
            For i1 = i + 1 To n
                p(2) = ia(i1)
                k = 0
                For j = 1 To n
                    If j <> i And j <> i1 Then k = k + 1: a(k) = ia(j)
                Next j
                permute n - 2
            Next i1
        Next i
    End If
    MsgBox sol - 1 & " permutations en " & Timer - t
    Application.ScreenUpdating = True
End Sub
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'552
Appréciations reçues : 32
Inscrit le : 6 avril 2007
Version d'Excel : 2010

Message par Yvouille » 2 août 2016, 22:03

Bonjour tout le monde,

@ Amir

Avec ta macro, tu as apparemment trouvé toutes les permutations possibles pour le premier trio d’objets, mais tu n’as pas été plus loin. Par exemple avec 9 objets, la dernière ligne trouvée est

Objet 1-Objet 8-Objet 9 / Objet 2-Objet 3-Objet 4 / Objet 5-Objet 6-Objet 7

Mais il manque la suite :
Objet 1-Objet 8-Objet 9 / Objet 2-Objet 3-Objet 5 / Objet 4-Objet 6-Objet 7
Objet 1-Objet 8-Objet 9 / Objet 2-Objet 3-Objet 6 / Objet 5-Objet 4-Objet 7
Objet 1-Objet 8-Objet 9 / Objet 2-Objet 3-Objet 7 / Objet 5-Objet 6-Objet 4
etc.

Va donc voir la solution de h2so4 qui correspond exactement à mon attente.



@ h2so4

Avec ce complément, c’est tout simplement génial :appl: Merci infiniment.

J’aurais encore une question ; j’ai l’habitude de travailler avec l’instruction ‘’Option explicit’’, mais là j’ai dû l’enlever pour que ta macro passe (ou j’aurais dû déclarer toutes tes variables et j’avais un peu la trouille de me planter). Pourquoi ne travailles-tu pas avec cette instruction ? C’est parce que ce sont des tableaux ? J’avais compris que c’était bien de déclarer toujours les variables, que ça pouvait faire gagner du temps.


Chaleureusement.
Yvouille


:btres:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message