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 :

Remplacer IIF par IF [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Remplacer IIF par IF
    Bonjour à tous,

    J'ai une zone de texte enrichi plutôt longue à générer dans un état et j'utilise la fonction IIF qui me permet de faire ce que je veux. Sauf que cette fonction évalue toujours les deux conditions, ce qui, en plus d'être lourd, provoque parfois des désagréments quand l'une des conditions est invalide.

    J'aimerais donc abandonner les IIF pour passer sur du IF.

    Par contre, je ne sais pas comment convertir au mieux le texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.mazonedetexte = "debut du texte" & IIf([genre] = "masculin", "Monsieur", "Madame") & "fin du texte"
    Est-ce que je dois déclarer une variable et faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim prefixe As String
    if me.genre = "masculin" then
        prefixe = "Monsieur"
      else
        prefixe = "Madame"
    End If
    me.mazonedetexte = "debut du texte " & prefixe &  " fin du texte"
    où bien il y a une autre façon de faire ?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ta solution est bonne mais je te suggère cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select case me.genre & "" 'Le & "" permet de gérer le cas où la valeur est nulle sans code supplémentaire
       case "masculin": prefixe="Monsieur"   
       case "féminin": prefixe="Madame"
       case else : prefixe = "Madame, Monsieur"
    end select
     
    me.mazonedetexte = "debut du texte " & prefixe &  " fin du texte"
    Et tu pourrais utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.mazonedetexte = "debut du texte" & IIf([genre] & "" = "masculin", "Monsieur", "Madame") & "fin du texte"
    Qui et plus compacte et "naturel" tout en étant à mon avis aussi performant vu que tu n'as qu'un seul test qui retourne une constante.

    Une note à propos des Nuls :
    En principe, n'importe quoi est nul donne nul. C'est une sorte de super élément absorbant.
    En réalité, Access décide parfois (et ce n'est pas toujours clair) de ne pas toujours le traiter ainsi.
    Par exemple Nul & "" te donne une chaîne vide. C'est l'astuce que j'ai utilisée dans le code.
    Et dans DSum(), les nuls sont considérés comme des 0.
    Dans un test, Nul est considéré comme false.
    Bref les nuls sont pratiques mais peuvent être une plaie. Il est prudent de toujours les tester (ou de les traiter) avant de décider quoi en faire plutôt que de laisser Access décider.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pourquoi vouloir remplacer une solution valide par un découpage de cette même solution tout autant valide?

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    En effet, le select case semble mieux que le IF et correspond parfaitement à ce que je veux faire car mon code complet ressemble plutôt à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.mazonedetexte = "debut du texte" & IIf(IsNull([genre]), ("Madame, Monsieur"), IIf([genre] = "masculin", "Monsieur", "Madame")) & "fin du texte"
    J'aime bien la ruse du Nul & "" qui donne une chaine vide.

    Je pense donc utiliser ton premier code marot_r, celui avec le select case, bien que le deuxième soit bien aussi.

    J'y réfléchis.

    Par contre que veux-tu dire dysorthographie, je ne comprends pas très bien, tu proposes aussi d'utiliser le select case ?

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Je préfère un simple NZ() plutôt qu'une astuce qui peut, du jour au lendemain, être "corrigé" par une mise à jour office.

    Après if select iif ce n'est qu'affaire de cas, de gout, de lisibilité ou d'habitude.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    D'accord pour le NZ même si je n'en suis pas un grand fan car il m'a déjà fait sauter des décimales dans des réels ce qui fait que j'ai tendance à l'éviter.

    Pour les entiers et les chaînes, pas de problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim genre As String
    genre = "feminin"
    genre = Switch(genre = "", "Madame, Monsieur", genre = "masculin", "Monsieur", genre = "feminin", "Madame")

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Merci pour vos réponses, du coup quelle serait la meilleure solution en terme de performances ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Le select case (en terme de performances) mais il faut prioriser ce qui statistiquement a le plus de chance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select case genre
    Case 80%
    Case 15%
    Case 5%
    End select
    L'ordre de priorité statistique est valable pour toutes les méthodes!
    Dernière modification par Invité ; 10/01/2018 à 17h42.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    C'est ce que je comptais faire c'est parfait alors, merci !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2006, 12h02
  2. Remplacer null par...
    Par HichamK dans le forum Oracle
    Réponses: 4
    Dernier message: 17/01/2006, 13h56
  3. Réponses: 2
    Dernier message: 14/11/2005, 13h33
  4. [Configuration] remplacement des é par des i
    Par illegalsene dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/10/2005, 16h37
  5. [ASP] include remplacer chemin par variable
    Par damn dans le forum ASP
    Réponses: 3
    Dernier message: 01/10/2004, 15h27

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