XL 2010 Additionner des nombres jusqu'à atteindre une certaine valeur

PhilippeCam

XLDnaute Nouveau
Bonjour à tous,

J'ai effectué des recherches sur le Forum, mais n'ai pas trouvé de réponse à mon problème.
Je cherche un moyen automatisé de trier une liste de valeur de manière à obtenir une somme approchant une valeur cible, et répéter l'opération jusqu'à la fin de la liste de valeurs.
Je joins un fichier pour illustrer ma demande, je n'arrive en effet pas à bien expliciter ma demande.

Mercis d'avance pour votre aide
 

Pièces jointes

  • Exemple.xlsx
    8 KB · Affichages: 29
Solution
Voici la macro que vous attendez :
VB:
Sub Calcul()
Dim Lbarre, P As Range, nlig&, lig&, nbarre&, c As Range, i&
Lbarre = 6000
Set P = [A1].CurrentRegion
nlig = P.Rows.Count
Application.ScreenUpdating = False
P.Offset(1, 1).ClearContents
P.Offset(1, 1).Interior.ColorIndex = xlNone
lig = 2
1 If P(lig, 1) > Lbarre Then P(lig, 1).Select: MsgBox "Découpe erronée !", 48: Exit Sub
nbarre = nbarre + 1
P(lig, 2) = nbarre
P(lig, 3) = Lbarre '1ère barre
Set c = P(lig, 4)
c = Lbarre - P(lig, 1)
For i = lig + 1 To nlig
    If P(i, 1) < c And P(i, 2) = "" Then
        P(i, 2) = nbarre
        P(i, 4) = c - P(i, 1)
        Set c = P(i, 4)
    End If
Next i
c.Interior.ColorIndex = 6 'jaune
For i = lig + 1 To nlig
    If P(i, 2) = "" Then
        lig = i...

Gégé-45550

XLDnaute Accro
Bonjour à tous,

J'ai effectué des recherches sur le Forum, mais n'ai pas trouvé de réponse à mon problème.
Je cherche un moyen automatisé de trier une liste de valeur de manière à obtenir une somme approchant une valeur cible, et répéter l'opération jusqu'à la fin de la liste de valeurs.
Je joins un fichier pour illustrer ma demande, je n'arrive en effet pas à bien expliciter ma demande.

Mercis d'avance pour votre aide
Bonjour,
La fonction Excel SOMME_SI_COULEUR effectue la somme des cellules dont le fond est de la couleur indiquée (vous pouvez connaître le numéro d'une couleur grâce à la fonction NO_COULEUR).

Les valeurs non numériques sont ignorées, à l'exception de la valeur VRAI qui est égale à 1.

Cordialement,
 

fanch55

XLDnaute Barbatruc
Bonjour,
La fonction Excel SOMME_SI_COULEUR effectue la somme des cellules dont le fond est de la couleur indiquée (vous pouvez connaître le numéro d'une couleur grâce à la fonction NO_COULEUR).

Les valeurs non numériques sont ignorées, à l'exception de la valeur VRAI qui est égale à 1.

Cordialement,
Salut @Gégé-45550 ,
La fonction SOMME_SI_COULEUR fait partie d'un pack de compléments XLP et n'existe pas sur Excel Natif .
 

GALOUGALOU

XLDnaute Accro
bonjour le fil bonjour philippecam
1er - en vba créer une fonction pour identifier le code couleur
VB:
Function CodeCouleur(CelluleCouleur As Range) As Long
'Retourne le code couleur de la CelluleCouleur
Application.Volatile
CodeCouleur = CelluleCouleur.Interior.ColorIndex
End Function
2eme - par formule identifier le code couleur en colonne M (dans l'exemple)
Code:
=CodeCouleur(A1)
3eme - par formule sommer les couleurs identiques
Code:
=SOMME.SI.ENS($A$1:$A$12;$M$1:$M$12;6)
ou
=SOMME.SI($M$1:$M$12;6;$A$1:$A$12)
ou
=SOMMEPROD(($M$1:$M$12=6)*($A$1:$A$12))

cdt
galougalou
 

Pièces jointes

  • Exemple.xlsm
    14.6 KB · Affichages: 2

PhilippeCam

XLDnaute Nouveau
Bonjour à tous et merci pour vos réponses rapides.

J'avoue n'avoir pas été assez clair dans ma demande...

J'avais mis de la couleur pour illustrer ma demande. C'était pour représenter le résultat de ce que je cherche à obtenir...
Je souhaite qu'à partir de la liste de gauche (colonne A) sans couleur donc, une fonction ou une macro génère la colonne B (les données de la colonne B peuvent être à la suite les une des autres, il n'y a pas obligation de sauter des lignes).
C'est pour calculer le nombre de barres de 6m de matière qu'il me faut approvisionner en additionnant différentes longueurs de coupes (colonne A) et ainsi optimiser le nombre de barres et les découpes dans chaque barre. Le plus étant que la macro ou la fonction pointe dans chaque barre les longueurs de découpe qui y rentrent, par exemple avec un code couleur pour les cellules de chaque barre.
Un genre de somme jusqu'à atteindre 6m tant que l'addition de la longueur suivante entre dans les 6m. Lorsque j'arrive à 6m (ou 6m moins la plus petite découpe), je note les éléments qui ont constitué les 6m, et je recommence une addition sans ces éléments de la même manière, et ainsi de suite jusqu'à arriver à la fin des éléments de la colonne A

N'hésitez pas à me dire si je manque encore de clarté dans l'énoncé de ma demande.

Merci
 

job75

XLDnaute Barbatruc
Bonjour le forum,

Voyez le fichier joint, le tableau est créé manuellement d'une manière assez simple.

On pourrait bien sûr écrire une macro qui serait assez compliquée.

Combien de découpes peut-on avoir au maximum ?

A+
 

Pièces jointes

  • Exemple.xlsx
    10.6 KB · Affichages: 5

PhilippeCam

XLDnaute Nouveau
Bonjour le forum,

Voyez le fichier joint, le tableau est créé manuellement d'une manière assez simple.

On pourrait bien sûr écrire une macro qui serait assez compliquée.

Combien de découpes peut-on avoir au maximum ?

A+
Merci Job75 pour ta contribution.

Ce que je cherche est un moyen d'automatiser le processus. il m'arrive d'avoir jusqu'à 200 découpes au total. La méthode que tu propose est manuelle, et risque s'avérer fastidieuse , un peu comme ce que j'avais fait dans mon exemple.

Merci encore d'avoir pris de ton temps.
 

Gégé-45550

XLDnaute Accro
Bonjour le forum,

Voyez le fichier joint, le tableau est créé manuellement d'une manière assez simple.

On pourrait bien sûr écrire une macro qui serait assez compliquée.

Combien de découpes peut-on avoir au maximum ?

A+
Bonjour job75, le forum
Si j'ai bien compris la question, le but est d'automatiser le calcul.
Avec 12 valeurs dont seulement 3 différentes, le calcul manuel est effectivement assez simple.
Mais comment automatiser avec par exemples 300 valeurs de 20 types différents (et même "à la main", bonjour !).
[EDIT] Oups, croisement avec la réponse de PhilippeCam
 

Gégé-45550

XLDnaute Accro
Merci Job75 pour ta contribution.

Ce que je cherche est un moyen d'automatiser le processus. il m'arrive d'avoir jusqu'à 200 découpes au total. La méthode que tu propose est manuelle, et risque s'avérer fastidieuse , un peu comme ce que j'avais fait dans mon exemple.

Merci encore d'avoir pris de ton temps.
re-bonjour,
Peut-être voir avec des spécialistes, s'il y en a, du solveur dans Excel, moi je passe mon tour.
 

job75

XLDnaute Barbatruc
Voici la macro que vous attendez :
VB:
Sub Calcul()
Dim Lbarre, P As Range, nlig&, lig&, nbarre&, c As Range, i&
Lbarre = 6000
Set P = [A1].CurrentRegion
nlig = P.Rows.Count
Application.ScreenUpdating = False
P.Offset(1, 1).ClearContents
P.Offset(1, 1).Interior.ColorIndex = xlNone
lig = 2
1 If P(lig, 1) > Lbarre Then P(lig, 1).Select: MsgBox "Découpe erronée !", 48: Exit Sub
nbarre = nbarre + 1
P(lig, 2) = nbarre
P(lig, 3) = Lbarre '1ère barre
Set c = P(lig, 4)
c = Lbarre - P(lig, 1)
For i = lig + 1 To nlig
    If P(i, 1) < c And P(i, 2) = "" Then
        P(i, 2) = nbarre
        P(i, 4) = c - P(i, 1)
        Set c = P(i, 4)
    End If
Next i
c.Interior.ColorIndex = 6 'jaune
For i = lig + 1 To nlig
    If P(i, 2) = "" Then
        lig = i
        GoTo 1
    End If
Next i
End Sub
Dans le fichier joint elle est affectée au bouton.
 

Pièces jointes

  • Exemple VBA (1).xlsm
    18.8 KB · Affichages: 4

Gégé-45550

XLDnaute Accro
Voici la macro que vous attendez :
VB:
Sub Calcul()
Dim Lbarre, P As Range, nlig&, lig&, nbarre&, c As Range, i&
Lbarre = 6000
Set P = [A1].CurrentRegion
nlig = P.Rows.Count
Application.ScreenUpdating = False
P.Offset(1, 1).ClearContents
P.Offset(1, 1).Interior.ColorIndex = xlNone
lig = 2
1 If P(lig, 1) > Lbarre Then P(lig, 1).Select: MsgBox "Découpe erronée !", 48: Exit Sub
nbarre = nbarre + 1
P(lig, 2) = nbarre
P(lig, 3) = Lbarre '1ère barre
Set c = P(lig, 4)
c = Lbarre - P(lig, 1)
For i = lig + 1 To nlig
    If P(i, 1) < c And P(i, 2) = "" Then
        P(i, 2) = nbarre
        P(i, 4) = c - P(i, 1)
        Set c = P(i, 4)
    End If
Next i
c.Interior.ColorIndex = 6 'jaune
For i = lig + 1 To nlig
    If P(i, 2) = "" Then
        lig = i
        GoTo 1
    End If
Next i
End Sub
Dans le fichier joint elle est affectée au bouton.
Bravo !!! :)
Juste un détail, A1 est exclue du calcul
Capture d’écran 2023-02-12 222625.png

Cordialement,
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 248
Membres
103 164
dernier inscrit
axelheili2