Multiplier Diviser plusieurs nombres avec fonctions personnalisées

  • Initiateur de la discussion Initiateur de la discussion Lone-wolf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Re : Multiplier Diviser plusieurs nombres avec fonctions personnalisées

Bonjour Stapple,

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


Merci beaucoup de m'avoir éclairer. 😉



A+ 😎
 
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+ 😎
 
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+ 😎
 

Pièces jointes

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
 
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

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+ 😎
 
Dernière édition:
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+
 
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+ 😎
 
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+ 😎
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
316
  • Question Question
Microsoft 365 Format de nombres
Réponses
21
Affichages
520
  • Question Question
Réponses
28
Affichages
531
Réponses
16
Affichages
159
Réponses
2
Affichages
186
Réponses
13
Affichages
342
Retour