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 :

Programme VBA avec fonction remise bloquée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 2
    Par défaut Programme VBA avec fonction remise bloquée
    Bonjour,

    Je fais dans le cadre de mes études un projet vba de base. J'ai un base de données que je dois traiter.

    J'ai fait un code pour avoir une réduction de prix grâce a des remises et j'ai fait un code qui fonctionne pas totalement.

    voici le code ci dessous :

    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
    35
    36
    37
    38
    Option Explicit
     
    Function remise(statut As String) As Double
     
        Dim r           As Double
     
        If statut = "etudiant" Then
     
            r = 0.7
     
        ElseIf statut = "enfant" Then
            r = 1
     
        Else
     
            r = 0
     
        End If
     
        remise = r
     
    End Function
     
    Sub calcultotal()
     
        Dim i           As Integer, n As Double, maplage As Range, pu As Double
        Sheets("Calcul budget").Select
        Set maplage = Range("B11:E13")
        pu = Range("d8")
        For i = 1 To maplage.Rows.Count
            maplage.Cells(i, 3) = remise(maplage.Cells(i, 1))
            n = InputBox("donnez le nombre " & maplage.Cells(i, 1))
            maplage.Cells(i, 2) = n
            maplage.Cells(i, 4) = pu * n * (1 - maplage.Cells(i, 3))
     
        Next
     
    End Sub


    Pour l'instant, cette fonction et cet algorithme n'arrivent pas a calculer les remises, il arrive juste a rentrer les demandes utilisateurs dans les bonnes cases et il arrive a calculer un prix mais sans la remise et a l'afficher dans la bonne case.


    je vous envoie un screen en pièce jointeNom : Capture d’écran 2021-12-07 à 19.59.26.png
Affichages : 135
Taille : 406,0 Ko de ce que ressemble la feuille Excel liée au code


    Pouvez-vous m'aider à régler ce problème svp ?


    Merci d'avance

  2. #2
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Essayez ceci, mais il faut prévoir les cas où l'utilisateur encode une lettre, un espace, un blanc ou autre chose qu'un nombre, sinon votre code ne fonctionnera pas comme voulu:
    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
    35
    36
    37
    38
    Function remise(statut As String) As Double
     
        Dim r           As Double
     
        If UCase(statut) = UCase("etudiant") Then
     
            r = 0.7
     
        ElseIf UCase(statut) = UCase("enfant") Then
            r = 1
     
        Else
     
            r = 0
     
        End If
     
        remise = r
     
    End Function
     
    Sub calcultotal()   'version améliorée !
     
        Dim i As Integer, n As Double, maplage As Range, pu As Double
     
        Sheets("Calcul budget").Select
     
        Set maplage = Range("B11:E13")
        pu = Range("d8")
     
        For i = 1 To maplage.Rows.Count
            maplage.Cells(i, 3) = remise(maplage.Cells(i, 1))
            n = InputBox("Donnez le nombre d'" & maplage.Cells(i, 1) & "s :")
            maplage.Cells(i, 2) = n
            maplage.Cells(i, 4) = pu * n * (1 - maplage.Cells(i, 3))
        Next
     
    End Sub

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 2
    Par défaut
    Merci beaucoup pour ta réponse, je n'avais même pas pensé au codage des erreurs utilisateurs.

    Cependant mon problème est au niveau du screen que j'ai mis au dessus. J'aimerai que mon code colle la remise dans les cases du milieu de mon tableau correctement et me colle le calcul remisé dans le tableau dans la colonne de droite. Pour l'instant cela marche pour enfant et adulte mais pas le étudiant. Je ne sais pas d'ou cela pourrait provenir le seul indice que je pense peut avoir un lien est le fait que ça soit la seule remise avec un nombre décimal.

    Peux tu m'aiguiller sur ce point s'il te plait ?

    (Je remets le screen après que l'algol ai tourné)

    Merci à toi

    Nom : Capture d’écran 2021-12-08 à 18.45.02.png
Affichages : 113
Taille : 403,6 Ko

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    Salut

    Vu que c'est un exercice, je suppose que passer par VBA est une obligation? Parce que j'avoue ne pas comprendre la démarche.
    Excel est un tableau, au pire faire les demande de nombre de personne par catégorie via une inputbox, pourquoi pas, bien que je ne trouve pas ça très ergonomique mais admettons.
    Par contre le reste devrait être géré directement dans le tableau avec des formules basiques.

    Partons sur l'obligation d'utiliser VBA...
    Visiblement le problème vient de l'appel à la function Remis, le mieux pour comprendre d'où vient l'erreur, c'est d'exécuter le code en mode "pas à pas".

    1/Place un point d'arrêt sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maplage.Cells(i, 3) = remise(maplage.Cells(i, 1))

    Clique sur la ligne et utilise la touche F9 (il est aussi possible de cliquer directement dans la gouttière où apparaitra le point rouge)

    2/Utilise la touche F8 pour exécuter un pas. Le pointeur jaune va passer dans la Function Remise. Enchaine les F8 et regarde la valeur des différents élément en les survolant avec la souris.

    3/Si tu ne trouves pas regarde peut-être du coté de 0.7 en le remplaçant par 0,7

    Je te souhaite une bonne soirée
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Probléme de communication TCP/IP avec fonction send bloqué
    Par TheToune dans le forum Développement
    Réponses: 0
    Dernier message: 21/09/2011, 10h05
  2. Appeler programme C++ avec paramétres via PHP
    Par hssine dans le forum C++
    Réponses: 1
    Dernier message: 18/04/2008, 13h06
  3. Comment fermer un programme ouvert avec la fonction Shell
    Par nicolas2603 dans le forum VBA Access
    Réponses: 13
    Dernier message: 08/02/2008, 20h01
  4. Programme qui bloque avec fonction sort
    Par ultimate_manx dans le forum SL & STL
    Réponses: 10
    Dernier message: 29/11/2007, 20h06
  5. Probleme avec fonction bloqué
    Par remixattacks dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/09/2006, 21h56

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