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

Signaler
Messages postés
2
Date d'inscription
jeudi 28 octobre 2010
Statut
Membre
Dernière intervention
1 novembre 2010
-
Messages postés
2
Date d'inscription
jeudi 28 octobre 2010
Statut
Membre
Dernière intervention
1 novembre 2010
-
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

Messages postés
85
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
20 mai 2011

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Mod ne doit pas pouvoir fonctionner avec des chiffres à virgules, méfiance donc
Messages postés
2
Date d'inscription
jeudi 28 octobre 2010
Statut
Membre
Dernière intervention
1 novembre 2010

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.