IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modulo et division par zéro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut Modulo et division par zéro
    Bien le bonjour amis du forum

    Je dois actuellement effectuer une opération très simple consistant en une différence et un modulo. La différence, pas de problème, vous vous en doutez. Le modulo, par contre, bah ca pique un peu

    Je m'explique. Je voudrais faire quelques "Modulo 0.25", ce qui me fait une division par zéro...Bizarre ! (après maintes recherches sur mon ami Google, c'est normal). Comment puis-je faire pour m'en sortir de mes opérations? Une solution à ce problème?

    Mon code, dans les grandes lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    valeur1 = valeur2 - valeur2 Mod 0.25
    C'est simple hein?!

    Merci d'avance pour votre aide

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    le modulo est le reste d'une division

    5 mod 2 donne 1
    5 - (int(5/2)*2) donne 1

    si ca peut t'aider

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Les opérations MOD et \ (division entière) fonctionnent avec des entiers (types octet, entier, entier long). Sinon les opérateurs sont arrondis. Et l'arrondi de 0.25 c'est zéro.

    La solution dépend du contexte de ton pb, mais il faudra transformer les variables en entiers.

    PGZ

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Merci à vous deux.

    Je ne sais pas trop comment faire pour transformer mes variables en entier, sachant qu'il faut que je garde ma valeur de 0.25.

    Le modulo d'un nombre par un autre commençant pas 0,... a quand même été prévue dans VBA non? :p

  5. #5
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    le probleme est qu'une division par un nombre inferieur à zero est en realité une multiplication
    100 / 0,25 = 100 * 4 = 400
    un modulo (100 , 400) = 100

    il est plus souhaitable que tu nous dises ce que tu cherches à faire dans l'ensemble parceque on n'arrive pas à voir où tu veux en venir

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Citation Envoyé par Carabi Voir le message
    Le modulo d'un nombre par un autre commençant pas 0,... a quand même été prévue dans VBA non? :p
    Je crois que non.

    Quels sont les données de ton pb? C'est toujours 0,25? et Valeur2 est de quel type? Valeur2 peut avoir des décimales, une virgule flottante? Il faut préciser le contexte du pb pour trouver une solution...


    PGZ

  7. #7
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Dans mon premier jeu de test, par exemple, le code suivant est exécuté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuilleDevis.Cells(25, 5) = feuilleChiffrage.Cells(10, 4) - feuilleChiffrage.Cells(10, 4) Mod 0.25
    avec feuilleChiffrage.Cells(10, 4) ayant pour valeur 32,64.

    Mon problème réel : prendre le nombre étant le multiple de 0.25 le plus proche de ma valeur2, et y étant aussi inférieur ou égal. Vous voyez le souci?

  8. #8
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    tu n'as pas lu ma reponse ?
    =int(32.64/0.25)*0.25 te donnera 32.50

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Carabi,

    Apparemment tu ne comprends pas ce que je te demande. Alors je fais des hypothèses, tu adapteras à ton pb.
    Soit à calculer A Mod B avec
    B = 0.25
    A = Nombre avec au plus 2 décimales

    A Mod B = (100 * A Mod 25)/100

    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuilleDevis.Cells(25, 5) = feuilleChiffrage.Cells(10, 4) - (100 * feuilleChiffrage.Cells(10, 4) Mod 25)/100
    PGZ

  10. #10
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Bon, après réflexion, vos deux propositions sont sensiblement similaires. Je me suis servi des deux, et ça marche parfaitement. Alors un grand merci à vous et désolé pour mon manque de clarté, j'ai fait de mon mieux pourtant

    Problème résolu !

    ++ et merci encore

  11. #11
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Carabi,

    Par ailleurs
    A - A Mod B = Fix(A/B)*B
    Expression que tu peux utiliser cette fois avec tout type de variable et qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuilleDevis.Cells(25, 5) = Fix(feuilleChiffrage.Cells(10, 4) / 0.25)* 0.25
    Essaie, pour voir.

    PGZ

  12. #12
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    J'ai l'honneur de te dire que ça marche parfaitement aussi. Concernant cette méthode, elle ne diffère que d'un mot de celle de wilfried_42, à savoir que lui préfère un "Int" à ton "Fix"

    Bravo à vous deux pour votre expertise en tout cas, et bravo à toi PGZ pour ton nouveau grade !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Division par zéro
    Par soltani1 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/05/2006, 09h42
  2. [Tableaux] Pb de division par zéro...
    Par blueice dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2005, 15h52
  3. [CR][VS.NET]Division par zéro
    Par San Soussy dans le forum SDK
    Réponses: 2
    Dernier message: 31/08/2005, 14h40
  4. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo