Calcul Variance de prix avec quantité

Anaiiis

XLDnaute Nouveau
Bonjour à tous et à toutes:eek:
Je suis confrontée à un problème que je n'arrive pas à résoudre, et pour lequel jusqu'à présent personne n'a pu me venir en aide:confused:
Voici mon probleme:
J'aimerais calculer la variance des prix unitaires de vente de chaque produit vendu par l'entreprise. Je possède pour cela une base de donnée avec toutes les lignes de facturation effectuées par la l'entreprise. Actuellement la base fait plus de 300.000 lignes, chaque ligne étant une ligne de facturation presentée comme suit:

colonne1: reference du produit
colonne2: Quantité vendue (sur cette ligne de facturation)
colonne3: montant en euros ( pour la quantité de produit vendu)
colonne4: Prix Unitaire du produit pour cette ligne de facturation ( que j'ai calculé: montant/quantité)

cette base est une base importée sur excel et actualisée via une connexion ODBC

j'ai premièrement pensé le faire via un tableau croisé dynamique... or le calcul de la formule de variance d'excel ne permet pas de prendre en compte la colonne quantité.

par exemple si j'avais
1€
1€
2€
2€
2€
var(1,1,2,2,2) est faisable
mais moi j'ai
prix quantité
1€ 2
2€ 3
donc la formule n'est pas applicable et il n'est donc pas possible de le faire directement par un tableau croisé dynamique.

J'ai donc pensé le faire en rajoutant une colonne QuantitéTotale de produit vendu (quelque soit le prix) (grace à un somme.si avec pour critère le code produit), une colonne PrixMoyen par produit( grace à un somme.si qui additione tous les montants pour un meme produit et je divise cette somme par la quantité totale vendue de ce produit)
Grace à ces deux colonnes je serais en mesure d'en creer une troisième qui serait:
(Quantité/QuantitéTotale)*(PrixUnitaire-PrixMoyen)^2

Et là un beau tableau dynamique qui me sommerait cette derniere colonne pour chaque produit me donnerait la fameuse variance que je recherche:D et qui s'actualiserait à chaque actualisation de la base de donnée :eek::eek::eek::eek:

Mais vu la taille de la base mon ordinateur met des heures à effectuer les calculs, heures que je pourrais consacrer à vernir mes ongles... mais ca ne serait pas tres serieux!

Je penses que vu la taille de la base un programme VBA ne serait pas non plus la meilleure solution...

Si quelqu'un arrive à déchiffrer mon explication et avait une idée pour m'aider à calculer ces variances beaucoup plus rapidement je ferais un gros bisou sur son pseudo!!!!:p

(ci-joint une illustration de ma table en très très très réduite:D)
 

Pièces jointes

  • varianceforum.xlsx
    16.8 KB · Affichages: 135
Dernière édition:

Habitude

XLDnaute Accro
Re : Calcul Variance de prix avec quantité

En fait la condition enlève le calcul sur l'élément.
Donc, tu remplace le calcul par une tâche beaucoup plus rapide.

As-tu tester les temps ?

Sans les données difficile à dire mais tu peux remplacer par ceci
Code:
Private Sub CommandButton1_Click()
Dim obj As New ObjetDonnees
For Each cell In Range("A2").Resize(UsedRange.Rows.Count, 1).SpecialCells(xlCellTypeConstants)
    If Trim(CStr(cell)) <> "" And CDbl(cell.Offset(, 1)) <> 0 And CDbl(cell.Offset(, 2)) <> 0 Then obj.Add CStr(cell), CDbl(cell.Offset(, 1)), CDbl(cell.Offset(, 2))
Next cell
obj.CalculVar
With Sheets("Hoja2").Range("A2"): .Resize(UsedRange.Rows.Count, 2).ClearContents: .Resize(obj.Count, 2) = obj.Affichage: End With
End Sub
 

Anaiiis

XLDnaute Nouveau
Re : Calcul Variance de prix avec quantité

ok ok je pensais que la condition était une tache lourde,
je vais essayer de modifier le code avec ce que tu m'as donné.
Cependant avec le fichier excel que tu m'as donné cela ne semble pas fonctionner lorsqu'il y a beaucoup de lignes, j'ai rajouté 100.000lignes pour tester, et cela me m'affiche une erreur, et ca me surligne cette partie:

Private Sub CommandButton1_Click()
Dim obj As New ObjetDonnees
For Each cell In Range("A2").Resize(UsedRange.Rows.Count, 1).SpecialCells(xlCellTypeConstants): obj.Add CStr(cell), CDbl(cell.Offset(, 1)), CDbl(cell.Offset(, 2)): Next cell
obj.CalculVar
With Sheets("Hoja2").Range("A2"): .Resize(UsedRange.Rows.Count, 2).ClearContents: .Resize(obj.Count, 2) = obj.Affichage: End With
End Sub



j'ai essayé de regarder si les variables étaient bien définie et tout a l'air ok... je dois avoir des mèches blondes cachées :eek:
 
Dernière édition:

Anaiiis

XLDnaute Nouveau
Re : Calcul Variance de prix avec quantité

bon beh ca a l'air de fonctionner avec ma base de 300.000lignes, j'en ai la larme à l'oeil :eek:
je vais essayer de voir combien de temps l'opération met exactement afin de te le dire.... mais sincèrement merci, je vais essayer de bien comprendre ton code afin de pouvoir réutiliser la méthode par la suite car c'est incroyablement efficace!!!!
MERCI BEAUCOUP VRAIMENT
 

Habitude

XLDnaute Accro
Re : Calcul Variance de prix avec quantité

Re

UsedRange.row.count est capricieux. Tu peux toujours mettre 1000000 à la place.

Tu as ajouté les conditions en #17 ?

Si tu préfère, envoie ton fichier sur un site hébergeur comme "ci-joint" et donne moi le lien.
 

Anaiiis

XLDnaute Nouveau
Re : Calcul Variance de prix avec quantité

re :)
La condition 17 ne résoud malheureusement pas le probleme, pour ce qui est du fichier je peux le joindre mais je ne pense pas qu'il soit d'une grande utilité sachant que ce ne sont que 3 colonnes, une avec la reference (alphanumérique, ex: fa11/12/1361324), une avec les quantités qui ne sont pas forcément entières, et une colonne avec le montant, il arrive parfois qu'une cellule soit vide dans une des colonnes, peu importe la colonne. Et la base fait 300.000Lignes...
Le truc c'est que les données sont confidentielles donc si je modifie les données il n'y a plus d'interet, j'ai essayé avec une base recréée de 300.000lignes avec des données aleatoires, des celules vides...et le problème est le même
C'est pas faute d'essayer de comprendre mais la je m'avoue vaincue :(
 
Dernière édition:

Statistiques des forums

Discussions
315 095
Messages
2 116 169
Membres
112 676
dernier inscrit
little_b