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 :

Problème d'interprétation Vrai Faux et True False [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut Problème d'interprétation Vrai Faux et True False
    Bonjour à tous,

    La question a sans doute été posée des milliers de fois mais je n'ai pas trouvé la réponse sur la toile.

    Je rencontre un problème de langue entre Excel et VBA concernant les Vrai Faux et True False

    Je m'explique. J'ai un userform dans lequel il y a plusieurs checkbox. Une fois les saisies terminées, je sauvegarde les différentes valeurs dans une chaine de caractère dans laquelle les entrées sont séparées par une chaine de split (ClefSplit) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TextBoxPrenom.Value & ClefSplit & .TextBoxNom.Value & ClefSplit & .CheckBox1.Value & ClefSplit & .CheckBox2.Value & ClefSplit & .CheckBox3.Value & ClefSplit & .CheckBox4.Value & ClefSplit & .CheckBox5.Value & ClefSplit & .CheckBox6.Value
    Le problème c'est que les valeurs enregistrées pour les checkbox sont "Vrai" ou "Faux" et quand je veux les restituer dans mon userform, elles ne s'affichent pas puisque le checkbox ne comprend que "True" ou "False".

    Je contourne le problème en faisant un if "Vrai" then True else False, mais si un utilisateur travaille avec une version en anglais, ça ne pourra pas fonctionner.

    Comment puis-je faire pour que la valeur enregistrée dans ma chaine de caractère pour chaque checkbox soit directement exploitable sans avoir à passer par une conversion via un if ?

    Merci d'avance pour votre aide

    Michel

  2. #2
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 487
    Points : 2 270
    Points
    2 270
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TextBoxNom.Value & ClefSplit & abs(.CheckBox1.Value) & ClefSplit & abs(.CheckBox2.Value) &

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Je m'auto réponds.

    Il faut enregistrer les valeurs numériques équivalentes. Pour cela, il suffit de rajouter un "-" devant la valeur booléenne à enregistrer. Ma chaine corrigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TextBoxPrenom.Value & ClefSplit & .TextBoxNom.Value & ClefSplit & -.CheckBox1.Value & ClefSplit & -.CheckBox2.Value & ClefSplit & -.CheckBox3.Value & ClefSplit & -.CheckBox4.Value & ClefSplit & -.CheckBox5.Value & ClefSplit & -.CheckBox6.Value
    Si Vrai, la valeur -CheckBoxX.Value est égale à 1, qui sera interprété comme True
    Si Faux, la valeur -CheckBoxX.Value est égale à 0, qui sera interprété comme False

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je contourne le problème en faisant un if "Vrai" then True else False, mais si un utilisateur travaille avec une version en anglais, ça ne pourra pas fonctionner.
    Je ne comprends pas ta description.
    Normalement, en VBA, un code du style If .CheckBox1.Value = "Vrai" Then ne devrait pas fonctionner, à moins que .CheckBox1.Value soit une chaine de caractère.
    Il faudrait écrire If .CheckBox1.Value ThenLes valeurs des CheckBox1 ne sont pas des chaines mais des booléen, elles ne dépendent donc pas de la langue.

    Donc, pour sortir "Vrai" et "Faux", il faudrait écrire : IIf(.CheckBox1.Value, "Vrai", "Faux").

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Merci Thumbdown,

    Je viens de voir ta réponse qui est arrivée pendant que je rédigeais la mienne.
    Je viens d'essayer et ça marche aussi. Je l'adopte car ça me semble plus propre et compréhensible que le "-"

    Merci.

    Michel

  6. #6
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 487
    Points : 2 270
    Points
    2 270
    Par défaut
    plus propre non mais plus compréhensible oui!

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    @Menhir,

    Mon If Then n'est pas construit comme cela. J'ai fait un raccourci pour dire que je passais par là pour avoir les valeurs true ou false.

    Il est bien évident que ça vient après une instruction du type MaVariableTableau = Split(MaChaine, ClefSplit).

    L'instruction est donc de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MaVariableTableau(x) = "Vrai" Then .CheckboxX.Value = True Else .CheckBoxX.Value = False
    Est-ce que c'est plus compréhensible ?

    Par contre, ta réponse n'est pas tout à fait exacte. La valeur de la CheckBox enregistrée dans ma chaine texte dépend malheureusement de la langue et ce qui était enregistré dans ma chaine était bien des "Vrai" et "Faux". D'où ma question sur ce forum.

    Et pour être plus précis, avec un Excel en anglais, les valeurs textes sont bien "True" et "False" qui même en texte sont bien comprises par la CheckBox lors de la restitution.

    Avec le "-" ou le abs, ce sont des valeurs numériques qui sont enregistrées dans la chaine, et ces valeurs sont correctement interprétées comme des True ou des False, donc indépendantes de la langue de l'application.

  8. #8
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 487
    Points : 2 270
    Points
    2 270
    Par défaut
    tester un valeur booléenne pour affecter la même valeur à un autre valeur booléenne est inutile!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'if (MaVariableTableau(x) = "Vrai")=true then 
    .CheckboxX.Value = MaVariableTableau(x) = "Vrai"

  9. #9
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    tester un valeur booléenne pour affecter la même valeur à un autre valeur booléenne est inutile!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .CheckboxX.Value = MaVariableTableau(x) = "Vrai"
    Merci Thumbdown, je ne connaissais pas ce raccourci.

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

Discussions similaires

  1. [AC-2013] Problème sur true/false checkbox
    Par vinkey_33 dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/01/2018, 15h15
  2. Ecriture Classeur fermé problème avec opérateurs logiques VRAI/FAUX
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/03/2014, 19h59
  3. Probléme vrai faux avec case à cocher
    Par orcinus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/09/2013, 13h57
  4. [XL-2010] Format : vrai/faux ou true/false
    Par mariebru dans le forum Excel
    Réponses: 10
    Dernier message: 15/08/2011, 10h35

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