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 Submerci 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 SubCordialement.
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,