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 :

Fontion IIf - optimisation ? [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut Fontion IIf - optimisation ?
    Bonjour,

    Par souci d'optimisation (!), j'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Target.Offset(0, 0).Value = "" Then
       Target.Offset(0, 0).Value = "o"
    Else
       If Target.Offset(0, 0).Value = "o" Then
           Target.Offset(0, 0).Value = "x"
       Else
           Target.Offset(0, 0).Value = ""
       End If
    End If
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Offset(0, 0).Value = IIf(Target.Offset(0, 0).Value = "", "o", IIf(Target.Offset(0, 0).Value = "o", "x", ""))
    Ça fonctionne mais j'ai un doute sur le fait qu'on ne puisse pas faire mieux.

    Merci pour vos lumières,
    Cdt

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      With Target
      .Value = IIf(.Value = "", "o", IIf(.Value = "o", "x", ""))
      End With
    End Sub
    Pourquoi utiliser Offset(0,0) ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour Philippe,

    Merci !! C'est parfait, comme d'habitude.

    Après avoir envoyé ma question, je me suis rendu-compte que l'Offset était effectivement inutile.

    Cordialement,

  4. #4
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 197
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Pourquoi utiliser Offset(0,0) ?
    mode HS on
    Ben c'est comme dans les boites a vitesses des voitures, y'a la première pour aller doucement à un endroit, la 2ème plus vite, la 3ème etc., ... et le point mort pour aller nulle part
    mode HS off

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Hello,

    L'instruction IIF n'est absolument pas une version optimisée de l'instruction IF, ce n'est que du sucre syntaxique.
    A utiliser avec des instructions courtes, et minimiser les niveaux d'imbrication, faute de quoi, ton code source peut rapidement devenir illisible.
    Hors, le but premier d'un code source est d'être lisible.

    A utiliser avec prudence.

  6. #6
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 201
    Par défaut re
    Bonjour à tous
    juste en passant comme ça

    depuis quand les doubles conditions ("IIF" )sont des arguments d'optimisation?

    pour répondre a cette question si vous ne l'avez pas

    imaginez simplement que les conditions aillent de "A" à "Z"

    comment pourriez vous l’écrire avec des "IIF"

    là ça doit déjà percuter

    surtout qu'en vba avec "IIF" le code va passer les deux conditions en revue contrairement à un if else ou if elseif

    des questions se posent alors
    qu'est ce que vous entendez par optimisation ?
    1. un code plus court
    2. un code plus rapide
    3. un code plus intelligible
    4. un peu des trois


    juste comme ça
    avez vous penser à
    select case /case /end select --> décisif sur occurrence 1 code propre et clair
    switch ---> décisif sur occurrence 1(un peu moins rapide contre indiqué si plus de 4/5 test [code indigeste] )
    choose ---> décisif sur occurrence testée par argumentée (un peu moins rapide contre indiqué si plus de 4/5 test [code indigeste] )

    l'optimisation n'est jamais passé par une simplification expressive du code (ou très rarement quand c'est justifié) mais par la méthode

    à méditer
    Patrick

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    Sans parler de la proposition de Philippe,

    Si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Target.Offset(0, 0).Value = "" Then
       Target.Offset(0, 0).Value = "o"
    Else
       If Target.Offset(0, 0).Value = "o" Then
           Target.Offset(0, 0).Value = "x"
       Else
           Target.Offset(0, 0).Value = ""
       End If
    End If
    Peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Value = IIf(Target.Value = "", "o", IIf(Target.Value = "o", "x", ""))
    9 lignes de code remplacées par une seule, c'est à mes yeux de néophyte de l'optimisation même si je crois avoir compris que IIf n'est pas une solution parfaite.

    Cdt

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

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  2. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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