Voilà, j'ai une liste de nombre variable, ex. : (50, 50, 50, 40, 30, 15, 15) et j'ai une valeur variable de "120" par exemple.
Il faudrait prendre dans la liste le nombre juste en dessous de "120" et le soustraire à "120" et supprimer le nombre qu'on vient d'utiliser de la liste pour ne pas l'utiliser deux fois de suite.
Ça ferai : 120 -50 = 70 et ensuite supprimer le premier 50 de la liste
et faire pareil avec le 70 et ainsi de suite mais je ne veux pas aller en dessous de "0".
Exemple avec 120 :
120 -50 = 70
70 - 50 = 20
20 - 15 = 5
Il reste "5" comme résultat car il n'y a pas de nombre dans la liste plus petit que lui.
Voilà, j’espère que j'ai été clair dans mes explications.
Option Explicit
Sub essai()
Dim i As Long
Range("E4") = Range("C4")
For i = 4 To 65536
If Cells(i, 1) = "" Then Exit For
If Cells(i, 1) < Range("E4") Then
Range("E4") = Range("E4") - Cells(i, 1)
Cells(i, 1).ClearContents
End If
Next i
End Sub
Un essai avec une fonction personnalisée:Reste(x, xPlage As Range)
où x est le nom dont on soustrait des élements de xPlage.
Le code de la fonction:
VB:
Function Reste(x, xPlage As Range)
Dim ech As Boolean, aux, i&
'xplage en tableau à une dimension
ReDim tablo(1 To xPlage.Count)
For Each aux In xPlage
i = i + 1: tablo(i) = aux
Next aux
'tri du tablo
Do
ech = False
For i = 1 To UBound(tablo) - 1
If tablo(i) < tablo(i + 1) Then
ech = True: aux = tablo(i): tablo(i) = tablo(i + 1): tablo(i + 1) = aux
End If
Next i
Loop Until Not ech
'recherche du reste
Reste = x
For i = 1 To UBound(tablo)
If Reste - tablo(i) >= 0 Then Reste = Reste - tablo(i)
Next i
End Function