Dépassement de capacité erreur 6

Bonjour,

je suis débutant en VBA, je vais passer une formation en septembre, mais je souhaite avoir le plus de connaissance avant cette formation. Donc désolé si mon code n'est pas propre.

j'ai un problème dont j'ai longuement cherché la solution sur la toile sans sucés, toutes les réponses n'ont pas l'air de correspondent à mon problème, où j'ai raté un épisode.

j'ai un dépassement de capacité erreur 6, pourtant j'ai fait mes déclaration en Double !

Voici mon code, est ce que quelqu'un peut m'aider ?

l'idée est d'afficher le coût moyen pondéré d'une ventilation vente en fonction des stocks achats utiliser pour celle ci.

soit la somme des montants achats qui correspondent a cette vente

divisé par

la somme des quantités achats qui correspondent a cette vente

=

un résultat unitaire par ligne

Sub cmpvtlfourn() ' ok, si ça ne fonctionne pas c'est à cause des #N/A afficher
    Dim mnt As Double
    Dim qte As Double
    Dim resultat As Double
    Range("$O:$O").Clear
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For lien = 1 To Range("A1").End(xlDown).Row
    mnt = Application.WorksheetFunction.SumIf(Range("A:N"), Cells(lien, 1), Range("N:N"))
    qte = Application.WorksheetFunction.SumIf(Range("A:M"), Cells(lien, 1), Range("M:M"))

    resultat = mnt / qte

    Cells(lien, 15) = resultat
    Next lien

End Sub

merci de votre aide,

cdt,

Bonjour,

Je te signale que tu fais état d'une erreur d'exécution sans indiquer sur quelle ligne elle se produit !

Il apparaît par ailleurs que la syntaxe de la fonction SumIf n'est pas correcte !

Tu peux t'en assurer en la tapant la formule dans une cellule... et en consultant l'aide d'Excel sur la fonction.

Cordialement.

Bonjour,

L'erreur se situe au niveau de la ligne SumIf, si j'utilise la première ligne Sumif seul, ça fonctionne, par contre si je tente de la diviser par le second sumif là ça ne passe plus,

Je ne comprends pas en quoi la syntaxe est fausse ? (plage, critère, somme plage)

merci beaucoup de ce retour rapide,

cdt,

Bonjour,

Comme on n'a pas vu ton fichier...

Il ne s'agit pas, c'est vrai, de syntaxe qui serait fausse, mais elle apparaît un peu inadéquate ou approximative... Ta plage critère représente 14 colonnes entières dans le premier calcul et 13 dans le second. Il n'est en effet pas indispensable que la plage-somme soit de même taille que la plage-critère, cependant la fonction aligne d'office la taille de la plage-somme sur la plage-critère à partir de la cellule supérieure gauche de la plage-somme.

La plage-somme couvre donc les colonnes entières de N à AA dans le premier calcul et M à Y dans le second. Cette extension, qui ne paraît pas très rationnelle, peut avoir des effets non maîtrisés...

En outre, les calculs sur des colonnes entières sont à éviter quand on peut faire autrement.

Cordialement.

Re ,

j'ai tenté d'apporter des améliorations comme vous l'avez évoqué, encore une fois je débute donc c'est pas simple,..... je fais ce que je peux .

je m'étais résigné à faire apparaitre les résultats des 2 sommes pour ensuite les diviser, mais même comme ça, ça ne fonctionne pas ! je ne vois pas d’où cela peu venir, quoi que je fasse dépassement de capacité pour la division des 2 sommes.si

j'ai ajouté le fichier sur lequel étant débutant, j'ai tenté de débloquer une a une les actions que je veux faire pour ensuite les regrouper, cela me permet de les tester simplement et indépendamment.

encore merci pour votre aide,

cdt,

Sub cmpvtlfourn() ' ok, si ça ne fonctionne pas c'est à cause des #N/A afficher
    Dim mnt As Double
    Dim qte As Double
    Dim resultat As Double
    Range("$O:$O").Clear
    Range("$P:$P").Clear
    Range("$Q:$Q").Clear
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

        Derlig = Cells.SpecialCells(xlCellTypeLastCell).Row

            For lien = 1 To Derlig

                If Cells(lien, 1).Rows >= Derlig Then

                mnt = Application.WorksheetFunction.SumIf(Range("A:A"), Cells(lien, 1), Range("N:N")) 'somme si montant

                qte = Application.WorksheetFunction.SumIf(Range("A:A"), Cells(lien, 1), Range("M:M")) ' somme si qte

                Cells(lien, 15) = mnt
                Cells(lien, 16) = qte
                Cells(lien, 17) = (Cells(lien, 15)) / (Cells(lien, 16))

                Else

    GoTo fin_de_procédure

    End If
    Next lien
fin_de_procédure:

End Sub

Une proposition :

Sub cmpvtlfourn()
    Dim mnt As Double, qte As Double
    Dim derlig As Integer, lien As Integer, crit As Range
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With ActiveSheet
        .Range("$O:$O").ClearContents
        derlig = .Cells.SpecialCells(xlCellTypeLastCell).Row
        Set crit = .Range("A1").Resize(derlig)
        For lien = 1 To derlig
            mnt = WorksheetFunction.SumIf(crit, .Cells(lien, 1), crit.Offset(, 13)) 'somme si montant
            qte = WorksheetFunction.SumIf(crit, .Cells(lien, 1), crit.Offset(, 12)) ' somme si qte
            If qte > 0 Then .Cells(lien, 15) = mnt / qte
        Next lien
    End With
End Sub

Cordialement.

Merci beaucoup de votre réponse, je regarde ça ce soir où demain et je vous reviens,

Cdt,

Désolé de répondre aussi tard, mais j'ai eu pas mal de taff et j'ai du mettre ceci de coté,

c'est bon ça fonctionne ! j'ai adapté un peu la procédure mais maintenant le résultat s'affiche correctement,

merci pour tout !

cdt,

Rechercher des sujets similaires à "depassement capacite erreur"