Arrangement, permutation, combinaison lettres Alphabet

Bonjour à tous et à toutes,

Donc 26 lettres , A,B,C..Z

Avec ces lettres il faudrait lister toutes les combinaisons de deux lettres sur les 26 (ou 3 ou 4 mais restons sur 2 pour l'exemple) = 325

De cette liste de 325 "couples" je souhaiterai que chaque "couples" soit combiner ou arranger entre eux (je ne sais pas le terme ) de façons à former une nouvelle liste de 8 éléments "mot" sans répétions de lettres( cela peut être 6 ou 10 lettres ) mais prenons 8 pour l'exemple.

Comme dans un élément de 8 lettres "mot" il y a 28 "couples" issus de la liste du départ je devrait avoir une liste de 11.60 " mots" disons 11 avec un reste ou le 12 éme n ayant pas 8 éléments.

Ben j'y arrive pas ! sais pas faire....

Quelqu'un peut il m-aider ?

Bonjour,

il me semble que cela générera un nombre astronomique de combinaisons possibles. les limites d'excel seront vite atteintes.

Bonjour,

Pour les 325 paires, tu peux tester ce code, résultat en colonne A :

Sub Test()

    Dim Tbl() As String
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer

    For I = 1 To 26

        ReDim Preserve Tbl(1 To I): Tbl(I) = Chr(I + 64)

    Next I

    For I = 1 To UBound(Tbl): For J = I + 1 To UBound(Tbl)

        K = K + 1
        Cells(K, 1).Value = Tbl(I) & Tbl(J)

    Next J, I

End Sub

Pour le reste, je ne comprend pas trop ce que tu veux avec tes " 8 lettres "mot" il y a 28 "couples" ", un petit exemple pour que je comprenne mieux pour voir si je peux éventuellement t'aider ?

Merci Theze,

Première étape ok.

Oui je pense que tu pourra m'aider et je t'en remercie c'est important pour moi.

Si on prend 28 de tes paires ( AB,AC,AD,AE,AF etc 28) et qu'on les réunis il n'y a une solution pour formé une suite de 8 lettres

ex ABCDEFGH puisque CONBIN = (8*7)/(2*1) du coup a l’intérieur des 8 lettres je retrouve les 28 pairs.

Mais si on refait ceci de façons à utiliser toutes les paires il ni a qu'une seule solution d’atteindre l'objectif d'utiliser toutes ces paires de façons optimal dans un ensemble de 12 lignes de 8 lettres.

Comme on a (dans l'exemple) 325 paires :

325 / 28 = 11.60

Donc dans 12 lignes (11 pleine + un reste ) j'utilise les 325 solutions

Bonjour,

Donc, si j'ai bien compris, tu veux faire des blocs de 28 paires ?

Avec ceci alors, 11 blocs de 56 lettres et 1 bloc de 34 lettres ce qui donne bien 11,6 :

Sub Test()

    Dim Tbl() As String
    Dim TblFin() As String
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim L As Integer

    'récup des lettres de l'alphabet
    For I = 1 To 26

        ReDim Preserve Tbl(1 To I): Tbl(I) = Chr(I + 64)

    Next I

    'initialise
    L = 1: ReDim TblFin(1 To L)

    'assemblage des paires
    For I = 1 To UBound(Tbl): For J = I + 1 To UBound(Tbl)

        'pour le test, les paires en colonne A. Ne pas supprimer l'incrémentation de la variable K !
        K = K + 1: Cells(K, 1).Value = Tbl(I) & Tbl(J)

        'concaténation des paires dans le tableau final
        TblFin(L) = TblFin(L) & Tbl(I) & Tbl(J)

        'incrémentation du tableau final toutes les 28 paires
        If K Mod 28 = 0 Then L = L + 1: ReDim Preserve TblFin(1 To L)

    Next J, I

    'résultat en colonne B
    For I = 1 To UBound(TblFin)

        Cells(I, 2).Value = TblFin(I)

    Next I

End Sub

Bonjour Theze,

je te remercie pour ton implication et je pense que tu touche au but.

Visiblement c'est ça mais il ne faut pas que les lettres soit en double ou en triple .

il y a bien le nombre.tu as bien compris que si nous parlons de 28 couples c'est en relation avec le bloc de 8 lettres

donc maintenant si tu le peut il faudrait que je puisse sélectionner dans une case le nombre de lettre que je souhaite " dans notre exemple c'est 8 mais je demander 3 ou 4 ou 5 ou 10 "

si par exemple je demande 4 lettres par bloc nous aurons :

6 paires ; 325 / 6 = 54.16 bloc de 4 lettres

Est ce que tu comprend ?

merci encore pour ton aide.

Bonjour,

Donc dans une chaîne comme ça :

ABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZBCBDBE

quel est le résultat attendu ?

Bonjour Theze,

Ben non.

pour 8 lettres je doit avoir abcdefgh et dans cette chaîne j ai bien les 28 couples

Et ce sur 12 lignes afin d utiliser tous les couples.

Bonjour à tous et à toutes,

Bonjour Theze,

Pour illustrer ma demande ci-joint deux feuilles

J’espère que ce sera plus clair

35classeur1.xlsm (19.83 Ko)

bonjour,

dans ton exemple avec 4 lettres pour former des mots de 3 lettres

tu nous indiques ABC (les couples sont AB, AC,BC)

puis tu nous indiques BAD( les couples sont AB,AD et BD)

le couple AB est utilisé dans les 2, je croyais qu'un couple ne pouvait être utilisé qu'une seule fois.

peux-tu donner plus d'explication ?

Bonjour,

Je pense que je n'ai pas encore tout compris car je trouve 46 combinaisons avec les 325 paires de lettres ?

Si ce n'est encore pas ça, indique nous le résultat final attendu et pas juste les quatre premiers groupes et en faisant bien attention que les lettres soient dans le bon ordre souhaité, pas comme je le présume et d'ailleurs que h2so4 (que je salut au passage !) te fait remarquer ! N'étant pas dans ta tête, on ne sais pas à quoi peut bien servir tout ceci, du moins pour moi !

A tester, le résultat en colonne B de la feuille active :

Sub Test()

    Dim Tbl() As String
    Dim TblAssoss() As String
    Dim TblFin() As String
    Dim T
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim L As Integer
    Dim Chaine As String

    'récup des lettres de l'alphabet
    For I = 1 To 26

        ReDim Preserve Tbl(1 To I): Tbl(I) = Chr(I + 64)

    Next I

    For I = 1 To UBound(Tbl): For J = I + 1 To UBound(Tbl)

        K = K + 1: ReDim Preserve TblAssoss(1 To K)
        TblAssoss(K) = Tbl(I) & ";" & Tbl(J)
        Cells(K, 1).Value = Tbl(I) & Tbl(J) 'les paires en colonne A

    Next J, I

    Erase Tbl()
    J = 0

    For I = 1 To UBound(TblAssoss)

        J = J + 1

        If I Mod 7 = 0 Then

            Chaine = Chaine & Split(TblAssoss(I), ";")(1)

            L = L + 1: ReDim Preserve Tbl(1 To L)
            Tbl(L) = Chaine
            Chaine = ""
            J = 0

        Else

            T = Split(TblAssoss(I), ";")
            If J = 1 Then Chaine = T(0) & T(1) Else Chaine = Chaine & T(1)

        End If

    Next I

    'résultat en colonne B
    For I = 1 To UBound(Tbl): Cells(I, 2).Value = Tbl(I): Next I

End Sub

Bonjour Theze,

Oui effectivement .

L'objectif est de n’utiliser les couples qu'une fois mais c'est parfois impossible (comme là).

La solution doit respecter le nombre minimal de ligne de résultat tout en utilisant tout les couples.

Dans l'exemple :

2 lignes de 3 utilises tout les couples (pour 4 lettre de départ et 3 lettres à l'arrivée)

11,6 lignes de 8 numéros contiennent aussi tout les couples (pour 26 lettres de départ et 8 à l'arrivée)

Si dans l'exemple de 26 lettre les couples sont pris au hasard puis assemblés (de tel sorte que ab, ac ,ad ... donne abcd ... 8 lettres en tout)

nous n’arriverons jamais à 11.6 lignes mai surement beaucoup plus.

C'est pour cela qui faut qu'elles soient prises que dans certaines conditions mathématique ou logique.

Bonjour à tous et à toutes ,

Bonjour Theze et H2SO4

Theze, tu trouve 46 combinaisons avec les 325 paires de lettres c'est normal car il y a beaucoup trop de redondance.

BFGHIJKL

BMNOPQRS

BTUVWXYZ

DQRSTUVW

DXYZFGHI

EJKLMNOP

EQRSTUVW

FRSTUVWX

FYZHIJKL

GMNOPQRS

GTUVWXYZ

HIJKLMNO

HPQRSTUV

HWXYZJKL

IMNOPQRS

ITUVWXYZ

JKLMNOPQ

JRSTUVWX

JYZLMNOP

KQRSTUVW

Je sais que le problème posé n'est pas simple, (sinon c'est pas marrant)

C'est un problème mathématique d’abord, de la même manière que l'analyse factoriel ou la méthode combinatoire ou même les tableaux matriciels en sont au départ.

Mais vous qui manipulez le VBA vous devez pouvoir sortir quelque chose.(ce que tu as fait est d’ailleurs pas mal, car on approche et je t'en remercie encore)

Récapitulons (tu peut relire les post du départ la problématique y est posé dés le début avec les contraintes):

Une liste de X éléments ( disons 26 mais je doit pouvoir le définir à chaque fois que je le souhaite)

Méthode combinatoire donne 325 couples

On prend ces couples de tel sorte que : ils ne soient utilisés qu'une fois "dans la ligne" qu'il y ai 28 couples par lignes (pour une ligne de 8 lettres, d’ailleurs ce chiffre aussi est variable) et enfin il doit y avoir que 11.6 ligne ( pour l'exemple de 8)

J'ai noté les calculs pour arrivé à ce resultat sur les feuilles que je joint à nouveau.

Pour ce à quoi cela va servir, c'est déjà compliqué comme ça je ne veux pas en rajouter et ça ne change rien aux donnée du problème.

Merci encore de votre aide et en particulier Theze, ne lâchez pas l'affaire s'il vous plait.

A plus

24classeur1.xlsm (19.83 Ko)

bonjour,

quant à moi, je n'ai toujours rien compris à tes explications.

a quoi correspondent ces lignes qui tu as mises dans ton dernier message ? que signifient les couleurs. comment doit-on gérer le parfois impossible dans

L'objectif est de n’utiliser les couples qu'une fois mais c'est parfois impossible (comme là).

Bonjour h2so4,

Les lignes en questions sont issues du dernier code envoyé par Theze, les couleurs sont là pour souligner les redondances des lettres raison pour laquelle il n'arrive pas à 11.6 lignes mais à 46 lignes.

Le parfois impossibles était pour l'exemple pris de le tableau en fichier joint sur lequel ta remarque portait

bonjour,

dans ton exemple avec 4 lettres pour former des mots de 3 lettres

tu nous indiques ABC (les couples sont AB, AC,BC)

puis tu nous indiques BAD( les couples sont AB,AD et BD)

le couple AB est utilisé dans les 2, je croyais qu'un couple ne pouvait être utilisé qu'une seule fois.

peux-tu donner plus d'explication ?

Le couple AB ne doit être utilisé(comme les autres couples aussi) qu'une seule fois dans la ligne.

Mais dans l'exemple on le retrouve dans une autre ligne forcement.

ABC (les couples sont AB, AC,BC)

comme il manque les couples AD et BD et DC si on les met ensemble le couple AB ressort.

Mais les toutes conditions sont réalisées :

on part du nombre de lettre choisi : savoir 4

on respecte le nombre maximum de ligne : savoir 2

et tout les couples sont utilisé.

Si on arrive à ça avec les autres on est bon

Dit moi , h2so4, sur quelles autres explications dois-je revenir ?

RECTIFICATIF dans mon dernier post

Il faut lire :

comme il manque les couples AB et AD et BD au lieu de

comme il manque les couples AD et BD et DC

re-bonjour,

je suppose qu'il faudra minimiser le nombre de fois(>1) que des couples sont utilisés. pour faire cette optimisation on va devoir combiner les 325 couples, ce qui nous amène à des temps de traitements démentiels. peut-être avais-tu une autre idée ?

re-bonjour S2so4,

Tout d’abord je te remercie de t’être penché sur ma problématique.

Je pensais :

Dés qu'un couple est utilisé il faudrait le supprimer de la liste de départ pour favoriser le traitement.(donc dés la première ligne il y en a 28 de moins)

Existe t il une "formule" mathématique qui fait l'inverse de "combin" cad dans un cas normal (pas comme le mien donc )

On utilise "combin" pour des éléments "abcd...ef...z" et on obtient une liste de "x nombres" comment peut on partir de la liste pour arriver au éléments de départ ? et ce quelque soient les variables.

Déjà si on pouvait faire cela (si c'est possible bien sur) on pourrait à partir de là changer les paramètres d'arrivées.

Bonjour,

Décidément, j'ai de la peine à comprendre

donc dés la première ligne il y en a 28 de moins

Comment tu arrives avec ces 28 paires :

AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BC BD BE

à avoir une combinaison de 8 lettres comme par exemple ci-dessous :

ABCDEFGH

???

bonjour theze,

j'ai compris que ces 28 paires sont les paires qu'il est possible de former avec ces 8 lettres

ABCDEFGH -> AB AC AD AE AF AG AH BC BD BE BF BG BH CD CE CF CG CH DE DF DG DH EF EG EH FG FH GH

avec 26 lettres, il n'est possible de former que 3 mots de 8 lettres et 1 mot de 5 lettres en utilisant des paires qu'une seule fois

ABCDEFGH IJKLMNOP QRSTUVWX et YZAIQ (hors permutations)

Rechercher des sujets similaires à "arrangement permutation combinaison lettres alphabet"