Sum ne fonctionne pas ?
Bonjour,
J'ai besoin d'aide, je souhaite faire la somme de plusieurs cellules en utilisant l'outil .Sum mais je n'arrive pas à le faire fonctionner... Après plusieurs test et de longues recherches, je ne trouve pas la source de mon problème. VBA Semble bel et bien reconnaitre ma ligne pas ma variable reste à 0.
Voici le code qui bloque :
checksum = Application.WorksheetFunction.sum(Range("G2:G20"))
MsgBox (checksum)Et ma macro entière :
Function ifExist(Search) As Boolean
Dim e As Range
Set e = Feuil9.Cells.Find(What:=Search, LookIn:=xlValues, LookAt:=xlPart)
ifExist = (Not e Is Nothing)
End Function
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Sub Main_Stripe()
'
' Main_Stripe Macro
'
'
Dim i&, i2&, order_id&, order_id2$, t, var, main
Dim d, d2, listCountry, net, sum, checksum
i = 2
main = "Ventes 2022"
'Check every lines")
Do Until IsEmpty(Cells(i, 1)) = True
Sheets("Stripe Opérations").Select
MsgBox ("Attribution de toutes les variables")
d = Cells(i, 8).Value2
d = Format(d, "mm/dd/yyyy")
d2 = CDate(Feuil9.Cells(2, 1).Value2)
d2 = Format(d2, "mm/dd/yyyy")
order_id = Cells(i, 4).Value
order_id2 = Cells(i, 5).Value
listCountry = Array( _
"AD", "AL", "AM", "AT", "AX", _
"AZ", "BA", "BE", "BG", "BY", _
"CH", "CY", "CZ", "DE", "DK", _
"EE", "ES", "FI", "FO", "FR", _
"GB", "GE", "GG", "GI", "GR", _
"HR", "HU", "IE", "IM", "IS", _
"IT", "JE", "KZ", "LI", "LT", _
"LU", "LV", "MC", "MD", "ME", _
"MK", "MT", "NL", "NO", "PL", _
"PT", "RO", "RS", "RU", "SE", _
"SI", "SJ", "SK", "SM", "TR", _
"UA", "VA" _
)
'MsgBox (ifExist(order_id2) & " | " & order_id2)
'MsgBox (Format(d, "yyyy") & Format(d2, "yyyy"))
'Vérifie que la ligne n'existe pas déjà dans 'Vente 2022'
'Si = False alors la ligne N'EXISTE PAS, sinon MsgBox
If ifExist(order_id2) = False And Format(d, "yyyy") = Format(d2, "yyyy") And ifExist(order_id) = True Then
'MsgBox ("THEN initiated")
'Check type to be 'Charge' - " & Cells(i, 16).Value)
If Cells(i, 16).Value = "charge" Then
MsgBox ("Case 'Charge' selected")
MsgBox ("Commande inexistante : " & order_id)
End If
'Check type to be 'Refund' - " & Cells(i, 16).Value)
If Cells(i, 16).Value = "refund" Then
MsgBox ("Case 'Refund' selected")
MsgBox ("d " & d)
MsgBox ("order_id " & order_id)
MsgBox ("order_id2 " & order_id2)
'Change de Sheet")
Sheets(main).Select
'Filtre par la date du Refund")
ActiveSheet.Range("$A$1:$AB$12569").AutoFilter Field:=1, Criteria1:=Array( _
"="), Operator:=xlFilterValues, Criteria2:=Array(2, d)
Cells(1, 1).Select
'Insert une nouvelle ligne à la fin")
Selection.End(xlDown).Offset(1, 0).Select
Selection.EntireRow.Insert
'Récupère le numéro de la ligne créée")
i2 = ActiveCell.Row
'Supprime le filtre")
ActiveSheet.Range("$A$1:$AB$12568").AutoFilter Field:=1
'Cherche la case avec le n° de commande")
Cells.Find(What:=order_id, LookIn:=xlValues, LookAt:=xlPart).Activate
'Copie/Colle la ligne trouvée dans celle fraîchement créée")
ActiveCell.EntireRow.Copy
Selection.End(xlDown).Offset(1, 0).EntireRow.PasteSpecial xlPasteValues
'Coloration de la ligne fraîchement créée pour ajouter un peu de joie dans nos coeurs")
Cells(i2, 1).EntireRow.Interior.ColorIndex = 17
'Date (A)")
Cells(i2, 1).Value2 = CDate(Format(d, "dd/mm/yyyy"))
'Numéro de commande (B)
Cells(i2, 2).Value = order_id & "bis"
'Total HT (I)
Sheets("Stripe").Select
var = Cells(i, 13).Value
Sheets(main).Select
Cells(i2, 9).Value = var / 1.2 ' I = TTC(I) / 1.2
'Total TVA (J)
Cells(i2, 10).Value = var * (1 / 6) ' J = I * 1/6
'Total TTC (K)
Cells(i2, 11).Value = var ' K = TTC(I)
'Expéditions (L->N)
Cells(i2, 12).Value = 0 ' L = 0
Cells(i2, 13).Value = 0 ' M = 0
Cells(i2, 14).Value = 0 ' N = 0
'Total HT (O)
Cells(i2, 15).Value = var / 1.2 ' O = I
'Total TTC (P)
Cells(i2, 16).Value = var ' P = TTC(I)
'Commissions (Q->S)
Cells(i2, 17).Value = 0 ' Q = 0
Cells(i2, 18).Value = 0 ' R = 0
Cells(i2, 19).Value = 0 ' S = 0
'Montant versé après commissions (T)
Cells(i2, 20).Value = var ' T = TTC(I)
'Date du virement(G)
var = Feuil14.Cells(i, 2).Value
Cells(i2, 7).Value = var ' G = Date(B)
'Montant du virement (H)
var = Feuil14.Cells(i, 6).Value
Cells(i2, 8).Value = var ' H = F
End If
MsgBox ("Commande non trouvée sur 'Ventes 2022' : " & order_id & " | Possible si en début d'année, si achat de l'an dernier est remboursé cette année)")
Sheets("Stripe Opérations").Select
'Vérifie si le pays d'achat n'appartient pas à l'Europe")
If IsInArray(Feuil14.Cells(i, 30).Value, listCountry) = False Then
MsgBox ("Payement hors Europe identifié " & i)
'Applique la commission spéciale au pays
Cells(i2, 17).Value = (Cells(i2, 16).Value * 0.029) + 0.25
End If
'Cherche la ligne avec l'id dans 'Ventes 2022' pour récuperer la valeur net")
Sheets(main).Select
net = Cells.Find(What:=order_id2, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 18).Value
Sheets("Stripe Opérations").Select
'Vérifie si l'écart du virement net est supérieur ou égal à .05€")
If Abs(net - Feuil14.Cells(i, 15)) >= 0.05 Then
'Cherche la cellule net de l'id concerné et la colore en rouge
Cells(i, 1).EntireRow.Interior.ColorIndex = 46
End If
End If
'Fait la somme des opérations
sum = sum + CInt(Feuil14.Cells(i, 15).Value)
i = i + 1
Loop
'Fait la somme de tout les virements")
checksum = Application.WorksheetFunction.sum(Range("G2:G20"))
MsgBox (checksum)
'Vérifie si la différence entre les virements et les reçus est inférieure ou égale à 1.5€")
MsgBox ("Sum : " & sum & " - Checksum : " & checksum)
If Abs(sum - checksum) >= 1.5 Then
MsgBox ("Erreur de checksum, la somme des virement reçue est différent du montant annoncé : " + sum + " =/= " + checksum)
Else
MsgBox ("La sum et checksum semblent être bon : " & sum & " <> " & checksum)
End If
End SubMerci d'avance !
Bonjour, indiquez le nom de la feuille concernée par l'addition car dans le code on ne sait plus vraiment quelle est la feuille active ?
Dim checksum As Long
checksum = Application.WorksheetFunction.Sum(Worksheets("nomfeuille pour la somme").Range("G2:G20"))
MsgBox (checksum)Merci de votre réponse,
Le nom de la feuille c'est "Stripe Virements".
Mais Malgré ça cela ne semble pas fonctionner, j'ai bien utilisé votre code toutefois, cela me renvoie toujours 0.
checksum = Application.WorksheetFunction.sum(Worksheets("Stripe Virements").Range("G2:G20"))
MsgBox (checksum)Merci d'avance :)
Il faudrait que l'on puisse avoir un échantillon de la colonne G ; le contenu est bien reconnu comme nombre ?
Oui, je viens de vérifier, et ils sont bien interprété comme nombres.
Voici un échantillion :
Non justement le contenu de la colonne G n'est pas interprété comme nombre. Pour preuve si vous agrandissez la
colonne G vous verrez que tout le texte est aligné sur la gauche ... ce qui indique qu'il n'est pas lu comme nombre
sinon ce serait aligné à droite.
Sélectionner votre colonne et utilisez l'option "données convertir" il seront de nouveau lu comme nombres. et votre macro
devrait faire l'addition.
Je comprends pas,
le 'Données > Convertir' ma laisse seulement changer le délimiteur (csv à xml), je vois pas où passer du texte au nombre...
Merci d'avance
Votre séparateur des unités dans votre version excel est le point ou la virgule ?
C'est la virgule normalement
Une virgule, Voilà pourquoi l'option convertir ne fonctionne pas toute seule.
-Selectionner la colonne G
-Option Convertir
-Dans les fenêtres qui s'ouvre faites suivant jusqu'a l'étape 3
-Laissez sur standard mais cliquez sur le bouton avancé et séléctionner le Point comme "séparteur décimal"
Une fois terminée excel devrait avoir remplacé les points par des virgules et les nombres devraient être sur la droite de la colonne.
Oh c'est magique,
Cela fonctionne parfaitement désormais !
Merci infiniment !