Fonction Application.WorksheetFunction.Sum

Bonsoir,

Je voudrais adapter la formule suivante en code vba, à savoir :

=M3*1,5+N3+O3*2/3

J'ai donc écrit la ligne suivante :

Cells(i, 16) = Application.WorksheetFunction.Sum((Cells(i, 13) * 1.5) + Cells(i, 14) + (Cells(i, 15) * 2 / 3), 0)

Mais cela ne fonctionne pas. J'ai pu l'utiliser pour une addition simple sans problème mais là je ne sais pas d'où vient l'erreur.

Je vous remercie par avance pour votre aide.

Bonsoir et bienvenue

Cells(i, 16) = Cells(i, 13) * 1,5 + Cells(i, 14) + Cells(i, 15) * 2 / 3

Amicalement

Nad

Bonsoir Nad, le forum,

Je te remercie pour ta réponse mais malheureusement ça n'a pas l'air de fonctionner.

J'ai le message suivant :

erreur de compilation "attendu : fin d’instruction" et le curseur se positionne sur la virgule du chiffre : 1,5

Voici le code intégral de ma feuille :

Option Explicit
Dim Id&, i&, j&
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayAlerts = 0: Application.EnableEvents = 0
i = Target.Row
'Récupération de l'Identifiant de la ligne modifiée
Id = Cells(i, 1)
  'On met en majuscule ou en nom propre la colonne C
   Cells(i, 3) = StrConv(Cells(i, 3), 1)

  'On cherche l'Id dans la colonne A de Base
  'Si on le trouve
  If Not IsError(Application.Match(Id, Sheets("Base").Columns(1), 0)) Then
    'On copie les données de la ligne modifiée
    j = Application.Match(Id, Sheets("Base").Columns(1), 0)
  Cells(i, 16) = Cells(i, 13) * 1,5 + Cells(i, 14) + Cells(i, 15) * 2 / 3
  Sheets("Base").Cells(j, 17).Resize(, 11).Value = Cells(i, 17).Resize(, 11).Value
 Sheets("Base").Cells(j, 28) = Cells(i, 28)
Cells(i, 29) = Application.WorksheetFunction.Sum(Cells(i, 16) - Cells(i, 28), 0)
 Sheets("Base").Cells(j, 30) = Cells(i, 30)
 Sheets("Base").Cells(j, 32) = Cells(i, 32)
 Sheets("Base").Cells(j, 34) = Cells(i, 34)
 Sheets("Base").Cells(j, 36) = Cells(i, 36)
 Sheets("Base").Cells(j, 38) = Cells(i, 38)
 Sheets("Base").Cells(j, 40) = Cells(i, 40)
 Sheets("Base").Cells(j, 42) = Cells(i, 42)
 Sheets("Base").Cells(j, 44) = Cells(i, 44)
 Sheets("Base").Cells(j, 46) = Cells(i, 46)
 Sheets("Base").Cells(j, 48) = Cells(i, 48)
   'Si l'Id n'est pas trouvé
  Else
    'Si la colonne est C (Nom) et l'Id est vide
    If Target.Column = 3 And Cells(i, 1) = "" Then
      With Sheets("Base")
        'Dans la Base on crée un nouvel Identifiant
        j = .[A65536].End(xlUp)(2).Row
        'Si j = 3, il n'y a pas encore de stagiaire donc on crée le nouveau N°
        If j = 3 Then
          .Cells(j, 1) = 1
          Else
          .Cells(j, 1) = .Cells(j - 1, 1) + 1
        End If
        'On copie le nouvel Identifiant dans "BD Global"
        Cells(i, 1) = .Cells(j, 1)
        'On copie le nouveau nom dans Base
        .Cells(j, 3) = Cells(i, 3)
      End With
    End If
    End If
'On trie par rapport au Nom puis Prénom
Range("A3:AW" & [C65536].End(xlUp).Row).Sort [C3], xlAscending, [D3], , xlAscending, , , xlNo
Application.DisplayAlerts = -1: Application.EnableEvents = -1
End Sub
Private Sub Worksheet_Activate()
Application.DisplayAlerts = 0: Application.EnableEvents = 0
'A l'activation de la feuille
  'On cherche la dernière ligne pleine pour supprimer les données
  j = [A65536].End(xlUp).Row
  'Pour toutes les lignes de la feuille activée
  For i = 3 To [A65536].End(xlUp).Row
  Id = Cells(i, 1)
  With Sheets("Base")
    'Si Id est trouvé dans la colonne A de la feuille Base
    If Not IsError(Application.Match(Id, .Columns(1), 0)) Then
      j = Application.Match(Id, .Columns(1), 0)
      'On copie les données de la Base dans la feuille "Général"
      Cells(i, 1).Resize(, 15).Value = .Cells(j, 1).Resize(, 15).Value
  Cells(i, 16) = Cells(i, 13) * 1,5 + Cells(i, 14) + Cells(i, 15) * 2 / 3
      Cells(i, 17).Resize(, 12).Value = .Cells(j, 17).Resize(, 12).Value
  Cells(i, 29) = Application.WorksheetFunction.Sum(Cells(i, 16) - Cells(i, 28), 0)
        Cells(i, 30).Resize(, 21).Value = .Cells(j, 30).Resize(, 21).Value
    End If
  End With
  Next
'On trie par rapport au Nom puis Prénom
Range("A3:AW" & [C65536].End(xlUp).Row).Sort [C3], xlAscending, [D3], , xlAscending, , , xlNo

Application.DisplayAlerts = -1: Application.EnableEvents = -1
Application.Calculate
End Sub
Sub Relance()
Application.DisplayAlerts = -1: Application.EnableEvents = -1
End Sub

Par contre la ligne qui figure dans le code :

Cells(i, 29) = Application.WorksheetFunction.Sum(Cells(i, 16) - Cells(i, 28), 0)

où j'utilise la fonction Application.WorksheetFunction.Sum fonctionne très biien.

J'ai retenté en mettant cette ligne :

Cells(i, 16) = Application.WorksheetFunction.Sum(Cells(i, 13) * 1, 5 + Cells(i, 15) * 2 / 3, 0)

mais j'ai le message suivant "erreur d'execution 13"

Merci de ton aide.

Bonjour,

J'ai enfin trouvé la solution et je vous la donne cela peut intéresser certaines personnes :

[P3:P350].FormulaR1C1 = "=RC[-3]*1.5+RC[-2]+RC[-1]*2/3"

Bonne journée.

Rechercher des sujets similaires à "fonction application worksheetfunction sum"