Comparer les cellules puis faire un choix

Fermé
Mala - 31 mars 2014 à 17:25
 Mala - 1 avril 2014 à 16:40
Bonjour,

je poste sur ce forum pour la première fois et j'ose espéré ne pas avoir des problème de forme dans ma rédaction.

je sollicite votre aide sur le VBA

j'ai une cellule A1 qui contient un nombre que je souhaiterais comparer à une suite de nombres dans une colonne.

tant que le nombre A1 est supérieur aux nombres dans la colonne:
- je choisi le plus grand nombre de la colonne,
-je le coupe et le colle dans une autre cellule
-je soustrait A1 de ce nombre

tant que A1 est compris entre le plus petit et le plus grand nombre de la cellule:
-on choisi dans la colonne le nombre supérieur ou égal (le nombre tout de suite supérieur) sinon on choisit le nombre tout de suite inférieur
-on soustrais A1 du nombre choisi

l'opération s'arrête quand A1 est inferieur ou égale à 0 et qu'on ait une liste des nombres utilisés

le tout devrais ce faire en un clic

Merci


A voir également:

2 réponses

conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
Modifié par conrade82 le 1/04/2014 à 15:42
Bonjour,

Que se passe-t-il si A1 reste supérieur à la suite de nombre et que malgré les soustractions, A1 reste supérieur à zéro ?

Je pensais à ceci:


Sub test1()

Dim i As Integer, rCell As Range, a As Integer, lastli As Integer, L As Integer

lastli = Sheets("sheet1").Cells(1, 3).End(xlDown).Row

'Tri croissant des valeurs de la suite de nombre
Range(Cells(1, 3), Cells(lastli, 3)).Sort Key1:=Cells(1, 3), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Tant que A1 est strictement supérieur à 0
Do Until Cells(1, 1) <= 0

'La macro s'arrête si la première cellule de la suite de nombre est vide
If Cells(1, 3) <> "" Then

'détermine le rang de la dernière cellule non vide de la colonne C
lastli = Cells(65356, 3).End(xlUp).Row

'Si A1 est supérieur au plus grand nombre de la colonne C
If Cells(1, 1) > Cells(lastli, 3) Then

'A1 est diminué de la valeur la plus grande de la colonne C
Cells(1, 1) = Cells(1, 1) - Cells(lastli, 3)

'Détermine la dernière cellule non vide de la colonne E
L = Cells(35536, 5).End(xlUp).Row

'Si E1 est vide
If Cells(L, 5) = 0 Then
'On copy la valeur soustraite de A1
Cells(lastli, 3).Copy
'On la colle dans la colonne E
Cells(L, 5).PasteSpecial
'On supprime la cellule copiée
Cells(lastli, 3).ClearContents

'Si E1 n'est pas vide
Else
'On copy la valeur soustraite de A1
Cells(lastli, 3).Copy
'On la colle dans la colonne E en dernière position
Cells(L + 1, 5).PasteSpecial
'On supprime la cellule copié
Cells(lastli, 3).ClearContents
End If
'Si A1 est compris entre le plus petit et le plus grand nombre de la colonne C
Else
'On recherche la cellule dont la valeur est immédiatement supérieure à A1
For Each rCell In Range(Cells(1, 3), Cells(lastli, 3))
'Arrête la boucle si A1 est inférieur ou égal à 0
If Cells(1, 1) <= 0 Then
Exit For
Else
'Si la cellule sélectionnée est immédiatement supérieur à A1
If rCell >= Cells(1, 1) + 0.001 Then
'alors A1 est diminué de la valeur de cette cellule
Cells(1, 1) = Cells(1, 1) - rCell
L = Cells(35536, 5).End(xlUp).Row
'cette cellule est coupée / Collée en colonne E
If Cells(L, 5) = 0 Then
Cells(rCell.Row, 3).Copy
Cells(L, 5).pastspecial
Cells(rCell.Row, 3).Delete Shift:=xlUp
Else
Cells(rCell.Row, 3).Copy
Cells(L + 1, 5).PasteSpecial
Cells(rCell.Row, 3).Delete Shift:=xlUp
End If
End If
End If
Next rCell
End If
Else
Exit Sub
End If
Loop

End Sub

ATTENTION: penser à supprimer les données de la colonne E avant de relancer la macro.

https://www.cjoint.com/?DDbpPndx7FE

Poru ce qui est du clic, il suffira de créer un bouton relié à cette macro.

Cdt,

Conrade 82
0
bonjour Conrade 82,
merci pour l'Intérêt que tu porte a mon problème.

A1 est la masse d'un lot de produits chimique

la suite de nombre, chaque nombre représente la capacité (en masse) que d'un conteneurs.

tant que mon lot de colis a une masse supérieur à toutes les capacités,
on choisit le conteneur qui a la plus grande capacité
on note sa capacité et son ID ailleurs
on soustrait la masse de colis de cette capacité

dès que la masse du lot devient comprise entre la plus petite et la plus grande capacité,
on choisit la capacité la plus proche.

l'objectif est d'avoir une liste de conteneurs dans lesquelles seront mis mes produits.

donc, chaque fois qu'on choisit un conteneur, celui-ci est chargé et A1 diminue jusqu'à devenir inférieur ou égal à 0
0