Fonction Application.WorksheetFunction.Sum
Bonsoir,
Je voudrais adapter la formule suivante en code vba, à savoir :
=M3*1,5+N3+O3*2/3J'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 / 3Amicalement
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 SubPar 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.