Opérations mathématique sous VBA

Fermé
Linkmojo Messages postés 172 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 21 octobre 2023 - Modifié par Linkmojo le 25/07/2014 à 19:27
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 - 28 juil. 2014 à 13:42
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

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
26 juil. 2014 à 14:17
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 26/07/2014 à 23:17
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 27/07/2014 à 13:23
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
28 juil. 2014 à 12:19
Notre ami Linkmojo a changé de Pseudo et s'appele "Attilaa" sur developez.com LE 26/7, donc avant que Patrice lui réponde et provoque son courroux :oD
https://www.developpez.net/forums/d1459946/logiciels/microsoft-office/excel/macros-vba-excel/operations-mathematiques-sous-vba/
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
28 juil. 2014 à 13:42
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