Macro traitant les écarts d'inventaire de fin d'année
Bien le bonjour à tous les membres du forum,
Ce travail consiste à traiter les écarts d’inventaire de fin d’année dont je joint mon fichier.
1-Écarts Négatifs : A partir de la feuille « BComptable », dans le cas où un code n’existe pas sur la feuille « BPhysique », cela signifie que l’article en question est introuvable et doit apparaître sur la feuille « E.Négatif ».
2-Écarts Positifs : A partir de la feuille « BPhysique », dans le cas où la cellule du code est vierge sur la feuille « BPhysique », ou bien il n’existe pas sur la feuille «BComptable », cela signifie que l’article en question est nouvellement acquis, et doit apparaître sur la feuille « E.Positif ».
Le problème, c’est que la macro ne me donne pas le résultat que je veux atteindre.
Exemple, sur la feuille « E.Positif », je dois avoir l’enregistrement N°29.
Exemple, sur la feuille « E.Négatif », je dois avoir les enregistrements N° 1 et le N°5.
Merci pour toute intervention.
Bonjour zozo,
quelque chose comme ça, à tester dans une situation réelle...
Sub Analyse()
'
Dim tC, tBP, tNP(), iIdx%
'
tC = Worksheets("BComptable").Range("A2:C" & Worksheets("BComptable").Range("A" & Rows.Count).End(xlUp).Row).Value
tBP = Worksheets("BPhysique").Range("A2:C" & Worksheets("BPhysique").Range("A" & Rows.Count).End(xlUp).Row).Value
'
For x = 1 To 2
iIdx = 0
Erase tNP
For y = 1 To IIf(x = 1, UBound(tC, 1), UBound(tBP, 1))
iOK = 0
For Z = 1 To IIf(x = 1, UBound(tBP, 1), UBound(tC, 1))
If x = 1 Then If tC(y, 2) = tBP(Z, 2) Then iOK = 1
If x = 2 Then If tBP(y, 2) = tC(Z, 2) Then iOK = 1
If iOK = 1 Then Exit For
Next
If iOK = 0 Then
iIdx = iIdx + 1
ReDim Preserve tNP(3, iIdx)
If x = 1 Then
tNP(0, iIdx - 1) = tC(y, 1)
tNP(1, iIdx - 1) = tC(y, 2)
tNP(2, iIdx - 1) = tC(y, 3)
Else
tNP(0, iIdx - 1) = tBP(y, 1)
tNP(1, iIdx - 1) = tBP(y, 2)
tNP(2, iIdx - 1) = tBP(y, 3)
End If
End If
Next
With Worksheets(IIf(x = 1, "E.Négatif", "E.Positif"))
iRow = .Range("A" & Rows.Count).End(xlUp).Row
If iRow > 1 Then .Range("A2:C" & iRow).Value = ""
.Range("A2").Resize(iIdx, 3).Value = WorksheetFunction.Transpose(tNP)
End With
Next
'
MsgBox "Analyse réalisée", vbInformation + vbOKOnly, "Analyse"
'
End Sub
A+
Bonjour curulis57,
Je viens de tester la macro, et j'ai le résultat voulu, c'est génial de ta part, je te remercie infiniment.
A+