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 :

attribuer 1 pour une case cochée et 0 sinon


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut attribuer 1 pour une case cochée et 0 sinon
    Bonjour ,

    Je crée mon premier formulaire de saisie, et je travaille en collaboration avec un statisticien sourcilleux : il veut "1" pour "oui" et "0" pour "non". Tant qu'à faire, j'aimerais autant que ce soit enregistré tel quel dans la table correspondante.

    Seulement par défaut, access utilise "0" pour oui et "-1" pour "non".

    Je n'ai pas trouvé comment changer ça, existe-t-il quelque-chose dans les propirétés ? Faut-il passer par du VB ? Comment faire ?

    Jusqu'ici j'ai fait avec des listes déroulantes "oui/non", qui sont plus "souples" sur cet aspect, mais ça va être une vraie galère à saisir, et puis j'aime bien apprendre de nouvelles possibilités.

    Evidemment, il est toujours possible de corriger la table "après coup", mais comme c'est plus moi qui serait en charge de ce projet sur la fin, ça ne marchera pas.

    Merci d'avance !

  2. #2
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 111
    Points : 1 612
    Points
    1 612
    Par défaut
    Il me semble que c'est -1 pour "vrai"
    Tu peux enregistrer dans la table après traitement de la case à cocher.
    Par exemple, tu enregistres "1" dans un champ numérique (et non booléen) quand la case est cochée et "0" si elle est décochée. Une ou deux lignes de VBA devraient suffire.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par stigma Voir le message
    Tu peux enregistrer dans la table après traitement de la case à cocher.
    Par exemple, tu enregistres "1" dans un champ numérique (et non booléen) quand la case est cochée et "0" si elle est décochée. Une ou deux lignes de VBA devraient suffire.
    Oui, c'est exactement ce que je voudrais faire. Mais je ne sais pas comment le faire. Aucune "propriété" ne semble donner ce type d'option, et en VBA je ne sais pas comment l'écrire ni comment le déclencher. Si tu as une idée précise, merci de préciser ;-)

  4. #4
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Bonjour
    Dans ta table tu modifies Ton type de donnée (OuiNon) par Numerique.
    Dans ton form Sur la procedure Clic Ou apresMAJ de ta case a cocher
    tu met se code (Remplace Cocher par le Nom de ta case a cocher)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Cocher_Click()
    If Me.cocher = True Then
    Me.cocher = 1
    Else
    Me.cocher = 0
    End If
    End Sub
    J espère que cela t'aidera

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Renardo Voir le message
    J espère que cela t'aidera
    Un peu que ça m'aide, ça révolutionne ma vie tu veux dire

    Maintenant je suis pressé de retourner bosser pour mettre en application

    Mille merci et bon WE !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Petite recherche d'optimisation : ce code marche super bien, mais il est très fastidieux à copier-coller dans toutes mes cases à cocher (j'en ai VRAIMENT beaucoup).

    Est-ce que quelqu'un aurait la gentillesse de me proposer un code permettant d'attribuer cette "règle" (0 pour non, 1 pour oui) qui s'applique à toutes les cases à cocher ? Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub [pour toute case_à_cocher du formulaire]_AfterUpdate()
    If [case_à_cocher] = True Then
    Me.[variable liée à la case_à_cocher] = 1
    Else
    Me.[variable liée à la case_à_cocher] = 0
    End If
    End Sub
    Faisable ? Je m'en remet à votre expérience... Et vous remercie par avance.

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    platax, visiblement tes saisies se font avec des cases à cocher et pas avec des 0/1 donc pourquoi vouloir des 0/1? (en plus ce code marche que si tu insert pas si tu consulte/modifie)
    si c'est pour produire des états ou visu tu peux utiliser un champ calculé dans une requete:
    champ:QuestionOuiNon*-1


  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Je sais, j'ai l'air insistant, mais ça fait partie du cahier des charges : soit je me dépatouille avec des cases à cocher qui "donnent" des 0 et des 1, soit je repasse en liste déroulantes qui font ça très bien (mais c'est plus pénible à saisir).

    La contrainte vient des autres logiciels de statistiques qui exploiteront cette base (statistica, stat view... que sais-je encore), et qui fonctionnent de façon un peu plus "conventionnelle" en matière de programmation : 1 pour oui, 0 pour non (comme en assembleur, par exemple). Le plus bête c'est qu'OpenOffice.org fait ça très bien par défaut, mais j'ai pas les droits administrateurs pour l'installer sur cette bécane

    Mais s'il faut copier-coller 60 fois le code ci-dessus, je suis assez obstiné pour le faire

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    excuse moi platax d'insiter mais pourquoi tu n'exporte pas les données de la requete qui met en forme plutot que la table?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par vodiem Voir le message
    excuse moi platax d'insiter mais pourquoi tu n'exporte pas les données de la requete qui met en forme plutot que la table?
    Je ne suis pas sur de comprendre ton idée, car je ne connais pas l'utilisation des requêtes. Mais pour ce que je sais de l'exportation de données, il est par exemple facile d'exporter vers excel, par exemple, et de transformer à ce moment là les -1 en 0 et les 0 en 1.

    Le problème est d'une part que c'est une source d'erreur, le 0 pouvant vouloir dire coché ou non coché selon qu'il est pris avant ou après traitement, d'autre part que ce n'est pas moi qui aurait à gérer ce problème une fois toutes les données entrées. Je préfère donc le prévoir en amont pour avoir des tables au clair avec leur traitement ultérieur.

    La commande qui m'a été faite est claire : il faut des 1 pour les cases cochées, et ça ne semble pas négociable. De toutes façons, ça me frustre d'être tenu de garder la propriété "par défaut" du logiciel alors que je m'attendais à plus de souplesse... Je suis étonné que ça ne soit pas déjà prévu par Access de pouvoir attribuer une valeur par convention à une propriété de case ou de tout autre bouton. Sans doutes pour inciter au VBA... A moins que je n'ai pas encore découvert le bon menu ?

  11. #11
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    pour rappel comme te l'as dit stigma: 0 c'est toujours non coché, coché vaut -1 au lieu de 1, d'où champ calculé= QuestionOuiNon*-1 pour transformer les champs de ta table dans la requete.

    une requete est équivalente à une table: il peut se substituer à une table, si ce n'est qu'il n'est pas toujours éditatable.

    vouloir 1 pour -1 n'est pas un vrai prb.
    la requete peut être exporté comme une table, il est possible aussi de faire une table à partir d'une requete...
    il est même possible de faire une requete maj pour remplacer les -1 en 1...

    enfin, je te dis ca parce que même s'il est possible de te donner un code qui permettrais automatiquement de convertir tous tes cases à cocher avant l'insertion dans les champs de la table (ce qui t'évite tes fameux copie/coller), il faut faire aussi l'inverse: convertir les valeurs des champs 0/1 pour ces cases à cocher en 0/-1 (si tu venais à revenir sur un enregistrement pour le modifier).
    au vu de ce que tu me dis, cela ne se justifie pas (en mon sens) pour ton cas d'allourdir la charge de travaille: à chaque form tu vas devoir te prendre la tête...

    access c'est pas un logiciel de stat ni un tableur, il faut apprendre à penser autrement.

    ils veulent quoi en final? une table? un fichier? tu fais une conversion et tu leur dis où le trouver...
    et laisse tranquille access avec ses -1 et profite de sa souplesse à gérer les bases de données pour avancer dans ton projet.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci pour cet éclaircissement Vodiem.

    Je ne suis pas sur de saisir la difficulté de programmation quant au problème de "réversibilité" entre -1 et 1 en cas de retour sur les données : je pense que le code ci-dessus agit à chaque mise à jour du formulaire, et donc permet tout à fait de faire face à condition de ne pas changer des valeurs directement dans la table sans passer par le formulaire.

    Quoi qu'il en soit, il serait donc plus sage de saisir la table avec -1 au lieu de 1, et de prévoir une requête transformant tous les -1 en 1 ? Ou les "true" en 1 ? Ca signifie que tant que je suis sur la saisie, je rentre "façon Access", et une fois terminé je lui demande d'exporter à ma façon... Je vais me ranger derrière votre sagesse.

    Mais alors, ça se fait comment cette manip ? Je crée une requête, j'imagine, et je lui demande quoi ? De me copier-transformer-coller la base avec les modifs, en quelques sortes ? Ce qui voudra dire d'exploiter systématiquement cette requête après chaque mise à jour de la base initiale, c'est effectivement une manière différente de penser.

    Je vais regarder les tutoriels de base des requêtes, mais si vous pouvez me donner un indice sur la façon de construire celle-ci, ça me sera surement précieux.

  13. #13
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    ce n'est pas autant une difficulté à programmer qu'une contrainte inutile.

    je te donne une facon de procéder: boucler sur tous les objets du form, si c'est d'un type case à cocher lire le nom de l'objet (où tu aurais préalablement nommé par le nom champ concerné) et affecter le champ par la valeur approprié.
    tu trouveras tous les éléments dans la faq.

    le code que te donne Renardo affecte une valeur en fonction de l'événement clic, le tien sur l'événement après maj mais qd tu ouvre le form les cases à cocher, qui ne sont pas lier aux champ de la table, elles ne reprendront donc pas les saisies précédemment enregistrées. (pb réversibilité écrire mais aussi lire). il te faudra faire cela pour chacun de tes forms.

    j'imagine que tu vas passer beaucoup de temps à faire marcher tout cela pour avoir une table avec des 0/1, alors que tu ne perd aucun temps pour 0/-1.
    faire une requete tu verras c'est une formalité pour ce que tu as besoin.
    donne le nom de la table et ses champs je te donne le code sql approprié.
    la requete se met a jour automatiquement tu n'as pas de travail après l'avoir écrite.
    tu l'ouvre comme une table et tu auras automatiquement tout les 0/1.
    seulement, tu n'auras pas le droit à l'édition mais je ne pense pas que cela te pose problème. à partir de cette requete tu peux l'exporter dans d'autre appli.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par vodiem Voir le message
    donne le nom de la table et ses champs je te donne le code sql approprié.

    Je ne vais pas donner tous les champs, car il y en a bien d'autres qui sont au format texte, ou bien qui relèvent d'une liste déroulante. Mais voici un extrait à partir duquel je pourrais commencer à y voir clair:

    nom de la table : Table1

    mes champs (oui/non, ou 0/-1...):

    LTFA
    LTFA_elongation
    LTFA_infiltration
    LTFA_epaississement

    LCF
    LCF_discontinuite
    LCF_liquide
    LCF_arrachement
    LCF_distension

    LLI
    LLI_superficiel
    LLI_profond
    LLI_arrachement

    En prime, si c'est possible, le premier champs serait "coché" automatiquement (valide) si au moins un des 3 ou 4 sous-item est coché. La question essentielle restant de réaliser une requette pour obtenir des "1" pour "vrai".

    Merci...

  15. #15
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    voici le code sql:

    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
    select
    (LFTA_elongation OR LFTA_infiltration OR LFTA_epaississement)*-1 as xLFTA,
    LFTA*-1 as nLFTA,
    LTFA_elongation*-1 as nLTFA_elongation,
    LFTA_infiltration*-1 as nLFTA_infiltration,
    LTFA_epaississement*-1 as nLTFA_epaississement,
     
    (LCF_discontinuite OR LCF_liquide OR LCF_arrachement OR LCF_distension)*-1 as xLCF,
    LCF*-1 as nLCF,
    LCF_discontinuite*-1 as nLCF_discontinuite,
    LCF_liquide*-1 as nLCF_liquide,
    LCF_arrachement*-1 as nLCF_arrachement,
    LCF_distension*-1 as nLCF_distension,
     
    (LLI_superficiel OR LLI_profond OR LLI_arrachement)*-1 as xLLI,
    LLI*-1 as nLLI,
    LLI_superficiel*-1 as nLLI_superficiel,
    LLI_profond*-1 as nLLI_profond,
    LLI_arrachement*-1 as nLLI_arrachement
     
    from Table1

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    OK, merci beaucoup vodiem. C'est effectivement une possibilité d'exporter après coup la base sous la forme voulue. Néanmoins, cette méthode conserve des inconvénients certains :

    - ma base n'est pas "utilisable" tant qu'elle n'est pas passée à la moulinette ;

    - le codage peut être extrêmement long et fastidieux compte tenu du nombre de champs ;

    - c'est une source d'erreur ;

    - cela peut poser des problème de version d'Access.

    Du coup, je crois que je vais laisser tomber l'ergonomie "case à cocher" pour revenir à de bonnes vieilles listes déroulantes oui/non. Dommage qu'un si bel outil ne soit pas plus affuté...

Discussions similaires

  1. Changer couleur d'arrière plan pour une case d'un tableau
    Par Mo_Poly dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/10/2009, 16h33
  2. Griser et dégriser un champ en fonction d'une case cochée
    Par nickoeuh dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 27/06/2008, 13h27
  3. retourner une valeur dans une case coché
    Par ghnawfal dans le forum JSF
    Réponses: 3
    Dernier message: 16/04/2008, 13h58
  4. Commande $\square$ pour une case à cocher -> erreur
    Par enneite dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 05/12/2007, 20h15
  5. [VB] Recupéré une propriété d'une case coché au hasrd
    Par tom box dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 14/06/2006, 16h28

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