Rapport de message :*
 

Re: feuille de métré

Titre du sujet : Re: feuille de métré
par Guy le 08/01/2010 15:59:15

Bonjour Celysi,

Tout d'abord je dois dire que tes questions sont tout à fait pertinentes. Je tente d'y répondre dans l'ordre.

1 - Le bout de code

   Case 2
      ' $E11*($F11-$H11-$J11-$L11)
      For I = 0 To 3
        Par = Par - Cells(Index, (2 * I) + 6)
      Next
     
      F = Cells(Index, 5) * Par


    Est effectivement erroné et aurait dû s'écrire

   Case 2
      ' $E11*($F11-$H11-$J11-$L11)
      Par = Cells(Index, 6) ' Correspond à la colonne F
      For I = 1 To 3 ' Soustrait de F les valeurs en H, J et L
        Par = Par - Cells(Index, (2 * I) + 6)
      Next
     
      F = Cells(Index, 5) * Par


2-  Citation :
Pour cette formule je suis confronté au problème que si ma dernière et avant dernière valeur n' est pas <> de 0 j' ai une résultat nul

    Or, au vu de la formule que tu présentes il semble que tu veuilles ne pas inclure la valeurs en L si celle-ci est zéro puis en J si celle-là est zéro.
    Cherches-tu plutôt à exclure du calcul les valeurs zéro quelque soit la colonne J ou L?
    Question en suspend, pour l'heure la formule que tu fournis
SI($L11<>0;$E11*$F11*$H11*$J11*$L11;si($J11<>0;$E11*$F11*$H11*$J11;$E11*$F11*$H11))
   donne le pseudo-code :

   SI_00 $L11<>0 ALORS
      $E11*$F11*$H11*$J11*$L11
    SINON_00
      SI_01 $J11<>0 ALORS
        $E11*$F11*$H11*$J11
      SINON_01
        $E11*$F11*$H11
      FIN_SI_01
    FIN_SI_00

    Qui donne en VBA :
   
If Cells(Index, 12) <> 0 Then
 
  For I = 0 To 3
 
    Par = Par * Cells(Index, (2 * I) + 6) ' Produit F * H * J * L
 
  Next
 
  F = Cells(Index, 5) * Par ' Produit E * F * H * J * L
 
ElseIf Cells(Index, 10) <> 0 Then

  For I = 0 To 2
 
    Par = Par * Cells(Index, (2 * I) + 6) ' Produit F * H * J
 
  Next
 
  F = Cells(Index, 5) * Par ' Produit E * F * H * J
 
Else

  For I = 0 To 1
 
    Par = Par * Cells(Index, (2 * I) + 6) ' Produit F * H
 
  Next
 
  F = Cells(Index, 5) * Par ' Produit E * F * H

End If
 
   Mais dans ce cas si la colonne F est non zéro et que la colonne J est zéro le résultat sera zéro. Est-ce ce que tu souhaites?

3- Citation :
A quoi fait référence Op?

    Op est un argument de la fonction F(). Voir le commentaire dans le code.

4- Citation :
Quand est ce que dans le code il est noté que quand j' écris un + dans la colonne 2 c' est Case 1 qui doit calculer?

    Voir dans le code le commentaire suivant :
       
' No.d 'opération à effectuer.
' La chaîne constante définie au niveau du module :
' Private Const OPERATIONS As String = "+-x:"
' porte les quatre opérations autorisées.
' La fonction InStr() retourne la position du caractère
' de l'opération à effectuer. C'est cette position qui
' détermine l'action à poser dans la fonction F()
  Operation = InStr(OPERATIONS, Cells(NoLigneAppelante, 2))
 

Voilà.

J'ai modifié le code dans le classeur joint. Teste-le et modifie-le à l'avenant.

Cordialement,

Guy