Explorer tableur & Recherche [.Find]
Maintenant que je possède mes deux tableaux tabSAP et tabBANK rempli du nom du fournisseur, de l'IBAN et du montant, il faut que les valeurs soit les mêmes dans les deux tableaux pour un fournisseur donné.
Oui c'est vrai qu'un tri est une option permettant de facilité la comparaison.
J'avais en tete de parcourir en lecture un des deux tableaux et pour chaque valeur, parcourir le deuxieme tableau pour savoir si elle est présente. Si les valeurs sont identiques dans les deux tableaux alors je marque dans mon word "Comparaison terminé, les fichiers sont identiques." ou dans le cas contraire : "Comparaison terminé : ERREUR, l'IBAN du fournisseurs "Entreprise1" du fichier SAP n'est pas egal a celui du fichier Banque. "
Il faut prendre en comtpe que les informations disposés dans les deux fichiers sont sensés etre égales.
Contexte :
MonEntreprise envoie un recapitulatif(doc_exemple2) des transactions à effectuer à la banque. La banque crée un nouveau fichier en prenant soin de garder seulement les transactions à faires(ils supprimes les "Aucun reglement") puis nous renvoie le nouveau document.
Le but de mon programme est de dire si oui ou non les valeurs on été modifier entre l'envoie et la reception à la compta.
Bonjour,
Si je comprends bien, le SAP est ce qui est transmis à la banque et le BANK le retour des opérations effectuées...
Désolé, pas eu le temps de me repencher sur la confection d'un tableau de comparaison. J'évite les questions réclamant une attention un peu soutenue dans mes périodes "médicalisées". Dès que j'ai les idées assez claires je m'y emploierai.
Cordialement.
Bonjour,
Merci beaucoup, te souhaitant un prompt rétablissement ...
Cordialement,
Merci,
Rien de très préoccupant, traitement récurrent à caractère qui reste préventif, ça perturbe les activités du fait que je dois boire beaucoup au moins les deux jours qui suivent (et il faut bien que l'eau entrée ressorte
A+
Bonjour,
Petit complément : j'ai procédé à un tri par fournisseurs des tableaux SAP et BANK (ça pas de difficulté). J'ai aussi introduit une gestion d'erreur pour le montant SAP : en cas de montant non trouvé, appel à une fonction qui le recherche en partant de la fin de la ligne et le renvoie si elle le trouve, sinon renvoie "non détecté".
Function MontantSAP(tx As String)
Dim mt, i%
mt = Split(tx)
For i = UBound(mt) To 0 Step -1
If mt(i) <> "" Then
If IsNumeric(Left(mt(i), 1)) Then
MontantSAP = Val(mt(i)): Exit Function
End If
End If
Next i
MontantSAP = "non détecté"
End Function
Sub Tableaux()
Dim tabBANK(), tabIG(2), tabSAP(), temp, dL%, i%, j%, k%, frs%
'Tableau BANK
With Workbooks.Open("C:\Users\[.....]\Documents\ComparateurSOX\" & "doc_exemple1.xlsx").Worksheets(1)
dL = .Range("A" & .Rows.Count).End(xlUp).Row
ReDim tabBANK(dL - 13, 2)
tabIG(0) = "Nombre d'opérations banque : " & dL - 12
tabIG(1) = "Numero de reference : " & Mid(.Range("A3"), 7, 7)
tabIG(2) = .Range("B8").Value2
For i = 13 To dL
tabBANK(i - 13, 0) = .Range("A" & i)
tabBANK(i - 13, 1) = Replace(.Range("C" & i), " ", "")
tabBANK(i - 13, 2) = .Range("D" & i)
Next i
End With
'Tri BANK
For i = 0 To UBound(tabBANK, 1) - 1
For j = i + 1 To UBound(tabBANK, 1)
If tabBANK(j) < tabBANK(i) Then
temp = Array(tabBANK(j, 0), tabBANK(j, 1), tabBANK(j, 2))
For k = 0 To 2
tabBANK(j, k) = tabBANK(i, k): tabBANK(i, k) = temp(k)
Next k
End If
Next j
Next i
'Tableau SAP
Workbooks.OpenText "C:\Users\[....]\Documents\ComparateurSOX\propo.txt"
With ActiveWorkbook.Worksheets(1)
dL = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To dL
If .Cells(i, 1) Like "*Fournisseur*" Then
If .Cells(i + 7, 1) Like "*Virement*" Then
ReDim Preserve tabSAP(2, frs)
temp = Split(.Cells(i + 1, 1), "|"): tabSAP(0, frs) = Trim(temp(1))
temp = Split(.Cells(i + 3, 1), "|"): tabSAP(1, frs) = Trim(Replace(temp(3), "IBAN:", ""))
On Error Resume Next
temp = Split(.Cells(i + 7, 1), ",")
If Err.Number = 0 Then
tabSAP(2, frs) = Val(temp(1))
Else
tabSAP(2, frs) = MontantSAP(.Cells(i + 7, 1))
Err.Clear
End If
On Error GoTo 0
frs = frs + 1: i = i + 7
End If
End If
Next i
End With
'Tri SAP
For i = 0 To UBound(tabSAP, 2) - 1
For j = i + 1 To UBound(tabSAP, 2)
If tabSAP(0, j) < tabSAP(0, i) Then
temp = Array(tabSAP(0, j), tabSAP(1, j), tabSAP(2, j))
For k = 0 To 2
tabSAP(k, j) = tabSAP(k, i): tabSAP(k, i) = temp(k)
Next k
End If
Next j
Next i
'Comparaison SAP-BANKPour la comparaison à suivre, je suis un peu dans le brouillard... Ton exemple de fichier texte répétait un même fournisseur...
Donc, dans une liste SAP, est-ce qu'un fournisseur ne peut apparaître qu'une fois, ou plusieurs fois avec plusieurs transactions ?
Cordialement.
Non les fournisseurs n'apparaissent qu'une seul fois, sauf si c'est une filliale portant le meme nom mais dans tout les cas les coordonnées bancaires ne seront pas les mêmes.
Par rapport au Tri BANK, j'ai une petite erreur d'execution :
'Tri BANK
For i = 0 To UBound(tabBANK, 1) - 1
For j = i + 1 To UBound(tabBANK, 1)
If tabBANK(j) < tabBANK(i) Then '=L'indice n'appartient pas a la selection (concernant tabBANK)
temp = Array(tabBANK(j, 0), tabBANK(j, 1), tabBANK(j, 2))
For k = 0 To 2
tabBANK(j, k) = tabBANK(i, k): tabBANK(i, k) = temp(k)
Next k
End If
Next j
Next iJ'ai beaucoup de mal a analyser et corriger les erreurs ..
Curieux !
Je ne vois pas de possibilité d'erreur d'indice : les bornes sont cadrées sur les indices existants (UBound)...
Quelle ligne est surlignée en erreur ? Et quelle sont les valeurs de i et j (et k éventuellement) lors de l'erreur ?
les fournisseurs n'apparaissent qu'une seul fois, sauf si c'est une filliale portant le meme nom mais dans tout les cas les coordonnées bancaires ne seront pas les mêmes.
Ce qui laisse penser qu'il vaudrait mieux identifier sur l'IBAN plutôt que le nom fournisseur ?
Voici la ligne suligné :
If tabBANK(j) < tabBANK(i) Thenselon VB, j = 1 et i = 0 et k = 0 lors de l'erreur
For i = 0 To UBound(tabBANK, 1) - 1
For j = i + 1 To UBound(tabBANK, 1)
If tabBANK(j) < tabBANK(i) Then
temp = Array(tabBANK(j, 0), tabBANK(j, 1), tabBANK(j, 2))
For k = 0 To 2
tabBANK(j, k) = tabBANK(i, k): tabBANK(i, k) = temp(k)
Next k
End If
Next j
Next ipar contre dans le code si dessus, j'ai surligné "temp" car il apparait en "incompatibilité de type"
Oui, l'IBAN est une source sûre
veux-tu la totalité de mon code actuel pour voir une éventuelle erreur de ma part ?
Je mettrais condition pour ne pas trier si rien à trier !!
L'erreur sur temp est liée : temp recueille l'élément à permuter juste avant, si cet élément n'est pas défini, ce n'est plus un tableau.
je cogite dessus depuis un moment, ca a pas l'air bien compliqué mais j'ai dû mal a comprendre malgré tout, peut tu m'expliquer ton code de tri ?
La méthode de tri est simple : une double-boucle, l'externe parcourt les éléments du premier à l'avant-dernier, l'interne permet de comparer chacun des précédents à tous les éléments qui suivent (par un parcours de l'élément suivant celui repéré par la boucle externe jusqu'au dernier). La comparaison teste si les deux éléments comparés sont ou non dans le bon ordre (voulu pour le tri). S'ils ne le sont pas on switche, soit on intervertit leur position. Si on trie en ordre croissant, du plus petit au plus grand, à la fin du premier de la boucle externe, le plus petit élément se trouvera à la première place, à la fin du second tour, le second plus petit élément se trouvera à la seconde place, etc. Chaque élément monte successivement à sa place, ce pourquoi on appelle cette méthode tri à bulles...
Cordialement.
'Tri BANK
For i = 0 To UBound(tabBANK, 1) - 1
For j = i + 1 To UBound(tabBANK, 1)
If i = 0 Or j = 0 Then
i = i + 1
j = j + 1
If tabBANK(j) < tabBANK(i) Then
temp = Array(tabBANK(j, 0), tabBANK(j, 1), tabBANK(j, 2))
For k = 0 To 2
tabBANK(j, k) = tabBANK(i, k): tabBANK(i, k) = temp(k)
Next k
End If
End If
Next j
Next iJ'ai surligné la condition que j'ai ajouté mais je ne sais pas ou la placer ... (si toute fois elle est juste .. j'en doute fort car l'erreur d'indice perciste)