Opérations mathématique sous VBA

Linkmojo Messages postés 175 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 11033 Statut Membre -
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. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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