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.
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 !
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.
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...
Si je résume ce que j'ai compris, tu as 2 fichiers avec 2 colonnes utiles en A (Produit) et B (Total U.V.) que tu veux comparer en obtenant la liste des produits présents dans chaque fichier et les totaux U.V. de chaque fichier.
Si c'est bien le cas, j'ai une procédure à te proposer.
Bonjour gbinforme et merci pour ta réponse rapide !
C'est bien cela, je possède 2 fichiers avec 2 colonnes où se trouvent des données similaires pas forcément dans le même ordre et j'aimerai les comparer pour voir si sur deux produits similaires, la quantité est différente.
Merci pour tout, je vais me plonger dans le code pour essayer de comprendre. Je suis vraiment novice là dedans !
A bientôt !
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 !