Macro comparaison valeurs de deux tableaux croisés dynamiques

Fermé
NeigeBleue! Messages postés 24 Date d'inscription vendredi 15 janvier 2016 Statut Membre Dernière intervention 8 février 2016 - 15 janv. 2016 à 15:02
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 8 févr. 2016 à 18:18
Bonjour,

Je souhaite réaliser une macro permettant de comparer deux tableaux croisés dynamiques.
En effet, chaque matin je reçois 2 fichiers excel m'indiquant la quantité que l'on a en stock de différentes références. J'ai déjà réussi à créer une macro permettant de transformer les valeurs en vrac en tableau croisé dynamique mais j'aimerais maintenant que les références où il y a une différence de quantité entre les deux fichiers soient affichées quelque part dans un classeur pour mettre en évidence les erreurs de stock, de même pour les références qui ne sont présentes que sur un des deux fichiers toujours dans le but d'observer un écart.

Veuillez trouver ci-joint un exemple concret pour mieux visualiser le problème :
fichier (1) https://www.cjoint.com/c/FApn4sUn3AM
fichier (2) https://www.cjoint.com/c/FApobIr8vXM

Dans ces fichiers, on arrive facilement à voir qu'il y a des différences de quantité entre les différents produits et qu'il y a des produits dans le fichier 2 qui n'existent pas dans le fichier 1. Aidez-moi à mettre en évidence ces points là !

Voici la macro que j'utilise pour créer mon tableau croisé dynamique :

Sub Macro3()
'
' Macro3 Macro
'
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Balance des stocks!R1C1:R450C3", Version:=xlPivotTableVersion10). _
CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique4", DefaultVersion:=xlPivotTableVersion10
With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Produit" _
)
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique4").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique4").PivotFields("Total U.V."), _
"Somme de Total U.V.", xlSum
End Sub

D'ailleurs, lors de l'enregistrement de ma macro, j'étais à + de 24000lignes sélectionnées grâce à contrôle shift flèche du bas. Mais pour simplifier l'exemple, je vous envoie un fichier avec 450 lignes, j'ai du modifier moi-même dans le code du programme le nombre de lignes (R450 au lieu de R24263) pourquoi cela ne se fait pas automatiquement à l'aide de la partie du code juste au dessus ? :
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select


J'espère avoir été clair et compréhensible, n'hésitez pas à me reposer des questions sinon !

Merci d'avance,

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
16 janv. 2016 à 18:39
Bonjour,

Donc je te propose ce classeur qui te fait choisir tes 2 fichiers ainsi qu'un fichier résultat, puis compare les classeurs et te liste les produits différents.

https://www.cjoint.com/c/FAqrIQ1B3Il

Bon test.
1
NeigeBleue! Messages postés 24 Date d'inscription vendredi 15 janvier 2016 Statut Membre Dernière intervention 8 février 2016 1
17 janv. 2016 à 23:24
Je te remercie pour ton aide et ta proposition, je suis épaté par tant de réactivité et surtout par l'efficacité de ce fichier !

Merci pour tout, je vais me plonger dans le code pour essayer de comprendre. Je suis vraiment novice là dedans !

A bientôt !
0
NeigeBleue! Messages postés 24 Date d'inscription vendredi 15 janvier 2016 Statut Membre Dernière intervention 8 février 2016 1
19 janv. 2016 à 10:26
Bonjour,

J'ai une nouvelle question, je viens de faire tourner le programme avec de nouveaux fichiers (qui possèdent + de colonnes, et dont la disposition des données : Produits et Total U.V ne sont pas au même endroit que dans les fichiers exemples que je t'avais envoyé) donc quand je lance l'application on me dit :
Erreur d'exécution '13': Incompatibilité de type

Et la ligne vst = tbe(idx, 2) est surlignée en jaune.

Je n'ai presque rien compris à cette partie du code :

Public Sub cum_tab(tbe, tbs, tbk)
Dim ndl As Long, vel As Variant, vst As Double, mst As Double, man As Variant
ReDim tbs(1 To 1) ' initialisation
ReDim tbk(1 To 1)
For idx = 2 To UBound(tbe) ' boucle table
vel = tbe(idx, 1)
vst = tbe(idx, 2)
For ndl = 1 To UBound(tbs) ' sauvegarde en table provisoire
If vel < tbs(ndl) Then
man = tbs(ndl): tbs(ndl) = vel: vel = man
mst = tbk(ndl): tbk(ndl) = vst: vst = mst
ElseIf tbs(ndl) = vel Then
tbk(ndl) = tbk(ndl) + vst
Exit For
ElseIf tbs(ndl) = "" Then
tbs(ndl) = vel
tbk(ndl) = vst
ReDim Preserve tbs(1 To UBound(tbs) + 1)
ReDim Preserve tbk(1 To UBound(tbk) + 1)
End If
Next ndl
Next idx
ReDim Preserve tbs(1 To UBound(tbs) - 1)
ReDim Preserve tbk(1 To UBound(tbk) - 1)
End Sub

Est-il possible que tu me l'explique? Si j'ai bien cru comprendre il s'agit de faire le cumul des quantités de chaque produit, mais comment cela fonctionne je n'ai pas vraiment saisi...

Merci d'avance !
0