Excel : Formule imbriqué.

Excel : Formule imbriqué. - Logiciels - Windows & Software

Marsh Posté le 25-08-2006 à 11:29:29    

Bonjour à tous. Voila, je suis en train de travailler sur un tableau Excel très simple. Mais je bloque sur l'optimisation d'une formule.
 
La voici : =SOMME(PRODUIT(A3;D3);PRODUIT(A4;D4);PRODUIT(A5;D5))
 
Le probleme c'est que je dois faire la somme d'une centaine de "PRODUIT(Ax;Dx)". Voila, comment pourais-je donner le X de départ et le X d'arrivé. Merci a tous.

Reply

Marsh Posté le 25-08-2006 à 11:29:29   

Reply

Marsh Posté le 25-08-2006 à 11:57:51    

Une solution peut consister à créer une fonction personnalisée permettant de faire ce calcul. Ouvrir l'éditeur de macro, dans le menu outils / macro / visual basic editor, une fois l'éditeur lancé dans l'aborescence en haut à gauche faire un clic droit sur le classeur puis choisir insertion puis module. Ouvrir le module et coller le code suivant :
 

Code :
  1. Function MonProduit(iDeb As Integer, iFin As Integer)
  2.    Dim iLoop As Integer
  3.    Dim lSomme As Long
  4.    lSomme = 0
  5.    For iLoop = iDeb To iFin
  6.       lSomme = lSomme + (Range("A" & iLoop).Value * Range("D" & iLoop).Value)
  7.    Next
  8.    MonProduit = lSomme
  9. End Function


 
Une fois cela fait retourner dans la feuille de calcul et mettre la formule du type :
 
=MonProduit(1;100)
 
Il y a peut être plus simple mais ca fonctionne.

Reply

Marsh Posté le 25-08-2006 à 12:12:34    

Ta fonction fonctionne, et je t'en remercie. Maintenant, comment serait-il possible que le champ ce mette a jour automatiquement des la modifiaction d'un nombre de la cellule.
 
Merci pour tout.


Message édité par jcdc le 25-08-2006 à 12:13:36
Reply

Marsh Posté le 25-08-2006 à 12:38:07    

Une solution mais peu satisfaisante il doit y avoir mieux... toujours dans l'éditeur visual basic ajouter à la feuille concernée le code suivant :
 

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target as Excel.Range)
  2.    If Target.Column = 1 Or Target.Column = 2 Then
  3.       Range("D1" ).Formula = Range("D1" ).Formula
  4.    End If
  5. End Sub


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed