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 :

Opérateurs arithmétiques et de comparaison [Toutes versions]


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
    Mars 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 75
    Par défaut Opérateurs arithmétiques et de comparaison
    Bonjour à toutes et à tous,

    Est-il possible de mettre les opérateurs arithmétiques et de comparaison sous forme de variables ?
    Je dois déterminer une formule qui me permet de discriminer 2 séries de données (le solveur d’Excel n’accepte pas un nombre de variables et de données importantes). C’est pourquoi à partir d’une formule de base je fais évoluer les opérateurs arithmétiques et de comparaison manuellement afin de déterminer la plus performante.
    1 variable pour les 4 opérateurs arithmétiques : +, –, * et /
    1 variable pour les 2 opérateurs de comparaison : > et <

    Merci par avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    bonjour,
    Dans le cadre du solveur je ne sais pas.
    Dans des expressions VBA : oui il faut utiliser des variables de type string et évaluer l'expression.
    A la hache et avec le pied (je n'ai pas typé les variables...) ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    VarO = Split("* - + /")
    VarC = Split("< > =")
    For kC = 0 To 2
    For kO = 0 To 3
    a = 5
    b = 2
    Expression = a & VarO(kO) & b
    Comparaison = Expression & VarC(kC) & 10
    result = Evaluate(Comparaison)
    MsgBox Comparaison & VarC(2) & result
    Next
    Next
    End Sub
    A+

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Type des opérandes et opérateurs arithmétiques et de comparaison
    Citation Envoyé par pascal4782 Voir le message
    Est-il possible de mettre les opérateurs arithmétiques et de comparaison sous forme de variables ?
    On peut préciser la notion de variable appliquée à un opérateur car l'usage général des opérateurs cités est qu'ils admettent des opérandes numériques et retournent un résultat numérique ou booléen pour les deux derniers opérateurs de comparaison. C'est la principale différence entre un opérateur et une variable.

    1. Représentation par un index numérique de l'opérateur

    Veux-t-on représenter un opérateur arithmétique par un indice numérique tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit ' User Defined Function (UDF) arithmétique et comparaison
    Public Const indOpAdd As Byte = 1 ' "+"
    Public Const indOpFirst As Byte = indOpAdd
    Public Const indOpMinus As Byte = indOpAdd + 1 ' "-"
    Public Const indOpMul As Byte = indOpMinus + 1 ' "*"
    Public Const indOpDiv As Byte = indOpMul + 1 ' "/"
    Public Const indOpSup As Byte = indOpDiv + 1 ' ">"
    Public Const indOpInf As Byte = indOpSup + 1 ' "<"
    Public Const indOpLast As Byte = indOpInf
    Cet indice numérique, représentant de façon unique un opérateur, est appelé tokenId après la phase de reconnaissance lexicale (scan) par un analyseur syntaxique (parser) de String.

    2. Représentation String au niveau caractère symbolique de l'opérateur

    L'opérateur est usuellement représenté par une chaîne d'un caractère parmi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const strArrOp = "+-*/><" ' Liste des opérateurs dans l'ordre de déclaration des constantes
    3. L'interpréteur Evaluate() d'Excel

    L'interprétation de la String "+" peut être réalisée par un interpréteur d'expressions arithmétiques tel que celui intégré dans Excel :

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER :
    30
    Excel a évalué la String de formule "=1+2" ce qui diffère d'évaluer directement la somme de deux nombres.

    Comparez avec l'approche arithmétique classique :
    30
    Le résultat numérique en final est bien sûr le même, c'est le type de(s) paramètre(s) d'entrée entre les deux approches qu'il faut analyser.

    4. Type des opérandes

    Citation Envoyé par galopin01 Voir le message
    Dans des expressions VBA : oui il faut utiliser des variables de type string et évaluer l'expression.
    A la hache et avec le pied (je n'ai pas typé les variables...)
    D'où la question clé concernant les opérandes à manipuler.
    Préciser pour quels types d'opérande : Byte, Integer, Single, Double, String, Variant, Range ?

    5. Usage dans une formule

    Le dernier paramètre Range peut évoquer une utilisation dans une formule de cellule :

    Citation Envoyé par pascal4782 Voir le message
    Je dois déterminer une formule
    On en vient à l'usage de votre future User Defined Function (UDF) dans une cellule d'une feuille Excel.

    Il faut être concret en donnant les valeurs à saisir, leurs types (même si cela paraît évident) et en indiquant le résultat que vous attendez.

    Dans les trois premières colonnes A, B, C, mettons des données numériques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A1 à A6 : valeur numérique de 1 à 6
    B1 à B6 : valeur numérique de 20 à 25
    C1 à C6 : valeur numérique de 10 à 15
    L'objectif est de mettre une série de formule de D1 à D6 utilisant chacun des six opérateurs.

    Comment voyez le mode opératoire pour votre UDF ?

    1ère solution : Formule "=EvalOp(A1, B1, C1)"

    Dans la cellule D1, on met manuellement la formule "=EvalOp(A1,B1,C1)"
    Le résultat qui devrait s'afficher est 30.
    EvalOp() est une UDF à trois paramètres, le 1er paramètre est le type de l'opérateur de indOpFirst à indOpLast à savoir indOpAdd puisqu'il y a 1 en A1. Les deux autres paramètres sont les opérandes numériques.

    2ème solution : Formule "=EvalOp(A1:C1)"

    En D1, on met manuellement la formule "=EvalOp(A1:C1)"
    EvalOp() est une UDF à un seul paramètre de type Range.
    Autrement dit le paramètre est la sélection des trois cellules avec le type de l'opérateur en première colonne et les deux opérandes sur les deux autres colonnes si on se limite à la rangée courante.

    On pourrait même imaginer de pouvoir sélectionner dans le Range une matrice de cellule. Tout cela est à indiquer.

    On peut faire également une variante en plaçant le type de l'opérateur entre les deux opérandes.
    Dans ce cas, on sélectionne toute la colonne B que l'on copie, efface et insère avant la colonne A pour une configuration de la 1ère range : 20 1 10 au lieu du précédent 1 20 10

    Si on a interverti la colonne B avec la colonne A, pour avoir le type de l'opérateur dans la colonne centrale, on annule l'opération pour revenir à la configuration de départ.

    3ème solution : le type de l'opérateur passe de Byte à String.

    Faut-il remplacer dans la colonne A les chiffres de type de l'opérateur par la représentation symbolique usuelle, la String "+" en A1, "-" en A2, etc. jusqu'à "<" en A6 ?

    Conclusion

    Citation Envoyé par pascal4782 Voir le message
    mettre les opérateurs arithmétiques et de comparaison sous forme de variables ?
    Voilà comment on pouvait interpréter votre phrase.
    A vous de préciser ce que vous avez voulu dire.
    ___________

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 75
    Par défaut
    Bonjour,

    Merci pour toutes les réponses détaillées. Je reconnais que ma demande initiale n’était pas suffisamment précise.
    J’essaye d’évaluer la formule qui me permet de discrétiser 2 groupes dans une série de données situé en colonne A. En colonne A il n’y a que des 0 et des 1, et les différentes mesures de la colonne B à O sur 6300 lignes
    Ce qu’il me faut c’est la possibilité de modifier les opérateurs arithmétiques et de comparaison lors de boucles, afin de modifier une formule initiale.
    Exemple => Formule lors du premier test:
    « =SI(ET($V$5+(B1+C1)>$V$6+(D1+E1);A1=1);1;SI(ET($V$5+(B1+C1)>$V$6+(D1+E1);A1=0);2;"")) »
    Pour le deuxième test (changement du signe après V5):
    « =SI(ET($V$5-(B1+C1)>$V$6+(D1+E1);A1=1);1;SI(ET($V$5-(B1+C1)>$V$6+(D1+E1);A1=0);2;"")) »
    La formule de base contient 5 opérateurs, j’ai donc besoin de 5 variables. Pour résumer :
    - Le signe après V5 passera par +, -, * et /
    - Après B1 passera par +, -, * et /
    - Après C1 changement de > à <
    - Après V6 passera par +, -, * et /
    - Après D1 passera par +, -, * et /

    Cordialement

    Je joins mon code de départ
    Nota : Je suis débutant en VBA et mes procédures sont loin d’être parfaites.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Sub MacroTest()
     
    Dim heure As Long, minute As Long, seconde As Long
    Dim Deb As Currency
    Deb = Timer
     
    Application.ScreenUpdating = False
     
    Range("U1:AE1000").ClearContents
     
    Dim A As Integer
    Dim B As Integer
    Dim C As Integer
    Dim D As Integer
    Dim K As Double
    Dim L As Double
     
    For A = -15 To -5
    For B = (A + 1) To -4
    For C = (B + 1) To -3
    For D = (C + 1) To -2
    For K = -1.5 To 1.5 Step 0.5
    For L = -1.5 To 1.5 Step 0.5
     
    Range("V5").Value = K
    Range("V6").Value = L
     
    ' formule Excel en Q1
    Range("Q1").FormulaR1C1 = "=IF(AND(R5C22*(RC[" & A & "]+RC[" & B & "])>R6C22*(RC[" & C & "]+RC[" & D & "]),RC[-16]=1),1,IF(AND(R5C22*(RC[" & A & "]+RC[" & B & "])>R6C22*(RC[" & C & "]+RC[" & D & "]),RC[-16]=0),2,""""))"
    Range("Q1").AutoFill Destination:=Range("Q1:Q6300"), Type:=xlFillDefault
     
    Range("V2").Formula = "=CountIf(Q1:Q6300,1)"
    Range("V3").Formula = "=CountIf(Q1:Q6300,2)"
    Range("V4").Formula = "=(V3+V2)"
    Range("V1").Formula = "=IF((V3+V2)=0,1,(100*V2)/(V3+V2))"
     
    Range("U1") = A
    Range("U2") = B
    Range("U3") = C
    Range("U4") = D
     
           'Evaluation et copie des resultats
           If Range("V1").Value = Range("AB1").Value And Range("V4").Value > 200 Then
                    Range("AB1000").End(xlUp)(2).Resize(6, 1).Value = Range("V1:V6").Value
                    Range("W1000").End(xlUp)(4).Resize(6, 1).Value = Range("U1:U6").Value
                     End If
     
           If Range("V1").Value = Range("AC1").Value And Range("V4").Value > 200 Then
                    Range("AC1000").End(xlUp)(2).Resize(6, 1).Value = Range("V1:V6").Value
                    Range("X1000").End(xlUp)(4).Resize(6, 1).Value = Range("U1:U6").Value
                    End If
     
           If Range("V1").Value = Range("AD1").Value And Range("V4").Value > 200 Then
                    Range("AD1000").End(xlUp)(2).Resize(6, 1).Value = Range("V1:V6").Value
                    Range("Y1000").End(xlUp)(4).Resize(6, 1).Value = Range("U1:U6").Value
                    End If
     
           If Range("V1").Value = Range("AE1").Value And Range("V4").Value > 200 Then
                    Range("AE1000").End(xlUp)(2).Resize(6, 1).Value = Range("V1:V6").Value
                    Range("Z1000").End(xlUp)(4).Resize(6, 1).Value = Range("U1:U6").Value
                    End If
     
           If Range("V1").Value > Range("AB1").Value And Range("V4").Value > 200 Then
                    Range("AC1:AE1000").Value = Range("AB1:AD1000").Value
                    Range("X1:Z1000").Value = Range("W1:Y1000").Value
                    Range("AB1:AB1000").ClearContents
                    Range("W1:W1000").ClearContents
                    Range("AB1:AB6").Value = Range("V1:V6").Value
                    Range("W1:W6").Value = Range("U1:U6").Value
                    End If
          If Range("V1").Value > Range("AC1").Value And Range("V1").Value < Range("AB1").Value And Range("V4").Value > 200 Then
                    Range("AD1:AE1000").Value = Range("AC1:AD1000").Value
                    Range("Y1:Z1000").Value = Range("X1:Y1000").Value
                    Range("AC1:AC1000").ClearContents
                    Range("X1:X1000").ClearContents
                    Range("AC1:AC6").Value = Range("V1:V6").Value
                    Range("X1:X6").Value = Range("U1:U6").Value
                    End If
          If Range("V1").Value > Range("AD1").Value And Range("V1").Value < Range("AC1").Value And Range("V4").Value > 200 Then
                    Range("Z1:Z1000").Value = Range("Y1:Y1000").Value
                    Range("AE1:AE1000").Value = Range("AD1:AD1000").Value
                    Range("AD1:AD1000").ClearContents
                    Range("Y1:Y1000").ClearContents
                    Range("AD1:AD6").Value = Range("V1:V6").Value
                    Range("Y1:Y6").Value = Range("U1:U6").Value
                    End If
     
    Next L
    Next K
    Next D
    Next C
    Next B
    Next A
     
     
    heure = (Timer - Deb) \ 3600
      minute = ((Timer - Deb) - heure * 3600) \ 60
      seconde = (Timer - Deb) - (heure * 3600) - minute * 60
      Range("S1") = heure & " : " & minute & ":" & seconde
           ActiveWorkbook.Save
                 Application.ScreenUpdating = True
     
    End Sub
    Avec vos conseils j’obtiens cette macro qui fonctionne, cependant le temps de traitement est horriblement long !!!!!.
    Si j’ai commis des maladresses ou que des parties de code sont améliorables je suis à l’écoute.

    Encore un grand merci
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    Sub MacroTestxxxyyy()
     
    Dim heure As Long, minute As Long, seconde As Long
    Dim Deb As Currency
    Deb = Timer
     
    Application.ScreenUpdating = False
     
    Range("U1:AE1000").ClearContents
     
    Dim A As Integer
    Dim B As Integer
    Dim C As Integer
    Dim D As Integer
    Dim K As Double
    Dim L As Double
     
    VarO = Split("* - + /")
    VarP = Split("* - + /")
    VarQ = Split("< >")
    VarR = Split("* - + /")
    VarS = Split("* - + /")
     
    For kO = 0 To 3
    For kP = 0 To 3
    For kQ = 0 To 1
    For kR = 0 To 3
    For kS = 0 To 3
     
    For A = -15 To -5
    For B = (A + 1) To -4
    For C = (B + 1) To -3
    For D = (C + 1) To -2
    For K = 0.5 To 3 Step 0.5
    For L = 0.5 To 3 Step 0.5
     
    Range("V5").Value = K
    Range("V6").Value = L
    Range("U1") = A
    Range("U2") = B
    Range("U3") = C
    Range("U4") = D
    Range("U5") = VarO
    Range("U6") = VarP
    Range("U7") = VarQ
    Range("U8") = VarR
    Range("U9") = VarS
     
    ' formule Excel en Q1
    Range("Q1").FormulaR1C1 = "=IF(AND(R5C22" & VarO(kO) & "(RC[" & A & "]" & VarP(kP) & "RC[" & B & "])" & VarQ(kQ) & "R6C22" & VarR(kR) & "(RC[" & C & "]" & VarS(kS) & "RC[" & D & "]),RC[-16]=1),1,IF(AND(R5C22" & VarO(kO) & "(RC[" & A & "]" & VarP(kP) & "RC[" & B & "])" & VarQ(kQ) & "R6C22" & VarR(kR) & "(RC[" & C & "]" & VarS(kS) & "RC[" & D & "]),RC[-16]=0),2,""""))"
    Range("Q1").AutoFill Destination:=Range("Q1:Q6300"), Type:=xlFillDefault
     
    Range("V2").Formula = "=CountIf(Q1:Q6300,1)"
    Range("V3").Formula = "=CountIf(Q1:Q6300,2)"
    Range("V4").Formula = "=(V3+V2)"
    Range("V1").Formula = "=IF((V3+V2)=0,1,(100*V2)/(V3+V2))"
     
           'Evaluation et copie des resultats
           If Range("V1").Value = Range("AB1").Value And Range("V4").Value > 200 Then
              Range("AB1000").End(xlUp)(5).Resize(10, 1).Value = Range("V1:V10").Value
              Range("W1000").End(xlUp)(2).Resize(10, 1).Value = Range("U1:U10").Value
              End If
     
           If Range("V1").Value = Range("AC1").Value And Range("V4").Value > 200 Then
              Range("AC1000").End(xlUp)(5).Resize(10, 1).Value = Range("V1:V10").Value
              Range("X1000").End(xlUp)(2).Resize(10, 1).Value = Range("U1:U10").Value
              End If
     
           If Range("V1").Value = Range("AD1").Value And Range("V4").Value > 200 Then
              Range("AD1000").End(xlUp)(5).Resize(10, 1).Value = Range("V1:V10").Value
              Range("Y1000").End(xlUp)(2).Resize(10, 1).Value = Range("U1:U10").Value
              End If
     
           If Range("V1").Value = Range("AE1").Value And Range("V4").Value > 200 Then
              Range("AE1000").End(xlUp)(5).Resize(10, 1).Value = Range("V1:V10").Value
              Range("Z1000").End(xlUp)(2).Resize(10, 1).Value = Range("U1:U10").Value
              End If
     
           If Range("V1").Value > Range("AB1").Value And Range("V4").Value > 200 Then
              Range("AC1:AE1000").Value = Range("AB1:AD1000").Value
              Range("X1:Z1000").Value = Range("W1:Y1000").Value
              Range("AB1:AB1000").ClearContents
              Range("W1:W1000").ClearContents
              Range("AB1:AB6").Value = Range("V1:V6").Value
              Range("W1:W10").Value = Range("U1:U10").Value
              End If
     
          If Range("V1").Value > Range("AC1").Value And Range("V1").Value < Range("AB1").Value And Range("V4").Value > 200 Then
             Range("AD1:AE1000").Value = Range("AC1:AD1000").Value
             Range("Y1:Z1000").Value = Range("X1:Y1000").Value
             Range("AC1:AC1000").ClearContents
             Range("X1:X1000").ClearContents
             Range("AC1:AC10").Value = Range("V1:V10").Value
             Range("X1:X10").Value = Range("U1:U10").Value
             End If
     
          If Range("V1").Value > Range("AD1").Value And Range("V1").Value < Range("AC1").Value And Range("V4").Value > 200 Then
             Range("Z1:Z1000").Value = Range("Y1:Y1000").Value
             Range("AE1:AE1000").Value = Range("AD1:AD1000").Value
             Range("AD1:AD1000").ClearContents
             Range("Y1:Y1000").ClearContents
             Range("AD1:AD10").Value = Range("V1:V10").Value
             Range("Y1:Y10").Value = Range("U1:U10").Value
             End If
     
    Next 'VarS '(kS)
    Next 'VarR '(kR)
    Next 'VarQ '(kQ)
    Next 'VarP '(kP)
    Next 'VarO '(kO)
    Next 'L
    Next 'K
    Next 'D
    Next 'C
    Next 'B
    Next 'A
     
    heure = (Timer - Deb) \ 3600
    minute = ((Timer - Deb) - heure * 3600) \ 60
    seconde = (Timer - Deb) - (heure * 3600) - minute * 60
    Range("S1") = heure & " : " & minute & ":" & seconde
           ActiveWorkbook.Save
                 Application.ScreenUpdating = True
    End Sub

  5. #5
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux déjà placer en début de programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationManual
    Et en fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationAutomatic
    Cela va déjà améliorer sensiblement la vitesse.
    Pour le reste il y a certainement d'autres choses à améliorer, comme l'utilisation de tableaux mais il faut reconnaître qu'il y a plus agréable à faire que de lire ce code.
    Je te recommande aussi de déclarer toutes tes variables et type les le plus judicieusement possible. Cela prendra moins de place en mémoire.
    Place en tête de module l'instruction Option Explicit et le compilateur te signalera les variables non déclarées.
    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

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Bonsoir,
    Oui tu as beaucoup trop de boucles (et de variables) que nécessaire.
    Quand tu écris :
    VarO = Split("* - + /")
    ça suffit : VarO contient les quatres opérateurs. "*", "-", "+", "/"
    Avec :
    VarC = Split("< >")
    VarC contient les comparateur "<" et ">"
    Cette autre macro peut être plus simple te montrera comment les "invoquer" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    VarO = Split("* - + /")
    For kO = 0 To 3
    MsgBox "VarO = " & VarO(kO)
    Next
     
    VarC = Split("< >")
    For kc = 0 To 1
    MsgBox "VarC = " & VarC(kc)
    Next
    End Sub
    Pour résumer à chaque tour de la première boucle For...
    varO(0) = "*"
    varO(1) = "-"
    varO(2) = "+"
    varO(3) = "/"

    Et à chaque tour de la deuxième boucle For...
    varC(0) = "<"
    varC(1) = ">"

    A toi de jouer habilement avec les indices (kO, kc) pour utiliser le signe qui convient.
    A+

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

Discussions similaires

  1. opérateurs arithmétiques / conversions
    Par micamic dans le forum VHDL
    Réponses: 1
    Dernier message: 09/05/2013, 21h22
  2. Utilisation d'opérateurs arithmétiques en variable
    Par delphi_jb dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/08/2012, 03h10
  3. Verifie que le texte entré comporte uniquement des chiffres et des opérateurs arithmétiques
    Par doof dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 14/02/2011, 19h01
  4. Réponses: 3
    Dernier message: 02/07/2007, 17h32
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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