Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Somme et combinaison

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

Chubby

XLDnaute Impliqué
Bonjour,

Me voilà encore à la peine. Il s'agit cette fois ci de pouvoir faire correspondrer une valeur donnée avec la somme de valeurs à l'intérieur d'une série.
Je crois qu'un ti tableau sera plus explicite que n'importe quel discours. J'essaye de passer par les combinaisons, euhhhh, j'essaye de m'arracher les cheveux surtout.
Si donc quelqu'un avait une petite idée à me soumettre.
Merci à vous tous.
 

Pièces jointes

Re : Somme et combinaison

Bonsoir

Ci dessous une macro à tester

Code:
Option Explicit

Sub travdem()
Dim cellule As Range, plage As Range
Dim nomfeuille1 As String
Dim erreur As Boolean
' pour boucler sur la colonne 1
Dim j1 As Long, i As Long, nb As Long, dl1 As Long, j As Long
Dim colec As New Collection
Dim ecart As Single, val1 As Single, valcherche As Single, ecart1 As Single
Dim valt1 As Single, valt2 As Single

nomfeuille1 = "Folha1"
'
Dim reponse As Variant

ecart = 1000000

'expression.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
Do
        reponse = Application.InputBox(Prompt:="Veuillez indiquer la valeur", Type:=1, Default:="10500")
        Select Case reponse
            Case ""
                MsgBox "vous n'avez pas  fait de saisies!" & Chr(13) & "recommencez!", vbCritical, ""
            Case False
                Exit Sub
            Case Else
                Exit Do
        End Select
 Loop
valcherche = reponse

With Sheets(ActiveSheet.Name)
For i = 2 To 8 ' colonne
dl1 = .Cells(Columns(i).Cells.Count, i).End(xlUp).Row
Set plage = .Range(Cells(2, i), Cells(dl1 - 1, i))
For Each cellule In plage
    For j1 = cellule.Row + 1 To dl1
    j = j1 - cellule.Row
    On Error GoTo suite
        colec.Add Item:=cellule.Value + cellule.Offset(j, 0).Value, key:=CStr(cellule.Value + cellule.Offset(j, 0).Value)
     On Error GoTo 0
        If erreur = False Then
           val1 = cellule.Value + cellule.Offset(j, 0).Value
           If val1 > valcherche Then
                ecart1 = val1 - valcherche
            Else
                ecart1 = valcherche - val1
            End If
            If ecart1 < ecart Then
                valt1 = cellule.Value
                valt2 = cellule.Offset(j, 0)
                ecart = ecart1
            End If
        End If
    Next j1

Next cellule
Next i

.Range("a11") = valt1
.Range("a12") = valt2
End With
Exit Sub
suite:
erreur = True
Resume Next
End Sub



JP
 
Re : Somme et combinaison

Bonjour JP14, bonjour le forum,
D'abord merci de t'être penché sur mon problème. J'ai farfouillé dans les différentes files en vain. Alors ton retour me soulage. En revanche, je suis encore à l'an -2 de la plus basique des connaissances en ce qui concerne la macro que tu m'a envoyé... je l'ai copié sur une feuille de déclaration et enregistré, (tu vois mon niveau!) ... et rien ne se passe même après activation.
Comment devrais-je procédé pour profiter de ton tuyau?
Merci encore de ton aide.
 
Re : Somme et combinaison

Bonjour jp14,

Wouahhhh ça c'est du rapide! Merci à toi pour ce travail.
J'ai donc testé comme tu me le demandais. Plusieurs points ... euh si je peux:
- ça choisi à l'int. d'une seule colonne et c'est exactement ma demande.
- apparemment c'est cependant limité à 2 valeurs et on a alors un résultat incomplet. J'ai esayé avec 20000 par exemple.
- de façon à pouvoir exploiter les résultas ultérieurement serait-il possible de les obtenir sur la feuille même (truchement de couleur ou liste des choix)
- enfin et là c'est du luxe, après avoir cliqué le bouton7, le userform(?) est ce celà affiche toujours la même valeur, pourrait-on faire afficher la dernière saisie?

Bon j'arrête là mes demandes ... et en plus de quels droits mais si ça te dit...je prends
Je te remercie encore de cet outil.
Bonne journée

PS: je regarde un peu dans les entrailles de la bête pour essayer de comprendre.
 
Re : Somme et combinaison

Bonjour chubby,
voici la réponse à la question
- enfin et là c'est du luxe, après avoir cliqué le bouton7, le userform(?) est ce celà affiche toujours la même valeur, pourrait-on faire afficher la dernière saisie?
mais pour le reste, il faudra que JP repasse par ici

à+
Philippe
.
 

Pièces jointes

Re : Somme et combinaison

Bonjour

Pour faire des essais et pour éviter de rentrer la valeur à trouver j'ai mis une valeur par défaut

ci dessous la macro modifiée à copier dans le fichier.
Code:
Option Explicit
Private demande As Long
Sub travdem()
Dim cellule As Range, plage As Range
Dim nomfeuille1 As String
Dim erreur As Boolean
' pour boucler sur la colonne 1
Dim j1 As Long, i As Long, nb As Long, dl1 As Long, j As Long
Dim colec As New Collection
Dim ecart As Single, val1 As Single, valcherche As Single, ecart1 As Single
Dim valt1 As Single, valt2 As Single
Dim cell1 As String, cell2 As String
nomfeuille1 = "Folha1"
'
Dim reponse As Variant

ecart = 1000000

'expression.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
Do
        reponse = Application.InputBox(Prompt:="Veuillez indiquer la valeur", Type:=1, Default:=demande)
        
        Select Case reponse
            Case ""
                MsgBox "vous n'avez pas  fait de saisies!" & Chr(13) & "recommencez!", vbCritical, ""
            Case False
                Exit Sub
            Case Else
                Exit Do
        End Select
 Loop
valcherche = reponse

With Sheets(ActiveSheet.Name)
For i = 2 To 8 ' colonne
dl1 = .Cells(Columns(i).Cells.Count, i).End(xlUp).Row
Set plage = .Range(Cells(2, i), Cells(dl1 - 1, i))
For Each cellule In plage
    For j1 = cellule.Row + 1 To dl1
    j = j1 - cellule.Row
    On Error GoTo suite
        colec.Add Item:=cellule.Value + cellule.Offset(j, 0).Value, key:=CStr(cellule.Value + cellule.Offset(j, 0).Value)
     On Error GoTo 0
        If erreur = False Then
           val1 = cellule.Value + cellule.Offset(j, 0).Value
           If val1 > valcherche Then
                ecart1 = val1 - valcherche
            Else
                ecart1 = valcherche - val1
            End If
            If ecart1 < ecart Then
                valt1 = cellule.Value
                valt2 = cellule.Offset(j, 0)
                cell1 = cellule.Address
                cell2 = cellule.Offset(j, 0).Address
                ecart = ecart1
            End If
        End If
    Next j1

Next cellule
Next i
Call MsgBox("Valeur : " & valt1 & "      " _
            & vbCrLf & "cellule : " & cell1 _
            & vbCrLf & "valeur : " & valt2 _
            & vbCrLf & "cellule : " & cell2 _
            & vbCrLf & "valeur cherché " & valcherche _
            & vbCrLf & "Total trouvé " & valt1 + valt2 _
            & vbCrLf & "écart " & ecart _
            , vbExclamation, "Valeur trouvée")

'.Range("a11") = valt1
'.Range("a12") = valt2
End With
Exit Sub
suite:
erreur = True
Resume Next
End Sub


Bonjour phlaurent55
Je n'avais pas vu le fichier attaché.

JP
 
Dernière édition:
Re : Somme et combinaison

Bonjour phlaurent, re jp14,

Ouh là mais ça se précipite cette histoire.
@Laurent: super ton amélioraion ... du chanel puisqu'on est dans le luxe ;-)
@jp: alors rien essayé encore j'attends la pose pour me pencher dessus ... est ce là modif qu'a fait Laurent ou autre chose? (valeur par défaut me fait penser à ce qu'a proposé Laurent. Je regarde ça en comparant. ...
Merci en tout cas de vos deux lumières...
 
Re : Somme et combinaison

Waouhhhh jp, un autre petit bijou!!! digne de Cartier.
Joli travail...j'ai donc pas pu résisté à l mettre à l'épreuve:
- super mise à jour de la valeur rentrée
- ça donne l'écart et c'est super
- un problème survient cependant si je demande 3000, j'ai alors toujours 2 valeurs qui sont alors des valeurs "ou" alors qu'elles sont "et" dans des valeurs plus élevées. En fait je pense que ça choisi toujours deux valeurs. On rencontre d'ailleurs un problème du même ordre si l'on veut 30000, on obtient un résultat de 20000 (l'équivalent de la somme de 2 valeurs). Je ne sais aps si mes explications sont bien claires.
Quoiqu'il en soit c'est un super truc, manque juste à ciseler la pierre...
Merci à toi jp
 
Re : Somme et combinaison

Bonjour (re)


La procédure recherche l'écart minimum qu'il soit positif ou négatif de la somme de deux nombres.
une valeur donnée avec la somme de valeurs à l'intérieur d'une série.
Concernant 30000 et 20000 on trouve la même réponse, le nombre maximum étant 19400.

JP
 
Re : Somme et combinaison

Bonsoir jp et merci de ton retour,

Désolé si je suis lourd. Justement c'est ce problème qui me gêne. Je t'explique en qq mots la situation. Il s'agit d'organiser des transport de liquide. Les différents camoins sont notés en colonne, leur compartiment de transport en ligne. Le volume à transporter est la valeur demandée. Le "jeu" étant de trouver la meilleure adéquation pour laisser le minimum d'espace vide (de volume vide).
Bon c'est pas très technique tout ça mais ça te décrit mieux mon problème.
Désolé encore de vouloir tirer la couverture vers moi.
Bonne soirée à toi et à tous ceux qui passent par là.
 
- 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

D
Réponses
10
Affichages
2 K
darkfuryo
D
F
Réponses
5
Affichages
952
P
Réponses
1
Affichages
2 K
PierreJeanPierre
P
J
Réponses
2
Affichages
2 K
julien0112
J
M
Réponses
6
Affichages
2 K
mericc
M
P
Réponses
11
Affichages
2 K
patricia.750190
P
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…