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 :

Optimisation de la vitesse - conditions dans des boucles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut Optimisation de la vitesse - conditions dans des boucles
    Bonjour à tous,

    Je me permets de faire appel à vos connaissances une fois de plus, concernant la vitesse d'exécution de méthodes VBA dans Excel.

    Je souhaiterais savoir quelle est façon la plus efficace de coder des conditions (nombreuses...) dans des boucles ?

    Par exemple, est-il préférable d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If Condition A Then
       If Condition B Then
          ' Instructions 1
       End If
       If Condition C
          ' Instructions 2
       End If
    End If
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If Condition A And Condition B Then
       ' Instructions 1
    End If
    If Condition A And Condition C Then
       ' Instructions 2
    End If
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Condition A And Condition B Then
       ' Instructions 1
    ElseIf Condition A And Condition C Then
       ' Instructions 2
    End If
    Y-a-t-il beaucoup de différences lors de l’exécution entre ces différentes méthodes et en existe-t-il d'autres assez similaires (comme select case) ? Que faudrait-il privilégier et pourquoi ?

    Merci d'avance pour votre participation.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour flav_cm,

    Les différentes présentations que tu proposes sont quasi-identiques. La seule différence entre ces-dernières réside dans le fonctionnel : de quelles conditions et vérifications as-tu besoin ?
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     If Condition A Then
       If Condition B Then
          ' Instructions 1
       End If
       If Condition C
          ' Instructions 2
       End If
    End If
    ... on va toujours tester A. Si A est remplis on va toujours tester B PUIS C.
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Condition A And Condition B Then
       ' Instructions 1
    End If
    If Condition A And Condition C Then
       ' Instructions 2
    End If
    ... on va toujours tester A et B PUIS A et C.
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Condition A And Condition B Then
       ' Instructions 1
    ElseIf Condition A And Condition C Then
       ' Instructions 2
    End If
    ... on va toujours tester A et B. Si la condition n'est pas remplis (et seulement si), on va tester A et C.

    Donc ces différentes manières sont légèrement différentes et c'est à toi, fonctionnellement, d'optimiser les vérifications.

    Par exemple, moi j'aurais peut-être fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If Condition A Then
       Select Case ma_variable
          Case B
             'Instruction 1
          Case C
             'Instructions 2
          Case Else
             'Pas forcément
       End Select
    End If
    Là, je teste A puis après je fais un Select Case sur "ma_variable" en testant B, C ou autre chose.

    Voila, n'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Bonjour Kimy_Ire et merci pour ta réponse rapide.

    Malheureusement dans mon cas je ne peux pas utiliser Select Case parce que mes conditions portent sur des variables différentes...

    Si les différentes écritures ne changent pas beaucoup la vitesse du code je vais faire au plus fonctionnel pour moi en effet !

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    flav_cm,

    Dans les exemples que tu présentes, tu testes toujours A. Donc au final, tu peux extraire la condition, comme j'ai fait, avant ton Select Case.
    Après, tu peux simplifier en passant par des fonctions si tu as plusieurs fois les mêmes tests à faire.
    Par exemple :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub test2()
    If A Then
        If ma_fonc(ma_var) Then
            'instructions
        End If
    ElseIf B Then
        If ma_fonc(ma_var) Then
            'instructions
        End If
    ElseIf C Then
        If ma_fonc(ma_var) Then
            'instructions
        End If
    Else
        MsgBox "Rien"
    End If
     
    End Sub
     
    Function ma_fonc(ma_var As Variant)
     
    Select Case ma_var
        Case D
            ma_fonc = True
        Case E
            ma_fonc = True
        Case F
            ma_fonc = True
        Case Else
            ma_fonc = False
    End Select
     
    End Function
    Là, j'ai un peu écris n'importe quoi, mais c'est juste pour l'exemple.
    Tu peux faire en sorte que ta fonction te retourne une valeur/variable plutôt que d'effectuer un test avec Call.

    Voila ! Je reste disponible !

    Cordialement,
    Kimy

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Merci pour l'idée, je vais regarder si ça peut m'arranger !

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

Discussions similaires

  1. [PHP 5.3] Tester des conditions dans une boucle for
    Par coulane dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2010, 11h50
  2. Problème de logique dans des boucles "If"
    Par bilou95 dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2007, 11h05
  3. Passage dans des boucles (1 - 2 fois)
    Par falco- dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2007, 16h16
  4. problème de syntaxe dans des boucles imbriquées
    Par deglingo37 dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 14h46
  5. [FLASH MX2004] Deux conditions dans une boucle
    Par pierrot10 dans le forum Flash
    Réponses: 1
    Dernier message: 06/11/2005, 16h31

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