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 :

IF - rapidité d'éxécution


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut IF - rapidité d'éxécution
    Salut à tous,

    Petite question d’ordre "technique", je souhaiterai savoir comment est évalué une condition en VBA lorsqu'on écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cond1=true and cond2 = false then ...
    si cond1 est false, le programme test-il quand même cond2 ? on passe il directement à la ligne suivante ?

    En clair, est il préférable d'écrire (en termes de rapidité d’exécution):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cond1=true and cond2 = false then ...
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if cond1=true then
     if cond2 = false then ...
    end if
    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux toujours faire le test
    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
    Sub Test()
    Dim Topdepart As Single, TopFin As Single
    Dim Temps1 As Double, Temps2 As Double
    Dim i As Long
    Dim Cond1 As Boolean, Cond2 As Boolean
     
        Topdepart = Timer
        For i = 1 To 100000000
            If Cond1 = True And Cond2 = False Then
                'rien
            End If
        Next i
        TopFin = Timer
        Temps1 = TopFin - Topdepart
     
        Topdepart = Timer
        For i = 1 To 100000000
            If Cond1 = True Then
                If Cond2 = False Then
                    'rien
                End If
            End If
        Next i
        TopFin = Timer
        Temps2 = TopFin - Topdepart
     
        MsgBox "Temps 1 : " & Temps1 & Chr(10) & "Temps 2 : " & Temps2
     
    End Sub
    Cordialement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Merci !

    3 secondes pour la première forme, 1 pour la seconde...

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Re,

    Désolé, j'avais oublié d'initialiser les variables booléennes
    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
    Sub Test()
    Dim Topdepart As Single, TopFin As Single
    Dim Temps1 As Double, Temps2 As Double
    Dim i As Long
    Dim Cond1 As Boolean, Cond2 As Boolean
     
        Cond1 = True
        Cond2 = False
     
        Topdepart = Timer
        For i = 1 To 100000000
            If Cond1 = True And Cond2 = False Then
                'rien
            End If
        Next i
        TopFin = Timer
        Temps1 = TopFin - Topdepart
     
        Topdepart = Timer
        For i = 1 To 100000000
            If Cond1 = True Then
                If Cond2 = False Then
                    'rien
                End If
            End If
        Next i
        TopFin = Timer
        Temps2 = TopFin - Topdepart
     
        MsgBox "Temps 1 : " & Temps1 & Chr(10) & "Temps 2 : " & Temps2
     
    End Sub
    Cordialement.

    EDIT : je te laisses faire le test avec Cond1 = False et Cond2 = true pour voir la différence

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    En quoi le fait d'initialiser change tant le temps ? (j'ai 1.8 et 1.25 sec)
    Un boolean non initialisé est à false par défaut non?

  6. #6
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Sans les tests d'égalité tu gagnes encore en vitesse d’exécution:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit
     
    Sub Test()
     
        Dim Topdepart As Single, TopFin As Single
        Dim Temps1 As Double, Temps2 As Double, Temps3 As Double
        Dim i As Long
        Dim Cond1 As Boolean, Cond2 As Boolean
     
        Cond1 = True
        Cond2 = False
     
        Topdepart = Timer
        For i = 1 To 100000000
           If Cond1 = True And Cond2 = False Then
               'rien
           End If
        Next i
        TopFin = Timer
        Temps1 = TopFin - Topdepart
     
        Topdepart = Timer
        For i = 1 To 100000000
           If Cond1 = True Then
               If Cond2 = False Then
                   'rien
               End If
           End If
        Next i
        TopFin = Timer
        Temps2 = TopFin - Topdepart
     
        Topdepart = Timer
        For i = 1 To 100000000
            If (Cond1 And Not Cond2) Then
                    'rien
            End If
        Next i
        TopFin = Timer
        Temps3 = TopFin - Topdepart
     
        MsgBox "Temps 1 : " & Temps1 & Chr(10) & "Temps 2 : " & Temps2 & Chr(10) & "Temps 3 : " & Temps3
     
    End Sub

Discussions similaires

  1. [LV 8.2] Augmenter la rapidité d'éxécution d'un VI
    Par Red_Cap dans le forum LabVIEW
    Réponses: 5
    Dernier message: 20/07/2010, 19h19
  2. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  3. NMHTTP prob de rapidité
    Par Goldocrack dans le forum C++Builder
    Réponses: 7
    Dernier message: 06/08/2003, 00h12
  4. Rapidite enregistrement
    Par mika dans le forum Débuter
    Réponses: 9
    Dernier message: 25/04/2003, 15h15
  5. [Systeme] Processus en cours d'éxécution
    Par adiGuba dans le forum POSIX
    Réponses: 13
    Dernier message: 16/02/2003, 16h09

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