Recherche automatique dans un tableau

Bonjour à tous,

J'ai un tableau dans lequel j'ai une colonne destination, une colonne durée et une colonne résultat. Dans la colonne résultat je voudrais faire en sorte que Excel me trouve tout seul 7 destinations dont la somme des durées est égale à 168 ou s'en rapproche le plus possible (minimum 160).

Je n'ai pas la moindre idée de comment on peut faire ça mais comme sur ce forum vous me trouvez toujours une solution je m'en remets à votre talent !

13duree.xlsx (8.43 Ko)

Ci-joint le fichier Excel en question

Merci pour tout.

Florentin

Bonjour ;

Voici une approche avec une macro (il faut mettre le nom de votre feuille et choisir un min et un max dans le code), elle est un peu longue il faut lui laisser 2 3 mins.

Voici le code :

' Auteur : https://www.linkedin.com/in/spilerstheo/

Sub TrouverDestinations()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("NomDeVotreFeuille") ' Modifiez avec le nom de votre feuille

    Dim plageDonnees As Range
    Set plageDonnees = ws.Range("A2:B31") ' Modifiez avec la plage de vos données

    Const HeureCibleMin As Integer = 160
    Const HeureCibleMax As Integer = 168

    Dim meilleureDiff As Integer
    meilleureDiff = HeureCibleMax

    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer, o As Integer
    Dim somme As Integer, diff As Integer
    Dim resultat(1 To 7) As String, r As Integer
    r = 2 ' Commencer à écrire à partir de la ligne 2 dans la colonne D

    For i = 1 To plageDonnees.Rows.Count
        For j = i + 1 To plageDonnees.Rows.Count
            For k = j + 1 To plageDonnees.Rows.Count
                For l = k + 1 To plageDonnees.Rows.Count
                    For m = l + 1 To plageDonnees.Rows.Count
                        For n = m + 1 To plageDonnees.Rows.Count
                            For o = n + 1 To plageDonnees.Rows.Count
                                somme = plageDonnees.Cells(i, 2).Value + plageDonnees.Cells(j, 2).Value + _
                                        plageDonnees.Cells(k, 2).Value + plageDonnees.Cells(l, 2).Value + _
                                        plageDonnees.Cells(m, 2).Value + plageDonnees.Cells(n, 2).Value + _
                                        plageDonnees.Cells(o, 2).Value

                                If somme >= HeureCibleMin And somme <= HeureCibleMax Then
                                    diff = HeureCibleMax - somme
                                    If diff < meilleureDiff Then
                                        meilleureDiff = diff
                                        resultat(1) = plageDonnees.Cells(i, 1).Value
                                        resultat(2) = plageDonnees.Cells(j, 1).Value
                                        resultat(3) = plageDonnees.Cells(k, 1).Value
                                        resultat(4) = plageDonnees.Cells(l, 1).Value
                                        resultat(5) = plageDonnees.Cells(m, 1).Value
                                        resultat(6) = plageDonnees.Cells(n, 1).Value
                                        resultat(7) = plageDonnees.Cells(o, 1).Value
                                    End If
                                End If
                            Next o
                        Next n
                    Next m
                Next l
            Next k
        Next j
    Next i

    If meilleureDiff < HeureCibleMax Then
        For Each dest In resultat
            ws.Cells(r, 4).Value = dest ' Écrire chaque destination dans la colonne D
            r = r + 1
        Next dest
        MsgBox "Destinations trouvées: " & Join(resultat, ", ") & ". Elles ont été ajoutées à la colonne D."
    Else
        MsgBox "Aucune combinaison valide trouvée."
    End If
End Sub

Et le fichier :

8duree.xlsm (24.83 Ko)

Une approche par le solveur serait peut être envisageable et plus précise

Cordialement,
Parrish

bonjour Parrish, FloLeNulEnExcel,

avec solveur, mais j'ai raté une solution avec l'algorithme "Simplex", bizarre. (durée pour trouver une solution = aussi 40 sec)

6duree.xlsx (23.39 Ko)
Rechercher des sujets similaires à "recherche automatique tableau"