Calcul de sommes selon 3 conditons imbriques
Dernière réponse : dans Programmation
bonjour a tous !
je vous expose mon probleme:j'ai un tableau excel dans lequel il y a trois colonnes (et bien d'autres!! ) dont je me sert pour calculer des sommes intitulees : montant , maturity date et classification.
je m'explique :
je souhaite que pour chaque ligne du tableau :
- il fasse un tri selon l'ecart entre la date entree par l'utilisateur (inputbox) et celle de la colonne maturit date
- que parmis ces groupes de diference il fasse un tri par type de classification (colonne classification)
- puis que pour tous ces sous groupes il fasse un somme pour les montant >= 0 et ceux < 0
voila !!
au total je dois avoir qqch comme 126 sommes pour les >0 et 126 pour les < 0. et je me vois mal declarer 252 variables et faire autant de boucles IF !!!
Mon reel probleme est le suivant :
je connais la premiere ligne (fstrow) et la derniere ligne(lstrow) du tableau.
je sais faire un tri par cassification puis dans ces classification faire un somme pour les + et une somme pour les - et d'autre part je sais faire le calcul de difference entre les dates mais je n'arrive pas a trouver un moyen simpe de lier les 2 !!!
en fait j'ai 2 bouts de code ....
le resultat a afficher est dans un tableau a 2 entrees : en colonne le type de classification et en ligne l'ecart entre date de l'inputbox et date de colonne maturity..
ci dessous ce que j'ai deja fait :
pour les sommes et la recherche du tableau dans la feuille excel :
pour le calcul de la difference des dates :
col indique le num de colonne du tableau d'arrivee (celui dans lequel j'affiche les resultats.)
comme vous pouvez le voir j'ai deja du declrer pas mal de variables total... 26 pour etre precis... c'est un peu barbant ....
voila... comment prendre en compte les dates dans le calcul des sommes ????
pour les totaux je pensait a qqch comme ca :
et pareil pour les debits.... judicieux ?
je vous expose mon probleme:j'ai un tableau excel dans lequel il y a trois colonnes (et bien d'autres!! ) dont je me sert pour calculer des sommes intitulees : montant , maturity date et classification.
je m'explique :
je souhaite que pour chaque ligne du tableau :
- il fasse un tri selon l'ecart entre la date entree par l'utilisateur (inputbox) et celle de la colonne maturit date
- que parmis ces groupes de diference il fasse un tri par type de classification (colonne classification)
- puis que pour tous ces sous groupes il fasse un somme pour les montant >= 0 et ceux < 0
voila !!
au total je dois avoir qqch comme 126 sommes pour les >0 et 126 pour les < 0. et je me vois mal declarer 252 variables et faire autant de boucles IF !!!
Mon reel probleme est le suivant :
je connais la premiere ligne (fstrow) et la derniere ligne(lstrow) du tableau.
je sais faire un tri par cassification puis dans ces classification faire un somme pour les + et une somme pour les - et d'autre part je sais faire le calcul de difference entre les dates mais je n'arrive pas a trouver un moyen simpe de lier les 2 !!!
en fait j'ai 2 bouts de code ....
le resultat a afficher est dans un tableau a 2 entrees : en colonne le type de classification et en ligne l'ecart entre date de l'inputbox et date de colonne maturity..
ci dessous ce que j'ai deja fait :
pour les sommes et la recherche du tableau dans la feuille excel :
'---=== search for first & last Row of the table ===---
fstrow = ws_source.Range("B1:B65536").End(xlDown).Row
lstrow = ws_source.Range("B" & fstrow & ":B65536").End(xlDown).Row
'---=== Column number search ===---
For i = 1 To 255
Select Case ws_source.Cells(fstrow, i).Value
Case Is = "Branch code (Midas GL) (CAB)": bc_colnum = i
Case Is = "Customer Number (CAB)": cn_colnum = i
Case Is = "Account Code (CAB)": ac_colnum = i
Case Is = "Currency ISO Code (CAB)": cic_colnum = i
Case Is = "Debit Credit Indicator (CAB)": dci_colnum = i
Case Is = "Accounting Balance transaction (CAB)": abt_colnum = i
Case Is = "Deal Date": dd_colnum = i
Case Is = "Maturity Date": md_colnum = i
End Select
Next
'---=== Calculations ===---
For j = fstrow + 1 To lstrow
ws_source.Rows(j).Cells(abt_colnum).Value = Round(ws_source.Rows(j).Cells(abt_colnum).Value, [2])
Select Case ws_source.Rows(j).Cells(ac_colnum).Value
Case "1112": class = a1112: tot_type = tota: totc_type = totca
Case "1131": class = b1131: tot_type = totb: totc_type = totcb
Case "1141": class = c1141: tot_type = totc: totc_type = totcc
Case "1151": class = d1151: tot_type = totd: totc_type = totcd
Case "1221": class = e1221: tot_type = tote: totc_type = totce
Case "1231": class = f1231: tot_type = totf: totc_type = totcf
Case "1241": class = g1241: tot_type = totg: totc_type = totcg
Case "2131": class = h2131: tot_type = toth: totc_type = totch
Case "2141": class = i2141: tot_type = toti: totc_type = totci
Case "2151": class = j2151: tot_type = totj: totc_type = totcj
Case "2211": class = k2211: tot_type = totk: totc_type = totck
Case "2221": class = l2221: tot_type = totl: totc_type = totcl
Case "2231": class = m2231: tot_type = totm: totc_type = totcm
Case "2241": class = n2241: tot_type = totn: totc_type = totcn
Case 9952 To 9955: class = retail: tot_type = totr: totc_type = totcr
Case 1410 To 2130, "2212", 2668 To 3700: class = other: tot_type = toto: totc_type = totco
End Select
If IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) > 0 Then
tot_type = tot_type + CDec(ws_source.Rows(j).Cells(abt_colnum).Value)
ElseIf IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) < 0 Then
totc_type = totc_type + CDec(ws_source.Rows(j).Cells(abt_colnum).Value)
End If
Next
pour le calcul de la difference des dates :
datedemand = InputBox("Enter Date of reference : ", "Date Ref")
If IsDate(datedemand) Then
date_ref = datedemand
Else: MsgBox "You havn't written a date !!"
End If
If ws_source.Rows(j).Cells(md_colnum).Value <> "" And IsDate(ws_source.Rows(j).Cells(md_colnum).Value) Then
difference = DateDiff("d", ws_source.Rows(j).Cells(md_colnum).Value, date_ref)
End If
Select Case difference
Case 1 To 7: dif_type = one_w: col = 2
Case 8 To 30: dif_type = one_m: col = 3
Case 31 To 90: dif_type = one_tree_m: col = 4
Case 91 To 180: dif_type = tree_six_m: col = 5
Case 181 To 360: dif_type = six_twelve_m: col = 6
Case Is > 360: dif_type = name_call: col = 7
End Select
col indique le num de colonne du tableau d'arrivee (celui dans lequel j'affiche les resultats.)
comme vous pouvez le voir j'ai deja du declrer pas mal de variables total... 26 pour etre precis... c'est un peu barbant ....
voila... comment prendre en compte les dates dans le calcul des sommes ????
pour les totaux je pensait a qqch comme ca :
for t = 1 to 126
tot_credit_(t) = [.....]
next
et pareil pour les debits.... judicieux ?
Autres pages sur : calcul conditons imbriques
Lassé par la pub ? Créez un compte
Meilleure solution
Tes principes sont bons mais tirent parti d'un cas particulier.
Les miens sont aussi bons, mais restent vrais partout ailleurs.
Sommes-nous d'accord avec ceci ? :
Si une macro crée un onglet pour faire des calculs temporaires, elle doit le supprimer en quittant.
Si le classeur dispose d'un onglet pour faire des calculs temporaires, les macros qui en tirent profit ne doivent pas le supprimer.
--------------------
Pourquoi je n'aime pas (*) la solution des onglets permanents.
Le problème de la multiplicité des onglets nécessaires peut être effectivement réduit par l'utilisation d'un seul onglet (voire d'un nombre réduit). Mais il faut alors se garantir que seule une macro à la fois va pouvoir accéder à cet onglet. Et les problèmes d'accès concurrent à une ressource sont plutôt complexes à résoudre.
(*) Raison subjective. Je ne suis pas détenteur de la Vérité Absolue.
Les miens sont aussi bons, mais restent vrais partout ailleurs.
Sommes-nous d'accord avec ceci ? :
--------------------
Pourquoi je n'aime pas (*) la solution des onglets permanents.
Le problème de la multiplicité des onglets nécessaires peut être effectivement réduit par l'utilisation d'un seul onglet (voire d'un nombre réduit). Mais il faut alors se garantir que seule une macro à la fois va pouvoir accéder à cet onglet. Et les problèmes d'accès concurrent à une ressource sont plutôt complexes à résoudre.
(*) Raison subjective. Je ne suis pas détenteur de la Vérité Absolue.
Salut Oz'
Ben dis-donc, c'est bien compliqué
Enfin, je veux dire, surtout dans ta tête
Si tu as trop de variables, c'est qu'il faut penser les choses autrement.
Si tu as beaucoup de variables, c'est qu'il te faut sans doute travailler avec des tableaux.
Sinon, tu peux aussi te servir d'Excel lui même. Utilise une feuille temporaire, qui n'est jamais qu'un grand tableau :
Ben dis-donc, c'est bien compliqué
Enfin, je veux dire, surtout dans ta tête
Si tu as trop de variables, c'est qu'il faut penser les choses autrement.
Si tu as beaucoup de variables, c'est qu'il te faut sans doute travailler avec des tableaux.
Sinon, tu peux aussi te servir d'Excel lui même. Utilise une feuille temporaire, qui n'est jamais qu'un grand tableau :
' // Copions nos données dans une nouvelle feuille
Dim ws_tempo As Worksheet
Set ws_tempo = Worksheets.Add
ws_source.Range(fstrow, lstrow).Copy ws_tempo.Range("A1")
' // Ici tes calculs
...
' // Ne pas oublier de la supprimer
ws_tempo.Delete
bonjour,
alors voilà, j'ai essayer d'avancer mon problème mais... c'est pas top top.
J'ai décider de créer 6 feuilles temporaires (une par période).
comme ca, je copie les lignes de ma feuille principale ces 6 feuilles et mon premier tri est fait !
ensuite je calcule 2 sommes par feuille (une crédit et une débit).
mais voilà... comment dire via VBA : for each feuille temporaire que je viens de créer...
help !!!
je poste quand même mon code même s'il n'a que peu évolué !
alors voilà, j'ai essayer d'avancer mon problème mais... c'est pas top top.
J'ai décider de créer 6 feuilles temporaires (une par période).
comme ca, je copie les lignes de ma feuille principale ces 6 feuilles et mon premier tri est fait !
ensuite je calcule 2 sommes par feuille (une crédit et une débit).
mais voilà... comment dire via VBA : for each feuille temporaire que je viens de créer...
help !!!
je poste quand même mon code même s'il n'a que peu évolué !
Dim ws_tempo1 As Worksheet
Dim ws_tempo2 As Worksheet
Dim ws_tempo3 As Worksheet
Dim ws_tempo4 As Worksheet
Dim ws_tempo5 As Worksheet
Dim ws_tempo6 As Worksheet
Dim ws_tempo As Range
Dim row_source As Range
Dim ws_source As Worksheet
Dim ws_r As Worksheet
Dim bc_colnum As Byte 'column Branch code
Dim cn_colnum As Byte ' column Costumers numbers
Dim ac_colnum As Byte ' column Account Code
Dim cic_colnum As Byte
Dim dci_colnum As Byte
Dim abt_colnum As Byte
Dim dd_colnum As Byte
Dim md_colnum As Byte
Dim col As Long
Dim date_ref As Date
Set ws_source = Worksheets("Report")
Set ws_r = Worksheets("result")
fstrow = 0
lstrow = 0
datedemand = InputBox("Enter Date of reference : ", "Date Ref")
If IsDate(datedemand) Then
date_ref = datedemand
Else: MsgBox "You havn't written a date !!"
End If
Set ws_tempo = ws_tempo(1 to 6)
Set ws_tempo2 = Worksheets.Add
Set ws_tempo2 = Worksheets.Add
Set ws_tempo3 = Worksheets.Add
Set ws_tempo4 = Worksheets.Add
Set ws_tempo5 = Worksheets.Add
Set ws_tempo6 = Worksheets.Add
Set row_source = ws_tempo.Rows
'recherche first & last Row of the table
fstrow = ws_source.Range("B1:B65536").End(xlDown).Row
lstrow = ws_source.Range("B" & fstrow & ":B65536").End(xlDown).Row
For i = 1 To 255
Select Case ws_source.Cells(fstrow, i).Value
Case Is = "Branch code (Midas GL) (CAB)": bc_colnum = i
Case Is = "Customer Number (CAB)": cn_colnum = i
Case Is = "Account Code (CAB)": ac_colnum = i
Case Is = "Currency ISO Code (CAB)": cic_colnum = i
Case Is = "Debit Credit Indicator (CAB)": dci_colnum = i
Case Is = "Accounting Balance transaction (CAB)": abt_colnum = i
Case Is = "Deal Date": dd_colnum = i
Case Is = "Maturity Date": md_colnum = i
End Select
Next
'copie des lignes en fonction des differences de dates
For j = fstrow + 1 To lstrow
If ws_source.Rows(j).Cells(md_colnum).Value <> "" And IsDate(ws_source.Rows(j).Cells(md_colnum).Value) Then
difference = DateDiff("d", ws_source.Rows(j).Cells(md_colnum).Value, date_ref)
End If
Select Case difference
Case 1 To 7: ws_source.Rows(j).Copy ws_tempo1.Rows(j - fstrow): col = 2
Case 8 To 30: ws_source.Rows(j).Copy ws_tempo2.Rows(j - fstrow): col = 3
Case 31 To 90: ws_source.Rows(j).Copy ws_tempo3.Rows(j - fstrow): col = 4
Case 91 To 180: ws_source.Rows(j).Copy ws_tempo4.Rows(j - fstrow): col = 5
Case 181 To 360: ws_source.Rows(j).Copy ws_tempo5.Rows(j - fstrow): col = 6
Case Is > 360: ws_source.Rows(j).Copy ws_tempo6.Rows(j - fstrow): col = 7
End Select
Next
'calcul des sommes dans chaque feuille temporaire
For Each row_source In ws_tempo
ws_tempo.Cells(abt_colnum).Value = Round(ws_source.Rows(j).Cells(abt_colnum).Value, [2])
Select Case ws_tempo.Cells(ac_colnum).Value
Case "1112": tot_type = tota: totc_type = totca
Case "1131": tot_type = totb: totc_type = totcb
Case "1141": tot_type = totc: totc_type = totcc
Case "1151": tot_type = totd: totc_type = totcd
Case "1221": tot_type = tote: totc_type = totce
Case "1231": tot_type = totf: totc_type = totcf
Case "1241": tot_type = totg: totc_type = totcg
Case "2131": tot_type = toth: totc_type = totch
Case "2141": tot_type = toti: totc_type = totci
Case "2151": tot_type = totj: totc_type = totcj
Case "2211": tot_type = totk: totc_type = totck
Case "2221": tot_type = totl: totc_type = totcl
Case "2231": tot_type = totm: totc_type = totcm
Case "2241": tot_type = totn: totc_type = totcn
Case 9952 To 9955: tot_type = totr: totc_type = totcr
Case 1410 To 2130, "2212", 2668 To 3700: tot_type = toto: totc_type = totco
End Select
If IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) > 0 Then
tot_type = tot_type + CDec(ws_source.Rows(j).Cells(abt_colnum).Value)
ElseIf IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) < 0 Then
totc_type = totc_type + CDec(ws_source.Rows(j).Cells(abt_colnum).Value)
End If
Next
ligne = 6
For tot_type = tota To toto
ws_result.Cells(ligne, col).Value = tot_type
ligne = ligne + 1
Next
ligne = 29
For totc_type = totca To totco
ws_result.Cells(ligne, col).Value = tot_type
ligne = ligne + 1
Next
' // Ne pas oublier de la supprimer
ws_tempo1.Delete
ws_tempo2.Delete
ws_tempo3.Delete
ws_tempo4.Delete
ws_tempo5.Delete
ws_tempo6.Delete
Je ne fais que prendre le bateau en route, donc je ne me suis pas penché sur tous les détails.
Une chose m’interpelle. Tu utilises 6 feuilles temporaires, soit, mais pourquoi à chaque fois la créer pour ensuite le supprimer?.
Il est possible dans excel de masquer les feuilles (tout en continuant à les utiliser depuis des macros). Cette option se trouve dans les propriétés des feuilles, suffit de passer la variable visible à 0 (xlsheethidden).
Autre chose, si tu ne sais pas comment faire appel à tes feuilles, il y a toujours moyens de contourner le problème. Tu les nomes 1, 2 ,3, 4, 5 et 6 (donc sans le tempo) et donc tu px les appeler en faisant une simple boucle de 1 à 6.
Pour terminer, vu qu'on ne supprime plus les feuilles, tu dois simplement vider le contenu.
Une chose m’interpelle. Tu utilises 6 feuilles temporaires, soit, mais pourquoi à chaque fois la créer pour ensuite le supprimer?.
Il est possible dans excel de masquer les feuilles (tout en continuant à les utiliser depuis des macros). Cette option se trouve dans les propriétés des feuilles, suffit de passer la variable visible à 0 (xlsheethidden).
Autre chose, si tu ne sais pas comment faire appel à tes feuilles, il y a toujours moyens de contourner le problème. Tu les nomes 1, 2 ,3, 4, 5 et 6 (donc sans le tempo) et donc tu px les appeler en faisant une simple boucle de 1 à 6.
Pour terminer, vu qu'on ne supprime plus les feuilles, tu dois simplement vider le contenu.
Citation :
Autre chose, si tu ne sais pas comment faire appel à tes feuilles, il y a toujours moyens de contourner le problème. Tu les nomes 1, 2 ,3, 4, 5 et 6 (donc sans le tempo) et donc tu px les appeler en faisant une simple boucle de 1 à 6.
En vert, c'est bien vu
----------------------------
Dim ws_tempo1 As Worksheet
Dim ws_tempo2 As Worksheet
Dim ws_tempo3 As Worksheet
Dim ws_tempo4 As Worksheet
Dim ws_tempo5 As Worksheet
Dim ws_tempo6 As Worksheet
..
Set ws_tempo2 = Worksheets.Add
Set ws_tempo2 = Worksheets.Add
Set ws_tempo3 = Worksheets.Add
Set ws_tempo4 = Worksheets.Add
Set ws_tempo5 = Worksheets.Add
Set ws_tempo6 = Worksheets.Add
..
ws_tempo1.Delete
ws_tempo2.Delete
ws_tempo3.Delete
ws_tempo4.Delete
ws_tempo5.Delete
ws_tempo6.Delete
Tu sais qu'on a inventé l'informatique pour ne pas se faire chier à faire 6 fois la même chose ?
Dim ws_tempo(1 To 6) As Worksheet
Dim i As Integer
..
For i = 1 To 6
Set ws_tempo(i) = Worksheets.Add
Next
..
For i = 1 To 6
ws_tempo(i).Delete
Next
Citation :
retirer les lignes et colonnes inutile Remarque pertinente. A bien y regarder, Excel est en effet fait pour ça. On cache les lignes, les colonnes, les feuilles de calcul. Mais on n'est plus en Excel, on est en VB ! Et il me semble important que le classeur soit rendu, à l'issu des calculs, dans le même état. Imaginons maintenant que de nombreuses macros puissent y interagir. Il leur faut 6 feuilles à chacune !!!!!
On n'est pas en VB, mais en VBA donc toujours dans Excel (la nuance est légère mais elle a toute son importance). Et mes onglets, on peut le réutiliser plusieurs fois tout comme une variable (inutile d'en recréer si on a ce qu'il faut). Et si je veux chercher la petite bête, si dès le départ je décide de créer un fichier avec des onglets cachés, indirectement, lorsque je ferme mon fichier, il sera toujours dans le même état qu'à l'ouverture :-)
Beaucoup de mes fichiers excel où je m'amuse à créer des macro ont un onglet "caché" qui me sert de zone de stockage de données. Je pourrais très bien m'en passer mais cela grossirait considérablement mon code VBA (et tout le monde sait bien que plus on raccourcis un code plus cela tourne vite).
Beaucoup de mes fichiers excel où je m'amuse à créer des macro ont un onglet "caché" qui me sert de zone de stockage de données. Je pourrais très bien m'en passer mais cela grossirait considérablement mon code VBA (et tout le monde sait bien que plus on raccourcis un code plus cela tourne vite).
bonjour,
bon, j'ai mis le temps mais j'ai trouver la maniere de faire mon code.
Par contre j'affiche dans un tableau fixe sur excel et j'aimerai que si il n'y a que des sommes pour le cas 1112 et 2131 (par exemple) toute les autres lignes du tableau correspondant aux autres cas se cachent..(pour plus de clarté !!)
j'ai entendu parler des tableaux sous VBA.. est - ce une bonne piste ?
ci dessous mon code :
du coup, j'ai pas eu besoin des feuilles temporaires mais je garde l'astuce en mémoire...
bon, j'ai mis le temps mais j'ai trouver la maniere de faire mon code.
Par contre j'affiche dans un tableau fixe sur excel et j'aimerai que si il n'y a que des sommes pour le cas 1112 et 2131 (par exemple) toute les autres lignes du tableau correspondant aux autres cas se cachent..(pour plus de clarté !!)
j'ai entendu parler des tableaux sous VBA.. est - ce une bonne piste ?
ci dessous mon code :
Dim ws_source As Worksheet
Dim ws_r As Worksheet
Dim tot_credit(1 To 16) As Variant
Dim tot_debit(1 To 16) As Variant
Dim bc_colnum As Byte 'column Branch code
Dim cn_colnum As Byte ' column Costumers numbers
Dim ac_colnum As Byte ' column Account Code
Dim cic_colnum As Byte
Dim dci_colnum As Byte
Dim abt_colnum As Byte
Dim dd_colnum As Byte
Dim md_colnum As Byte
Dim col As Long
Dim fstrow As Long
Dim lstrow As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
Dim m As Long
Dim date_ref As Date
fstrow = 0
lstrow = 0
Set ws_source = Worksheets("Report")
Set ws_r = Worksheets("result")
datedemand = InputBox("Enter Date of reference : ", "Date Ref")
If IsDate(datedemand) Then
date_ref = datedemand
Else: MsgBox "You havn't written a date !!"
End If
' clear old results
ws_r.Range("B6:H21").ClearContents
ws_r.Range("B29:H44").ClearContents
'---=== search for first & last Row of the table ===---
fstrow = ws_source.Range("B1:B65536").End(xlDown).Row
lstrow = ws_source.Range("B" & fstrow & ":B65536").End(xlDown).Row
'---=== Column number search ===---
For i = 1 To 255
Select Case LCase(ws_source.Cells(fstrow, i).Value)
Case Is = "branch code (midas gl) (cab)": bc_colnum = i
Case Is = "customer number (cab)": cn_colnum = i
Case Is = "account code (cab)": ac_colnum = i
Case Is = "currency iso code (cab)": cic_colnum = i
Case Is = "debit credit indicator (cab)": dci_colnum = i
Case Is = "accounting balance transaction (cab)": abt_colnum = i
Case Is = "deal date": dd_colnum = i
Case Is = "maturity date": md_colnum = i
End Select
Next
'---=== Calculations ===---
For j = fstrow + 1 To lstrow
Select Case ws_source.Rows(j).Cells(ac_colnum).Value ' pour chaque ligne assigne un numero pour la somme l et un numero de ligne k pour le résultat
Case "1112": l = 1: k = 6
Case "1131": l = 2: k = 7
Case "1141": l = 3: k = 8
Case "1151": l = 4: k = 9
Case "1221": l = 5: k = 10
Case "1231": l = 6: k = 11
Case "1241": l = 7: k = 12
Case "2131": l = 8: k = 13
Case "2141": l = 9: k = 14
Case "2151": l = 10: k = 15
Case "2211": l = 11: k = 16
Case "2221": l = 12: k = 17
Case "2231": l = 13: k = 18
Case "2241": l = 14: k = 19
Case 9952 To 9955: l = 15: k = 20
Case 1410 To 2130, "2212", 2668 To 3700: l = 16: k = 21
End Select
'fait la somme en fonction du signe et de la classification
If IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) > 0 Then
tot_debit(l) = tot_debit(l) + ws_source.Rows(j).Cells(abt_colnum).Value
ElseIf IsNumeric(ws_source.Rows(j).Cells(abt_colnum).Value) And CDec(ws_source.Rows(j).Cells(abt_colnum).Value) < 0 Then
tot_credit(l) = tot_credit(l) + Abs(ws_source.Rows(j).Cells(abt_colnum).Value)
End If
'---=== calcul de la diference entre date_ref et maturity date ===---
If ws_source.Rows(j).Cells(md_colnum).Value <> "" And IsDate(ws_source.Rows(j).Cells(md_colnum).Value) Then
difference = DateDiff("d", date_ref, ws_source.Rows(j).Cells(md_colnum).Value)
End If
Select Case difference 'assignation de la colonne pour le résultat
Case 1 To 7: col = 2
Case 8 To 30: col = 3
Case 31 To 90: col = 4
Case 91 To 180: col = 5
Case 181 To 360: col = 6
Case Is > 360: col = 7
Case Else: col = 8
End Select
'---=== put result in table in K GBP===---
ws_r.Cells(k, col).Value = Round(ws_r.Cells(k, col).Value + tot_credit(l) / 1000, 2)
ws_r.Cells(k + 23, col).Value = Round(ws_r.Cells(k + 23, col).Value + tot_debit(l) / 1000, 2)
For b = 1 To 16
tot_credit(b) = 0
tot_debit(b) = 0
Next
Next
du coup, j'ai pas eu besoin des feuilles temporaires mais je garde l'astuce en mémoire...
Lassé par la pub ? Créez un compte
- Contenus similaires :