Opérations mathématique sous VBA

Bonjour à tous,

Merci pour les réponses aux précédentes questions je touche au but mais je rencontre une dernière difficulté.

Je dois faire des opérations mathématiques entre plusieurs variables (2 ou 3), mais l'opérateur mathématique peut être soit "+" soit "- soit "*" ou soit "/".

J'aimerai savoir comment programmer cela dans vba car mis à part faire un select case avec une dizaine de possibilité, ce qui ne serait pas très propre niveau programmation, je ne vois pas comment faire.

J'ai essayé de faire :

Range("Celluled'arrivée").value = "=" & Range("Valeur1").value & opérateur1 & Range("Valeur2").value

mais excel me mets une erreur.

Et quand je mets:

Range("Valeur1").value & opérateur1 & Range("Valeur2").value

J'ai dans la cellule d'arrivée les deux valeurs avec un "+" au milieu mais l'opération mathématique ne se fait pas (vu qu'il n'y a pas un égal au début)

Edit : l'opérateur est pour l'instant dim opérateur as "string" je pense que s'il existe un dim répertoriant les différentes formules mathématiques je suis sauvé mais je ne l'ai pas trouvé.

Merci d'avance.

4 réponses

  1. Bonjour à tous les deux

    Restons Zen, Patrice t'a simplement donné un très bon conseil

    Un début de réponse peut être à ton problème

    Public Function Calcul(plage As Range)
    Dim cel As Range, f As String
    f = ""
    For Each cel In plage
    f = f & cel.Value
    Next cel
    Calcul = Application.Evaluate(f)
    End Function

    Bon après midi

    Cdlmnt
    0
    1. Contributeur
      bonjour

      en lisant "evaluate" écrit par ccm81 (avec un salut amical et respectueux), je me suis dit que...

      pour calculer par ex (B2*B3 )/B4 +b5

      calcul = Evaluate("(" & "B2" & "*" & "B3" & ")" & "/" & "B4" & "+" & "B5")
      et en utilisant des variables
      plus = "+"
      moins = "-"
      multi = "*"
      divis = "/"
      calcul = Evaluate("(" & "B2" & multi & "B3" & ")" & divis & "B4" & plus & "B5")

      maintenant on peut regrouper ces 4 variables dans une variable "Type"
      en amont des sub machin()
      type operateur 
      plus as string*1
      Moins as string*1
      Multi as string*1
      Divis as string*1
      end type

      Tu peux ajouter d'autres opérateurs : puissance, racine, log....
      sub machin()
      Dim XY as operateur

      xy_plus="+"
      xy_moins="-"
      ...etc

      calcul=Evaluate("(" & "B2" & xy.multi & ..... la flemme

      mais quel le but de ta demande car ça me parait un peu bizarre ou mal expliqué (sans que je te prenne de haut...Aie!, non, pas sur la tête, Aie!) ;o)

      et un Bonjour également amical et respectueux à Patrice, toujours de bon conseil ;o)
      Michel
      0
      1. Bonjour Linkmojo,

        Milles excuses pour le temps que j'ai passé à te faire perdre le tien et sans rancune ...

        Merci à ccm81 et à Michel_m pour leur soutien (amitiés à vous deux) et surtout pour avoir poursuivi ce fil pendant mon absence.

        Vos solutions sont bien plus élaborées que celle que j'aurais proposé et qui a pu me faire croire, à tort, que Linkmojo ne possédait pas les bases élémentaires du VBA, à savoir :

        Tout simplement remplacer :
        Range("Celluled_arrivée").Value = "=" & ....
        .
        Par :
        Range("Celluled_arrivée").Formula = "=" & ...
        .

        Éventuellement suivi de :
        Range("Celluled_arrivée").Value= Range("Celluled_arrivée").Value
        .
        pour remplacer la formule par sa valeur.

        Patrice
        0
        1. Salut Michel,

          Content d'apprendre que le sujet continue à intéresser Linkmojo-Attilaa!
          Et là j'hésite entre :-) et :-(

          Bon après midi à toi et à Patrice
          0