Microsoft 365 combinaisons Macros

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 !

TTI

XLDnaute Nouveau
Bonjour,
Je souhaite réaliser un macros, qu' a partir d'une liste des données en colonne A Feuille 1 par exemple, de créer une combinaisons des données comme suite :
feuille 1 : Colonne A, j'ai une liste non définie, par exemple :
PP
15
16
17

Je souhaite avoir d'une autre feuille, les résultats


PP
15​
16​
17​
PP15
15​
16​
17​
P16
15​
16​
17​
P17
15​
16​
17​
PP1516
15​
16​
17​
PP1517
15​
16​
17​
PP151617
15​
16​
17​
 

Pièces jointes

Bonjour TTI,
Un essai en PJ.
Votre ex de résultat me semble faux, il manque P1617.
Dans la PJ l'ordre de rangement est le binaire 001,010,011,100 ....
L'ordre n'est pas le même, par contre toutes les combinaisons y sont. 🙂
Le résultat est en feuil2.

VB:
Sub Dispatche()
Application.ScreenUpdating = False
DL = Range("A65500").End(xlUp).Row
Nbits = DL - 1
IndexW = 1
With Sheets("Feuil2")
    .Cells.ClearContents
    For N = 0 To 2 ^ (DL - 1) - 1 ' DL-1 : Nombre d'éléments. 2 ^ (DL - 1) - 1 : Nombre de combinaisons
        Mot = Right("0000" & Application.Dec2Bin(N), DL - 1) ' met la combinaison en binaire formaté au nombre de bit d'entrée
        Titre = Cells(1, "A")
        Ligne = IndexW
        For B = 1 To Nbits  ' Pour chaque bits
            If Val(Mid(Mot, B, 1)) = 0 Then                 ' si 0 on met à droite
                .Cells(IndexW + B, "C") = Cells(B + 1, "A")
            Else
                .Cells(IndexW + B, "B") = Cells(B + 1, "A") ' si 1 on met à gauche
                Titre = Titre & Cells(B + 1, "A")           ' on ajoute l'élément au titre
            End If
        Next B
        .Cells(Ligne, "A") = Titre                          ' on range le titre
        IndexW = IndexW + Nbits + 1
    Next N
    .Activate
End With
End Sub
 

Pièces jointes

Pour info, j'ai pu modifié le code en ajoutons le traitement sur le titre et de modifier la liste
de la Colonne A, :
PP
PP15
PP16
PP17
:

Sub Dispatche()
Application.ScreenUpdating = False
DL = Range("A65500").End(xlUp).Row
Nbits = DL - 1
IndexW = 1
With Sheets("Feuil2")
.Cells.ClearContents
For N = 0 To 2 ^ (DL - 1) - 1 ' DL-1 : Nombre d'éléments. 2 ^ (DL - 1) - 1 : Nombre de combinaisons
Mot = Right("0000" & Application.Dec2Bin(N), DL - 1) ' met la combinaison en binaire formaté au nombre de bit d'entrée
Titre = Cells(1, "A")
Ligne = IndexW
For B = 1 To Nbits ' Pour chaque bits
If Val(Mid(Mot, B, 1)) = 0 Then ' si 0 on met à droite
.Cells(IndexW + B, "C") = Right$(Cells(B + 1, "A"), Len(Cells(B + 1, "A")) - 2)
Else
.Cells(IndexW + B, "B") = Right$(Cells(B + 1, "A"), Len(Cells(B + 1, "A")) - 2) ' si 1 on met à gauche
Titre = Titre & Cells(B + 1, "A") ' on ajoute l'élément au titre
'Right$(MaChaineA, TA - 2)
End If
Next B
If Len(Titre) > 4 Then
.Cells(Ligne, "A") = Right$(Titre, Len(Titre) - 2) ' on range le titre
Else
.Cells(Ligne, "A") = Titre
End If
IndexW = IndexW + Nbits + 1
'Call Convert
Next N
.Activate
End With
End Sub
 
Dernière édition:
Re,
N'étant pas spécifié, j'avais limité à 5 le nombre de variables. En PJ je l'ai augmenté à 20.
VB:
Mot = Right("0000" & Application.Dec2Bin(N), DL - 1)
remplacé par
Mot = Right("00000000000000000000" & Application.Dec2Bin(N), DL - 1)
 

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

Retour