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 :

La commande if [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut La commande if
    Bonjour à tous,
    Je suis nouveau dans le VBA, et je cherche à créer un programme pour gérer un stock d'un laboratoire de chimie. Mon problème est suivant : je voudrais que l'utilisateur, après avoir cherché le produit qu'il désire utiliser (ça, ça marche), entre le nombre de produits qu'il désire utiliser. Mon laboratoire est constitué de plusieurs sous laboratoires qui ont chacun un stock et d'un stock général, un genre de magasin où les utilisateurs peuvent trouver des produits qu'ils n'ont pas dans leur stock ou en commander si celui-ci est vide. J'espère avoir été assez clair...
    Voila en fait je demande à l'utilisateur de rentrer le nombre de stocks qu'il désire utiliser grâce à une inputbox. Ensuite, je fais un test pour savoir s'il y a assez du produit voulu dans le stocks du laboratoire, si c'est le cas j'enlève au stock la quantité voulue. Si il n'y a pas assez de stocks, je regarde si il y en a assez dans le stock global du magasin, et j'enlève le stock voulu. Enfin, si il n'y a pas assez de stock dans tout le laboratoire, j'envoie un message d'erreur au gestionnaire pour en commander.
    J'ai essayer de programmer ce petit problème avec un "select case" ou avec un "if", mais aucun des 2 ne marchent.
    En fait pour le select case, tout va bien sauf quand je demande d'utiliser + de 10 produits.
    Et pour le "if", ça ne marche pas du tout. Quand je rentre par exemple 1 comme stock à utiliser (variable stock_utilise) et qu'il y a par exemple 4 dans le stock du laboratoire (variable stock_labo), il m'affiche le message "va commander des produits".
    Est-ce que quelqu'un pourrait m'aider à résoudre ce problème? Je vous remercie d'avance.
    Voici le code du programme :
    les variables que j'utilise sont bonnes (je les ai testé).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    If stock_utilise >= 0 And stock_utilise <= stock_labo Then
            nouveau_stock_labo = stock_labo - stock_utilise
            nouveau_stock_dispo = stock_dispo
     
     
    ElseIf stock_utilise >= stock_labo And stock_utilise <= stock_possible Then
     
            nouveau_stock_labo = 0
            nouveau_stock_dispo = stock_dispo + stock_labo - stock_utilise
     
    ElseIf stock_utilise >= stock_possible Then
     
        MsgBox ("va commander des produits")
     
     End If

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Ta "construction" de If semble tout à fait correct mais as tu bien formaté tes variables?
    Par defaut, les inputbox revoient du string, tu vas donc avoir du mal a faire des oprérations avec ça...

    Ajoute le dimensionnement au début de ta macro et réessaies:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim stock_utilise As Long, stock_labo As Long, stock_possible As Long
    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Par défaut
    Bonjour
    j'ai refait ta partie de macro en essayant de la simplifier pour ne garder que l'essentiel pour la rendre claire et efficace... Je pense que ça fonctionne.

    1° besoin = 0, pas de macro, ok? , donc seulement : stock_utilise > 0
    2° ne pas lier le besoin >0 et le reste
    3° stock_possible = stock du magasin général, d'accord?
    4° je ne sais pas à quoi correspond stock_dispo?
    5° pourquoi rajouter ces nouveau_..., pourquoi pas stock = stock - besoin?
    c'est ce que j'ai mis, ici, tu rectifieras ce qui ne te convient pas, mais je pense que cela te permettra de t'y retrouver plus facilement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub CTROLE_STOCK_NEW()
    'au 13/12/2009
    Dim stock_utilise, stock_labo, stock_dispo, stock_possible As Integer
    Dim  nouveau_stock_labo, nouveau_stock_dispo As Integer
     
    stock_utilise = 9
    stock_labo = 6
    stock_possible = 8
     
     
    If stock_utilise > 0 Then
    'si labo suffisant:
    If stock_utilise <= stock_labo Then
         'nouveau stock_labo:
            stock_labo = stock_labo - stock_utilise        'sinon  stock_labo pas modifié
            nouveau_stock_dispo = stock_dispo             '??
     Else
    'si labo + magasin  suffisants:
     
    If stock_utilise <= (stock_labo + stock_possible) Then
     
            nouveau_stock_dispo = (stock_dispo + stock_labo) - stock_utilise
     
            nouveau_stock_labo = 0
    ' Et si  labo + magasin  pas suffisants:
    Else
        MsgBox ("Veuillez commander des produits")
           End If
     End If
      End If
     
    End Sub
    Qu'en penses-tu?

    PS: Supprime évidemment ensuite les quantités du début mises uniquement pour le test.

    A+

    Pour ton information, je voulais aussi te préciser que ceci était fautif dans ta macro:

    stock_utilise >= stock_labo

    En effet, on vient à cette partie si stock_labo > stock_utilise , donc Ils NE PEUVENT être égaux, CQFD, à moins que je ne me trompe...

    ou alors il ne faut utiliser le 1° If QUE si stock_utilise < stock_labo, et non pas stock_utilise <= stock_labo, c'est l'un OU l'autre.

    Ceci, pour que tu saches d'où venait le pb.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut problème persistant...
    Bonsoir,
    Tout d'abord merci beaucoup pour m'aider pour mon petit problème!
    Merci Fvandermeulen, mais j'avais bien déclaré mes variables comme tu me le demandais, le problème ne vient donc pas de là...
    Merci Klotz, mais en utilisant ton code, j'ai un nouveau stock dispo négatif. Et quand je colle ton code dans mon programme, j'ai toujours le même problème... Quand j'utilise ton code, et que je rentre comme stock_utilise 1 par exemple, et qu'il y a assez de stocks dans le stock du labo, il m'affiche le message "Veuillez commander des produits"... Je comprends pas trop pourquoi ça m'affiche ce message... Je sais pas si ça vient du fait que pour affecter des valeurs aux différentes variables, j'utilise une macro que j'ai enregistré et que j'ai "bidouillé" ensuite.
    Si vous voyez d'où peut venir l'erreur, n'hésitez pas
    bonne soirée
    starvel

  5. #5
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Entretemps j'ai testé ton code en déclarant les variables et en indiquant les valeurs dans le code (pas par Inputbox) et ça fonctionne correctement.

    Peux tu mettre ton code complet, car là je comprends pas...

    A+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Salut,
    J'ai aussi testé mon programme avec des inputbox, mais j'ai pas l'impression qu'il marche... Tout d'abord mon stock_possible affiche des chiffres aberrants. En effet, quand je mets des valeurs de 5 pour stock_dispo et 5 pour stock_labo, le stock_possible (qui est la somme des 2) affichent 55, sachant que j'ai défini tous les stocks comme des double. L'erreur ne viendrait-elle pas de là? Qu'en penses tu?
    je te mets quand même le code que j'utilise pour tester.
    Je sais pas si je mets le code complet du fichier, tu t'y retrouveras peut-être pas, car j'ai pleins de feuilles différentes...
    Encore merci de m'aider pour résoudre ce problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub utilisaton_produit()
    Dim indice_du_produit, stock_possible, tampon, tampon2, stock_utilise, stock_labo, stock_dispo, nouveau_stock_labo, nouveau_stock_dispo As Long
    Dim question As String
    question = "quel est la valeur du stock que vous voulez utiliser?"
    stock_dispo = InputBox("stock_dispo")
    stock_labo = InputBox("stock_labo")
    stock_utilise = InputBox(question, "utilisation produit")
    stock_possible = (stock_labo + stock_dispo)
    If stock_utilise > 0 Then
    'si labo suffisant:
    If stock_utilise <= stock_labo Then
         'nouveau stock_labo:
            nouveau_stock_labo = stock_labo - stock_utilise        'sinon  stock_labo pas modifié
            nouveau_stock_dispo = stock_dispo             '??
     Else
    'si labo + magasin  suffisants:
    If stock_utilise <= stock_labo + stock_dispo Then
           nouveau_stock_dispo = stock_labo + stock_dispo - stock_utilise
           nouveau_stock_labo = 0
    ' Et si  labo + magasin  pas suffisants:
    Else
        MsgBox ("Veuillez commander des produits")
           End If
     End If
      End If
    Range("F17").Value = "stock_utilise"
    Range("F18").Value = "nouveau_stock_labo"
    Range("F19").Value = "nouveau_stock_dispo"
    Range("F20").Value = "stock_possible"
    Range("G17").Value = stock_utilise
    Range("G18").Value = nouveau_stock_labo
    Range("G19").Value = nouveau_stock_dispo
    Range("G20").Value = stock_possible
    End Sub

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    essaie d'abord ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stock_dispo = Val(InputBox("stock_dispo"))
    stock_labo = Val(InputBox("stock_labo"))
    stock_utilise = Val(InputBox(question, "utilisation produit"))

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut C'est résolu!
    C'est bon, mon erreur était bien le fait que j'avais pas mis Val(inputbox).
    Merci beaucoup à tous de m'avoir aidé, et merci mercatog d'avoir trouvé cette erreur si bète!
    Cordialement
    Francis

  9. #9
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut Starvel, Mercatog,

    En fait le problème n'est pas tout a fait résolu.
    Le problème initial vient de la déclaration de tes variables, si ce cas ci est résolu, la prochaine fois que tu déclareras tes variables comme tu l'as fait, tu auras un nouveau soucis!

    Ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim indice_du_produit, stock_possible, tampon, tampon2, stock_utilise, stock_labo, stock_dispo, nouveau_stock_labo, nouveau_stock_dispo As Long
    ne dimmensionne QUE nouveau_stock_dispo

    Il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim indice_du_produit as long, stock_possible as long, tampon as long, tampon2 as long, stock_utilise as long, stock_labo as long, stock_dispo as long, nouveau_stock_labo as long, nouveau_stock_dispo As Long
    Tu verras alors qu'il n'est pas nécessaire de passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stock_dispo = Val(InputBox("stock_dispo"))
    A+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Merci pour ce petit coup de pouce , je pense que ça va résoudre pas mal d'autres petits problèmes que je rencontrais pour écrire mon programme.

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

Discussions similaires

  1. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. [Kylix] Commandes linux ss kylix
    Par csnickos dans le forum EDI
    Réponses: 3
    Dernier message: 15/09/2002, 20h24
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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