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

Discussion: Remplacer IIF par IF [AC-2016]

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2013
    Messages : 357
    Points : 118
    Points
    118

    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
    12 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 566
    Points : 19 144
    Points
    19 144

    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
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 497
    Points : 16 150
    Points
    16 150
    Billets dans le blog
    1

    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 régulier
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2013
    Messages : 357
    Points : 118
    Points
    118

    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
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    10 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 10 864
    Points : 22 002
    Points
    22 002

    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
    12 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 566
    Points : 19 144
    Points
    19 144

    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
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 497
    Points : 16 150
    Points
    16 150
    Billets dans le blog
    1

    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 régulier
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2013
    Messages : 357
    Points : 118
    Points
    118

    Par défaut

    Merci pour vos réponses, du coup quelle serait la meilleure solution en terme de performances ?

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 497
    Points : 16 150
    Points
    16 150
    Billets dans le blog
    1

    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!

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    octobre 2013
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2013
    Messages : 357
    Points : 118
    Points
    118

    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, 13h02
  2. Remplacer null par...
    Par HichamK dans le forum Oracle
    Réponses: 4
    Dernier message: 17/01/2006, 14h56
  3. Réponses: 2
    Dernier message: 14/11/2005, 14h33
  4. [Configuration] remplacement des é par des i
    Par illegalsene dans le forum Outils
    Réponses: 2
    Dernier message: 18/10/2005, 17h37
  5. [ASP] include remplacer chemin par variable
    Par damn dans le forum ASP
    Réponses: 3
    Dernier message: 01/10/2004, 16h27

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