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 de test de variable exportée d'Access [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut Problème de test de variable exportée d'Access
    Bonsoir,
    je butte lamentablement sur un code destiné a testé la valeur d'une cellule exportée d'un champ Boolean depuis access.

    A la vision dans Excel le champ vaut FAUX ou VRAI.
    J'ai pu déterminer que le type de la cellule est Vbboolean, mais je ne parviens pas à tester FALSE ou TRUE, ou quoi que ce soit de Boolean.

    Si quelqu'un peut m'éclairer

    Voici l'extrait de mon code
    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
    'Convert Status of UM (Unacompanied Minor) from FAUX(FALSE)/VRAI(TRUE) to *BLANC ou UM
     
        Dim IDx         As Long
        Dim cell_test   As Boolean
     
        For IDx = 2 To lrow
            Select Case VarType(Range("A" & lrow))
                Case vbBoolean
                    cell_test = Range("A" & lrow)
                    Select Case cell_test
                        Case True
                             Range("A" & IDx) = "UM"
                        Case Else
                             Range("A" & IDx) = ""
                    End Select
                Case Else
                    Range("A" & IDx) = ""
            End Select
        Next
    J'obtiens invariablement une mise à blanc de mes cellule à TRUE ou FALSE.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    A mon avis tu devrais tester la chaine (String) VRAI ou FAUX, et non un booléen, car même si je ne suis pas un spécialiste Excel, je ne pense pas que cela soit applicable dans ce cas.

    Philippe

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Godzestla

    A tenter :

    1) on regrde bien ce que fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toto = "FAUX"
      MsgBox CBool(0) = toto
      MsgBox CBool(1) = toto
      toto = "VRAI"
      MsgBox CBool(0) = toto
      MsgBox CBool(1) = toto
    2) on essaye alors de voir ce que ferait cela (je n'ai pas essayé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Case vbBoolean
                    cell_test = Range("A" & lrow)
                    Range("A" & IDx) = iif(cbool(1) = cell_test,"UM","")
               Case Else
                    Range("A" & IDx) = ""
    EDIT : je préfère tenter cette approche plutôt que de comparer avec "VRAI" ou "FAUX" (strings) pour éviter des mauvaises surprises en cas de distribution sur une version non française.

  4. #4
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonjour
    remplace ces lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Case VarType(Range("A" & lrow))
                Case vbBoolean
                    cell_test = Range("A" & lrow)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Case TypeName(Range("A" & lrow).Value)
                Case "Boolean"
                    cell_test = Range("A" & lrow).Value
    Bonne journée

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    VRAI = 1 en Excel, mais VRAI = TRUE = -1 en VBA

    Donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule.Value = IIf(Cellule.Value = -1, "UM", "")
    Tu peux alléger ton code en te passant de compteur de boucle et de variable Range... et je me demande si, dans ton code, tu utilises la bonne variable sur la ligne "Select case" en utilisant lrow, car je pense que tu dois utiliser idx... Me trompé-je?

    Tu peux avoir un code qui serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each Cellule in range("a2:a" & idx) ' idx à déterminer d'une manière ou d'une autre
        Cellule.Value = IIf(Cellule.Value = -1, "UM", "")
    next cellule
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Pierre Fauconnier,

    Oui.

    Encore que, sous VBA, toute valeur différente de 0 est TRUE et qu'on pourrait donc tester sur Cellule.Value <> 0

    Une chose me titille toutefois depûis le début :
    Godzestla est-il certain de bien rentrer dans le
    ?

    Pour en être certain, il devrait, dans son test, ne pas donner la même valeur dans le cas "booléen" et dans le cas "non booléen" ....
    Si confirmé ===>> OK . Si non confirmé ===>>> tout à repenser ...

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Encore que, sous VBA, toute valeur différente de 0 est TRUE et qu'on pourrait donc tester sur Cellule.Value <> 0
    Cette assertion est fausse car on est en Excel, et on doit donc tester ce qui est VRAI dans Excel.

    De plus, en Excel, tester ce qui est explicitement VRAI (-1) ne revient à tester ce qui n'est pas FAUX (<>0), même si l'on peut considérer que la remontée de données d'Access est conforme à nos attentes (VRAI, FAUX ou VIDE(=0 pour Excel)). Car, par une extension de ton raisonnement, on pourrait considérer comme FAUX tout ce qui vaut 0 (ou que tout ce qui n'est pas vrai est faux), alors qu'une donnée vide n'est pas une donnée dont la valeur est FAUX, mais plutôt une donnée dont la valeur est indéterminée.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    La VRAIE (puisqu'on discute ici de booléens ) question est : est-il certain de tester (ou de pouvoir le faire) le type de sa variable ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/12/2009, 22h29
  2. [Tableaux] Problème de test sur une variable
    Par Laurent64 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 14h04
  3. Problème exportation table Access dans Excel
    Par Thiazung dans le forum Access
    Réponses: 5
    Dernier message: 02/10/2006, 17h12
  4. Réponses: 4
    Dernier message: 29/08/2006, 16h37
  5. Réponses: 4
    Dernier message: 16/06/2005, 15h37

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