Nombre multiple de 20 sur excel

riadhtito Messages postés 1 Date d'inscription dimanche 10 avril 2011 Statut Membre Dernière intervention 17 décembre 2011 - 17 déc. 2011 à 10:43
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 18 déc. 2011 à 17:17
Salut
Svp je veux savoir comment saisir une fonction nombre multiple de 20 sur excel
qui me donne 1(constante) pour un nombre égale à 20 personne.

20 réponses

cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 déc. 2011 à 11:51
Aucun rapport avec le C++. Je déplace de C++ vers Le Bar.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
17 déc. 2011 à 12:19
Bonjour,
ce n'est pas non plus le "bar" mais bel et bien VBA
S'intéresser à l'opérateur Mod et à la division entière (\).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
17 déc. 2011 à 12:34
et la fonction ne viendra (ainsi que son mode d'utilisation) que lorsque sujet déplacé là où nécessaire.
Et au passage :
qui me donne 1(constante) pour un nombre égale à 20 personne.

Problème évident de compréhension de ce qu'est une constante.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
17 déc. 2011 à 14:10
Ah ! Voilà (déplacé vers VBA) qui est fait ===>> alors ===>>
1) la fonction :
Private Function mult_20(nb As Double) As Variant
   If nb Mod 20 <> 0 Then est_mult_20 = False: Exit Function
   mult_20 = nb \ 20
End Function

en remarquant que j'ai dû la mettre en type Variant, puisque deux types de retour possibles !
2) son appel :
 Dim toto As Double
  toto = 41
  MsgBox mult_20(toto) ' ===>> retournera une chaîne ""
  toto = 40
  MsgBox mult_20(toto) ' ===>> retournera 2

_________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
17 déc. 2011 à 15:56
Ou bien :
Function M20(V)
    M20 = IIf(V Mod 20, 0, V \ 20)
End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
17 déc. 2011 à 16:02
Bonjour, MarcPL,

l'ennui, avec ta fonction, est qu'elle retournera 0, tant si tu lui envoies 0 que si tu lui envoies 51
Alors que 0 est bien égal à un multiple (0 fois ) de 20, tandis que 51 n'en est pas un


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
17 déc. 2011 à 16:12
Et imagine (tu vas mieux comprendre) que tu essaye ensuite de retrouver la valeur d'origine (résultat retourné par la fonction * 20) ===>>> 0 * 320 ne te fera pas retrrouver tes 51 de l'exemple ci-dessus.
Et tu te pourras non plus utiliser dans une expression conditionnelle la valeur 0 retournée car tu ne sauras distinguer si retournée parce que la valeur d'origine était 0 ou qu'elle n'était pas un multiple de 20


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 12:33
Tout comme ta fonction qui est aussi de type variant, "" = 0 …

Maintenant, il faudrait aussi savoir exactement de quoi à besoin riadhtito,
un exemple clair serait le bienvenu !


Comme la vitesse de la lumière est supérieure à celle du son,
certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 13:37
Tout comme ta fonction qui est aussi de type variant, "" = 0 …

Non, MarcPL, non
Avant d'écrire ma fonction, j'ai lu et relu la demande.
Il n'y est nulle part dit qu'il veut compter le nombre (de multiples) positif et supérieur 0.
Et sur ce point, tant ce que je propose que ce que tu proposes décèle tant les multiples positifs que les multiples négatifs (ce qui est bien, puisque demande non limitée).
Mais voilà : lorsque l'on accepte de considérer un "éventail" tel (négatifs et positifs) on y inclut forcément le cas 0 (impossible de passer du négatif au positif sans passer par ce 0).
C'est donc en tenant compte de ces considérations que j'ai inclus le cas 0 (retournant 0), parfaitement distinguée du cas d('un non multiple, retournant "".
Ce qui permet ensuite de distinguer sans ambiguïté le résultat d'un paramètre d'entrée non multiple et celui d'un 0.
Mais attends un peu ===>> je m'en vais vite fait bien fait te concocter une structure et une fonction encore plus claires et reviens.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 13:55
La voilà, la démo :
Private Type nbmult
  multiple As Boolean
  multiplicateur As Long
End Type
Private Sub CommandButton1_Click()
  Dim toto As Double
  MsgBox "voyons le cas ou le paramètre = 0"
  toto = 0
  If mult_20(toto).multiple = True Then
    MsgBox mult_20(toto).multiplicateur
  Else
    MsgBox mult_20(toto).multiple
  End If
   MsgBox "voyons le cas ou le paramètre = 41"
  toto = 41
  If mult_20(toto).multiple = True Then
    MsgBox mult_20(toto).multiplicateur
  Else
    MsgBox mult_20(toto).multiple
  End If
   MsgBox "voyons le cas ou le paramètre = 60"
  toto = 60
  If mult_20(toto).multiple = True Then
    MsgBox mult_20(toto).multiplicateur
  Else
    MsgBox mult_20(toto).multiple
  End If
End Sub
Private Function mult_20(nb As Double) As nbmult
   If nb Mod 20 <> 0 Then
      mult_20.multiple = False: Exit Function
   Else
     mult_20.multiple = True
     mult_20.multiplicateur = nb \ 20
   End If
End Function







____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 15:35
Ta nouvelle structure est effectivement plus "claire" !

A noter dans sa demande riadhtito attend "une constante pour 20 personnes",
ne parle pas d'un résultat booléen ...

Ma fonction renvoie donc une "constante", différente de zéro si multiple de 20,
zéro si non multiple y compris pour la valeur zéro !
(D'où mon incompréhension avec ton explication sur le cas du zéro, as-tu testé ma fonction ?
0 personne = 0 groupe de 20 personnes, non ?)

Maintenant, attendons de savoir de quoi il a réellement besoin,
je me demande même si ce n'est pas juste une fonction dans le tableur et non en VBA,
ou encore un simple arrondi au multiple supérieur ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 15:46
Aïe, MarcPL, aïe ...
Relis plus haut ma remarque à propos, justement de ce qu'est une constante
et 0 est bien un multiplicateur de 20 pour la valeur 0.
Le problème avec ta fonction est qu'on ne sait plus si le 0 retourné est un multiplicateur ou non, puisque tant le nombre 0 que tout nombre non multiple de 20 retournera 0 !

Maintenant : je suis convaincu de ce que le demandeur s'est exprimé incomplètement.
Mais si tel est le cas (et donc sa faute) et s'il ne veut que les multiplicateurs de 20, positifs et > 0 === >> c'est encore autre chose , hein


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 16:11
Je suppose vu qu'il parle de personnes,
pas d'une valeur mathématique intrinsèque ni même d'un résultat booléen ...

D'où mon assertion : 0 personne = 0 groupe de 20 personnes

Ma fonction répond donc bien à ce cas.

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 16:21
Rho ...
Tu ne comprends pas ?
essaye donc ta fonction ainsi :

MsgBox M20(0) & vbCrLf & M20(18) & vbCrLf & M20(65)

T'as 0 retourné dans tous ces cas-là, sans pouvoir déterminer si parce que 0 personnes ou si le nombre de personnes n'est pas un multiple de 20.
Mais moi, j'arrête, là , hein ...



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 16:30
J'ai évidemment bien compris ton point de vu mathématiques,
mais la demande (certes imprécise) réfère à un résultat "constante", non ?

Je répond donc à la demande telle qu'elle est exprimée, pas à celle que l'on peut imaginer.

Pourquoi compliquer ou extrapoler ? C'est au demandeur d'être clair quant à ses besoins ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 16:36
Ah la la !
Ouvre ton aide en ligne sur le mot constante !



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 17:04
Par résultat "constante" (n'as-tu point vu les guillemets ?‼ ),
tu aurais pu comprendre valeur numérique attendue comme résultat de la fonction demandée ...
(Vu qu'en VBA, une fonction ne peut renvoyer un résultat de type constante !)

Certains aiment "pisser" du code, moi je préfère une efficace concision (surtout en non compilé).

Bon, moi aussi j'arrête là, en attendant d'éventuelles précisions du demandeur ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 17:11
C'est toi qui, je le crains, extrapoles, là !
Moi, je LIS ce qu'il ECRIT et réponds en fonction de cela : ce qu'il a ECRIT !
Mais bon ...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
18 déc. 2011 à 17:16
Tout comme moi !!!

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
18 déc. 2011 à 17:17
A riadhtito
Que souhaites-tu exactement que ta fonction dans les cas suivants :
1) - le paramètre qui lui est passé = 0
2) - le paramètre qui lui est passé = 40
3) - le paramètre qui lui est passé = 27



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0