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 Sub

Merci 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 !

Rechercher des sujets similaires à "sum fonctionne pas"