Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Lone-wolf

XLDnaute Barbatruc
Bonjour à Tous,

comment multiplier et diviser une plage de celulles avec des fonctions personnalisées?

Voir fichier joint.



A+ :cool:
 

Pièces jointes

  • Classeur1.xls
    43 KB · Affichages: 140
  • Classeur1.xls
    43 KB · Affichages: 146
  • Classeur1.xls
    43 KB · Affichages: 138

Staple1600

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour loup solitaire

Pourquoi ne pas regrouper en une seule fonction avec paramètres ?

VB:
Function operation(Otype$, Plage As Variant, valeur As Double)
With Application
.Volatile
    Select Case Otype
        Case Is = "A"
        operation = .Sum(Plage) + valeur
        Case Is = "S"
        operation = .Sum(Plage) - valeur
        Case Is = "M"
        operation = .Sum(Plage) * valeur
        Case Is = "D"
        operation = .Sum(Plage) / valeur
        Case Else
        End
        End Select
End With
End Function
VB:
Sub Test()
[A1:A3] = 12
MsgBox operation("A", Range("A1:A3"), 3)
MsgBox operation("S", Range("A1:A3"), 4)
MsgBox operation("M", Range("A1:A3"), 5)
MsgBox operation("D", Range("A1:A3"), 6)
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour Stapple,

c'est que, n'ayant jamais créé ces fonctions (je débute :eek:), je ne savais pas comment compiler celles-ci.


Merci beaucoup de m'avoir éclairer. ;)



A+ :cool:
 

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Voilà, je viens de faire un test avec ce code

Code:
Option Explicit
Function DIVISION(valeur As Variant, Plage As Variant)
Dim Ligne As Long
Application.Volatile

Ligne = [G2] \ [G3] \ [G4] \ [G5]
Plage = Ligne

On Error Resume Next
DIVISION = Application.Sum(Ligne)
End Function

Et j'obtient la somme correcte. Maintenant, il faudrait pouvoir concenter les celulles sur une plage plus grande. Comment faire?



A+ :cool:
 

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Je remet le fichier avec quelques petites modifications.

Suppression de la celulle G5.

Ajouter SIERREUR dans les formules de multiplication et division, pour éviter d'afficher #VALEUR! si on efface les celulles.


A+ :cool:
 

Pièces jointes

  • Classeur1.V2.xls
    48 KB · Affichages: 70

Staple1600

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour


oType$ = Type d'opération avec comme valeurs : A S M D

Addition Soustraction Multiplication Division

J'aurai pu choisir un autre nom

le $ c'est un raccourci pour : oType As String
 

job75

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour Lone-wolf, salut Jean-Marie :)

On a du mal a sortir de ses schémas de pensée, pas vrai ?

Pourtant la suggestion de Staple d'utiliser une seule fonction est excellente !

Alors une autre du même genre qui va vous obliger à percuter un chouilla :

Code:
Function Operation(Otype$, Plage, valeur#)
Dim aux$, i As Byte
aux = "A+S-M*D/"
i = InStr(aux, UCase(Left(Otype, 1)))
Operation = Evaluate(Application.Sum(Plage) & Mid(aux, i + 1, 1) & valeur)
If IsError(Operation) Then Operation = "" 'facultatif
End Function
Votre fichier avec la fonction dans les cellules colorées.

A+
 

Pièces jointes

  • Operations(1).xls
    36.5 KB · Affichages: 65

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour Job,

Il y à comme un petit problème.

Soustraction: 7 - douze 1 ne peut pas donné comme résultat 5 mais -5

Division: 3/147/3 d'après Google, le résultat est 0,006802etc. J'ai l'impression qu'il fait la somme
de 147+3 = 150 /3=50.

Une autre division: 500/10/5 donne 0.03, résulat correct devrait être 10.


A+ :cool:
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Re Lone-wolf,

Si vous regardez un chouilla l'instruction qui calcule la fonction, vous comprendrez dans quel sens se fait l'opération...

Si vous préférez intervertir les arguments, vous saurez y parvenir, non ?

A+
 

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Désolé mais en ce qui concerne la soustraction, les arguments sont justes.

Pour la division, j'ai mis 147 comme valeur 3 et 3 comme plage, le résultat est incorrect (0.0408etc.).

Je ne sais pas si je me trompe... exemples en Formule simple.

=SOMME("A1"-"A2") ou =SOMME("A1"*"A2") ou =SOMME("A1"/"A2") et pareil sans SOMME =I4+I5
On y introduit bien les différents signes.

Dans la Plage il n'y en a pas, est-ce pour celà qu'il ne calcul pas correctement?



A+ :cool:
 

Lone-wolf

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Je viens de penser à ceci.

En introduisant dans le code (Un Exemple)

Pour chaque celulles dans la plage, diviser ou multiplier chaque celulles.
for each cel in range etc. ...

Est-ce possible de faire ça?


A+ :cool:
 

job75

XLDnaute Barbatruc
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Re,

Relisant le post #10 je crois comprendre ceci :

- vous voulez insérer le même opérateur entre les éléments de la plage

- donc dans la fonction l'argument valeur n'a plus lieu d'être.

Là je reconnais que le code n'est pas très facile à comprendre :

Code:
Function Operation(Otype$, Plage)
Dim aux$, i As Byte, operateur$
Plage = Plage
If UBound(Plage) > 1 Then Plage = Application.Transpose(Plage)
aux = "A+S-M*D/"
i = InStr(aux, UCase(Left(Otype, 1)))
operateur = Mid(aux, i + 1, 1)
Operation = Evaluate(Join(Plage, operateur))
If IsError(Operation) Then Operation = "" 'facultatif
End Function
Voir l'aide VBA pour la fonction Join.

Elle doit s'appliquer sur un tableau à une dimension (une ligne).

Fichier (2).

Nota : il y avait plein de formats personnalisés dans votre fichier... Je les ai virés.

A+
 

Pièces jointes

  • Operations(2).xls
    37 KB · Affichages: 65

Statistiques des forums

Discussions
312 198
Messages
2 086 149
Membres
103 132
dernier inscrit
hedfahmi