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

VBA Access Discussion :

[Calculs VBA] Test de condition sous VBA


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut [Calculs VBA] Test de condition sous VBA
    Bonjour
    Dans le cadre de la conception d'un outil de calcul d'indicateurs, j'ai un problème de...calcul justement (ça tombe mal !) mais qui vient peut être d'un pb plus global de conception...
    J'essaye de m'expliquer pour voir si la haute communauté accessienne peut me venir en aide !

    Pour un indicateur donné (I01 ou I02 par ex), je définis des règles de calcul du type :
    si la réponse à la question Q01 est supérieure à 10 alors la note de l'indicateur est de 3, si elle est comprise entre 5 et 10,alors la note est de 2 et inférieure à 5, elle est de 1.
    Ce que j'écris dans une table tabRegle
    id_indicateur = I01 / condition = [Q01] >= 10 / note= 3
    id_indicateur = I01 / condition = [Q01] < 10 et [Q01] >= 5 / note= 2
    id_indicateur = I01 / condition = [Q01] <= 5 / note= 1

    où condition est un texte et [Q01] est ("sensé" !) me renvoyer la réponse donnée à la question Q01.

    Dans certains cas, je peux utiliser la valeur de la réponse à la question dans le
    calcul de la note, comme :
    id_indicateur = I02 / condition = ([Q02] + [Q03]) <= 5 / note= [Q02] + [Q03]

    Ensuite, j'ai une table des réponses tabReponse qui comprend les...réponses aux questions :
    id_question= Q01 / reponse = 7
    id_question= Q02 / reponse = 2
    id_question= Q03 / reponse = 1

    Vou l'aurez compris je pense, je souhaite alors remplir une table des résultats tabResultat avec le calcul pour chaque indicateur en fonction de la réponse donnée...du type :
    id_indicateur = I01 / resultat = 2
    id_indicateur = I02 / resultat = 3

    Voilà les données du problème, j'ai essayé de passer par des recordsets mais je bute sur le remplacement de mon identifiant question [Q01] par la valeur de la réponses donnée (en l'occurence 7) puis dans le test ensuite si la condition est vrai ou pas...

    Avez-vous une idée oh grands maîtres du VBA ? Je joins un mdb à ce post avec les différentes tables utilisées mais sans la fonction VBA qui le ferait bien...
    Merci par avance

    Guen
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    bonjour,
    d'une manière générale, je pense que la fonction de test IIf pourrait te servir.
    tu devrais pouvoir l'utiliser en faisant une fonction qui prend en paramètre le champ testé et la valeur seuil. Le tout avec une table de résultats qui te sert de référentiel.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut
    Oui, effectivement pour tester si la règle est vérifiée ou pas ça marche mais comment je fais avant pour remplacer mon identifiant de question [Q01] ou [Q02]... par la réponse donnée ? Avec un replace dans la formule et un Dlookup qui va chercher la valeur ?
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    oui par exemple Dlookup devrait être bon
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut
    ben oui justement mais je n'y arrive pas
    je suppose qu'il faut que je repère tous les [Q...] de la formule, que je les mette dans un tableau, que je récupère leur valeur par Dlookup (ou un recordset) et que je les remplace...
    mais je n'arrive pas à rédiger ce code...
    merci encore...

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    fonction toute bête, non optimisée, et à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Valeur(input as string) as string
    Valeur=DLookup("[Réponse]", "MTable", "[Moncritere] = '"& input &"'")
    end function
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut
    ..pas de souci pour récupérer la réponse à la question avec dlookup grâce à la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reponse = DLookup("[reponse]", "tabReponse", "id_question='" & id_question & "'")
    mais...je dois être bête...mais c'est le remplacement par cette valeur autant de fois que cela apparait dans la formule qui me bloque.

    J'ai une règle du style :
    regle = ([Q01] + [Q02]) > 5
    je remplace [Q01] par Reponse('Q01') grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        condition = Replace(condition, "[", "Reponse('")
        condition = Replace(condition, "]", "')")
    mais le calcul ne s'exécute pas avant de lancer la vérification de la règle avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TesteRegle = IIf(condition, True, False)
    ce qui me génère une erreur, il interprète condition comme une string...

    j'ai faux ?

  8. #8
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut
    je suis toujours bloqué avec ma chaîne (au pied !)...
    si j'utilise la fonction replace pour remplacer mon identifiant [Q01] par sa valeur...je transforme la condition en une chaîne et mon évaluation iif ne marche plus...même si j'essaye de retransformer en variant avec cvar...

    à l'aide je ne vais pas y arriver !

  9. #9
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 335
    Points : 166
    Points
    166
    Par défaut
    Grâce à un autre post, le problème est donc résolu...
    Pour ceux que cela intéresse, je remplace les "[" par "Reponse('" qui est une fonction qui renvoie la valeur de la réponse grâce à un Dlookup pui je remplace les "]" par "')".
    Et ensuite, chose qui le manquait jusqu'alors...j'exécute la fonction grâce à bool=Eval(MaChaine)...ce qui me renvoie le boolean bool qui est vrai ou faux selon la réponse donnée...même pas besoin de Iif !
    Génial Développez.com !

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

Discussions similaires

  1. [Excel VBA] Faire une condition sous Excel
    Par ANTMA dans le forum Excel
    Réponses: 3
    Dernier message: 03/08/2007, 11h20
  2. [VBA-E]Fonction Racine sous VBA
    Par vuong1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 00h48
  3. [VBA-E] Copier coller sous conditions de couleur
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/04/2007, 18h27
  4. [VBA-E]feuille créée sous condition
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2006, 15h11
  5. (VBA-A] Requete access sous VBA
    Par vanima dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/07/2004, 16h07

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