Automatiser le rapprochement de deux informations
Bonjour,
J'ai déjà posté un problème auquel j'étais confronté sous Access mais me suis également demandé si ce problème ne pouvait pas être résolu sous Excel.
Je travaille donc dans une entreprise qui se charge de regrouper des bons de livraison avec des factures.
Ces données sont actuellement sous Excel et le travail se fait sous Excel également.
Un onglet est consacré aux bons de livraison et un autre aux factures.
Le recoupage s'effectue de façon manuelle et un tableau croisé dynamique permet de visualiser les factures ayant un litige ou n'ayant pas de bon de livraison rattaché.
Je souhaiterais savoir s'il est possible à l'aide d'un formule VBA ou d'une fonction Excel que je ne connais pas d'effectuer le rapprochement (du moins en partie, car je me doute bien que c'est infaisable si plusieurs bons de livraison correspondent à une seule et même facture).
En vous remerciant pour votre apport futur,
A bientôt ^^"
1 pièce(s) jointe(s)
Rapprochement de fichiers
Voici un autre exemple qui utilise l'algorithme suivant.
On compte le nombre de ligne du feuillet factures
On compte le nombre de ligne du feuillet BL
On parcourt chaque ligne du feuillet parcours , on lit le transporteur
on recherche le nom du transporteur dans le feuillet BL et l'on compare les quantités et montant s.
Comme le dit Krovax , si une facture entraine une seule livraison , c'est OK .
Sinon il faut donner toutes les conditions de l'algo ( tout est possible )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Sub rapprochement_Factures_BL()
nb_factures = Worksheets("Factures").Range("C65536").End(xlUp).Row ' on se base syur la colonne C pour le calcul du nombre de ligne
nb_BL = Worksheets("B_Livraison").Range("C65536").End(xlUp).Row
For ligne = 2 To nb_factures
'on lit le transporteur
transport = Trim(Worksheets("Factures").Cells(ligne, 2).Value)
quant = Worksheets("Factures").Cells(ligne, 5).Value
Montant = Worksheets("Factures").Cells(ligne, 6).Value
With Worksheets("B_Livraison").Range("B2:B" & CStr(nb_BL))
Set cellule = .Find(What:=transport, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not cellule Is Nothing Then
prem_occurence = cellule.Row
trouvé = false
Do
If Worksheets("B_Livraison").Cells(cellule.Row, 5).Value = quant And _
Worksheets("B_Livraison").Cells(cellule.Row, 6).Value = Montant Then
' on a trouvé , on indique
Worksheets("B_Livraison").Cells(cellule.Row, 7).Value = " Rapprochement OK"
Worksheets("B_Livraison").Cells(cellule.Row, 8).Value = Worksheets("Factures").Cells(ligne, 1).Value
Worksheets("Factures").Cells(ligne, 7).Value = " Rapprochement OK"
Worksheets("Factures").Cells(ligne, 8).Value = Worksheets("B_Livraison").Cells(cellule.Row, 1).Value
trouvé = true
End If
Set cellule = .FindNext(cellule)
Loop While Not cellule Is Nothing And cellule.Row <> prem_occurence and trouvé = false
End If
End With
Next |
End Sub
Rapprochement de fichiers
En fait, la difficulté est dans l'analyse.
Le problème n'est pas irrésolvable puisque manuellement, on arrive à faire des rapprochements.
La donnée ( ou la colonne) commune semble être le nom du fournisseur.
Dans mon algo , j'utilise en priorité ce champs.
Si une facture peut donner lieu à 2 colis et 2 BL. Il doit y avoir un paramètre supplémentaire à incorporer qui est le prix unitaire et qui doit permettre de pister ce cas de figure.
Dans la pratique , on fait un traitement itératif , on sort de la pile de BL , les rapprochements évident avec les factures et les rapprochements suivant se font par déduction. L'algorithme pourra donc commencer par celui fourni , ensuite , on fait des déductions sur les lignes restantes.
PS : dans le fichier fournit dans le post précédent, pour voir le déroulement , efface les colonnes G et H avant de lancer la macro : outil -> macro -> Rapproc...
Si tu veux envoi un aperçu des fichiers pour voir les solutions adoptables.