[Catégorie modifiée VB6 -> VBA] afficher pack, bouteille, litre

oups94000 Messages postés 2 Date d'inscription jeudi 28 octobre 2010 Statut Membre Dernière intervention 1 novembre 2010 - 28 oct. 2010 à 13:18
oups94000 Messages postés 2 Date d'inscription jeudi 28 octobre 2010 Statut Membre Dernière intervention 1 novembre 2010 - 1 nov. 2010 à 12:47
Bonjour;
Je souhaiterai avoir, à partir du nombre de litres "d'eau par exemple", un résultat en "pack,bouteille,litres"
avec la critère (1 pack = 6 bouteilles de 1.5 litres).
voici ce que j'ai mis:
=SIERREUR(ENT(E28/(6*1,5))&" pack, "&ENT(MOD(E28/(6*1,5)-ENT(E28/(6*1,5));1,5)*(6))&" bout. et "&ARRONDI(MOD(E28/(6*1,5)-ENT(E28/(6*1,5));1,5)*(1,5);2)&" litre ";"")
la cellule E28 contient le nombre de litres.

exemple:
E28=16.2 litres --> 1 pack, 4 bouteilles et 1.2 litres
ça marche mais je trouve ça lourd et je suis sûr qu'on peut faire mieux.
merci de m'aider.

avancer tout seul c'est reculer.

5 réponses

Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
28 oct. 2010 à 14:26
essaye ça
= ENT(E28/9) & " pack(s) " & ENT((E28-9)/1,5) & " bouteille(s) " & MOD ((E28-9)/1,5)*10 & " litre(s) "
je suppose que c sous Excel
et je pense pas qu'on puisse faire moins lourd
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 oct. 2010 à 14:38
Salut

Tu travailles sous Excel, c'est donc du VBA, pas du VB6 --> Catégorie

La solution va consister à écrire du code à la place de ces formules.
Le code a certaines fonctions supplémentaires et est plus facile à manipuler.
Test et analyse ce code, tu y trouveras les idées pour l'adapter à tes besoins
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oRange  As Range
    Dim oCell   As Range
    Dim gQté    As Single
    Dim gPack   As Single
    Dim gBout   As Single
    Dim gReste  As Single
    Set oRange = Intersect(Target, Range("A:A"))
    If Not oRange Is Nothing Then
        ' Une cellule de la colonne A vient d'être modifiée
        gBout = 1.5
        gPack = 6 * gBout
        For Each oCell In oRange
            ' On va calculer les valeurs des cellules :
            ' Rappel : Notre cellule est actuellement en colonne A
            gQté = oCell.Value
            ' B : Pack = nombre entier de 6*1.5 dans la Qté totale
            oCell.Offset(0, 1).Value = Fix(gQté / gPack)
            gReste = gQté Mod gPack
            ' C : Bouteilles = nombre entier de 1.5 dans le reste
            oCell.Offset(0, 2).Value = Fix(gReste / gBout)
            gReste = gReste Mod gBout
            ' D : Litres = le reste
            oCell.Offset(0, 3).Value = gReste
        Next
    End If
End Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 oct. 2010 à 14:41
Erratum : Le calcul du dernier reste tronque la virgule, je ne sait pas pourquoi
Remplace
            gReste = gReste Mod gBout
par
            gReste = gQté _
                   - (oCell.Offset(0, 1).Value * gPack) _
                   - (oCell.Offset(0, 2).Value * gBout)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 oct. 2010 à 14:42
Mod ne doit pas pouvoir fonctionner avec des chiffres à virgules, méfiance donc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oups94000 Messages postés 2 Date d'inscription jeudi 28 octobre 2010 Statut Membre Dernière intervention 1 novembre 2010
1 nov. 2010 à 12:47
Bonjour à tous,

Merci beaucoup à tous, je n'ai pas eu le temps d'essayer ce que vous m'avez proposé les uns et les autres car je suis parti voir mes parents à l'est.
je vous tiendrai au courant.
encore une fois merci.


avancer tout seul c'est reculer.
0
Rejoignez-nous