VBA---Combinaisons sous condition.

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

J

JJ1

Guest
Bonsoir à tous,

Mon fichier Excel contient des trios en colonne A:C.
Je souhaiterais un code VBA qui crée des combinaisons de 5 nombres (ici de 1 à 10) en colonne D:H à condition que, pour les 10 trios contenus dans la combinaison, il y ait un trio minimum et 2 trios maximum en A:C.
Je vous remercie et joins un exemple.
Bonne soirée
 

Pièces jointes

Re : VBA---Combinaisons sous condition.

Bonjour

à tester
Code:
Sub trio()

'création du tableau de trio
Dim tab_trio As Variant
tab_trio = Range("A1:C12").Value

'création de la liste des possibilités
Dim trio_possible_col_123 As Variant
ReDim trio_possible_col_123(1 To 5, 1 To 1)
nb = 1
nb_max = 10
For i = 1 To nb_max - 4
    For y = i + 1 To nb_max - 3
        For j = y + 1 To nb_max - 2
            For k = j + 1 To nb_max - 1
                For l = k + 1 To nb_max
                
                    trio_possible_col_123(1, nb) = i
                    trio_possible_col_123(2, nb) = y
                    trio_possible_col_123(3, nb) = j
                    trio_possible_col_123(4, nb) = k
                    trio_possible_col_123(5, nb) = l
                    nb = nb + 1
                    ReDim Preserve trio_possible_col_123(1 To 5, 1 To nb)
                Next l
            Next k
        Next j
    Next y
Next i

'transposition
nb = nb - 1
Dim trio_possible_col_123_vertical As Variant
ReDim trio_possible_col_123_vertical(1 To nb, 1 To 5)
For i = 1 To nb
    For j = 1 To 5
        trio_possible_col_123_vertical(i, j) = trio_possible_col_123(j, i)
    Next
Next

For i = 1 To UBound(trio_possible_col_123_vertical, 1)
    trio_1 = False
    trio_2 = False
    trio_3 = False
    nb_trio = 0
    For j = 1 To UBound(tab_trio, 1)
        'comparaisons
        '1er trio
        If trio_possible_col_123_vertical(i, 1) = tab_trio(j, 1) And _
           trio_possible_col_123_vertical(i, 2) = tab_trio(j, 2) And _
           trio_possible_col_123_vertical(i, 3) = tab_trio(j, 3) Then
            trio_1 = trio_1 Or True
        End If
        '2ieme trio
        If trio_possible_col_123_vertical(i, 2) = tab_trio(j, 1) And _
           trio_possible_col_123_vertical(i, 3) = tab_trio(j, 2) And _
           trio_possible_col_123_vertical(i, 4) = tab_trio(j, 3) Then
            trio_2 = trio_2 Or True
        End If
        '3ieme trio
        If trio_possible_col_123_vertical(i, 3) = tab_trio(j, 1) And _
           trio_possible_col_123_vertical(i, 4) = tab_trio(j, 2) And _
           trio_possible_col_123_vertical(i, 5) = tab_trio(j, 3) Then
            trio_3 = trio_3 Or True
        End If
    Next j
    nb_trio = IIf(trio_1, 1, 0) + IIf(trio_2, 1, 0) + IIf(trio_3, 1, 0)
    If nb_trio = 1 Then
        nb_ligne = nb_ligne + 1
        For nb_col = 1 To 5
            Cells(nb_ligne, nb_col + 3) = trio_possible_col_123_vertical(i, nb_col)
        Next
    End If
Next i

End Sub

Cordialement
 
Dernière édition:
Re : VBA---Combinaisons sous condition.

Bonsoir Odesta, Mj13, Le forum,

Merci pour ce code "mystérieux" que je vais tester demain soir.
Je cherche à éliminer des combinaisons, je vous en dirai plus quand j'aurai terminé.
Encore merci.
Bonne soirée
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
197
Réponses
19
Affichages
756
Réponses
6
Affichages
321
Retour