Hello l'equipe,
L'objectif de la macro est de récupérer une valeur dans un tableau par un filtre de date ( en anglais) et d'un autre critère pour les lignes et un filtrage de colonne unpeu bidoullé.
En principe, la macro doit fonctionner mais je rencontre un problème au niveau de la gestion du format de la date.
La date qui me permet de filtrer le tableau ne match pas niveau format donc je me retrouve avec un tableau vide.
Auriez vous une gestion des dates assez rigoureuse a me conseiller afin d'éviter de genre d'erreur ?
Je précise aussi que dans l'idéal l'ensemble des dates soit en anglais et que le traitement par vba le garde.
Car lors de l'exécution de la macro, le format des dates switch de français à anglais ( vu des Variables locales ). Voici le ci joint le code et un fichier test
Public Function NumCol2Lettre(ByVal NumCol As Long) As String
Dim i As Long, x As Long, s As String
For i = 6 To 0 Step -1
x = (26 ^ (i + 1) - 1) / 25 - 1
If NumCol > x Then
s = s & Chr(((NumCol - x - 1) \ 26 ^ i) Mod 26 + 65)
End If
Next i
NumCol2Lettre = s
End Function
Sub volNumberP()
Dim wsVol As Worksheet
Dim weightsStrike As Double, volColumns As String
Dim plageStrike As Range, Rng As Range
Dim dateCalculation As Date
Dim maturite As Date
Dim volperiod As String
Dim nbJourDiff As Integer
maturite = Workbooks("filtreTest.xlsm").Sheets("Feuil2").Range("B2").Value
dateCalculation = Workbooks("filtreTest.xlsm").Sheets("Feuil2").Range("B3").Value
weightStrike = Workbooks("filtreTest.xlsm").Sheets("Feuil2").Range("B1").Value
maturite = Format(CDate(maturite), "mm/dd/yy")
dateCalculation = Format(CDate(dateCalculation), "mm/dd/yy")
nbJourDiff = DateDiff("d", dateCalculation, maturite)
Set wsVol = Sheets("Feuil1")
Select Case nbJourDiff
Case 0 To 1
MsgBox ("Petit souci avec la vol")
Case 1 To 7
volperiod = "1W"
Case 7 To 14
volperiod = "2W"
Case 14 To 21
volperiod = "3W"
Case 22 To 30
volperiod = "1M"
Case 31 To 60
volperiod = "2M"
Case 61 To 90
volperiod = "6M"
Case 91 To 180
volperiod = "9M"
Case 181 To 270
volperiod = "12M"
Case 271 To 450
volperiod = "18M"
Case 451 To 720
volperiod = "2Y"
Case Is > 721
End Select
Set plageStrike = wsVol.Range("C1:D1")
Set vol = plageStrike.Find("Strike_" & weightStrike, Range("C1"), SearchOrder:=xlByColumns)
volColumns = NumCol2Lettre(vol.Column)
With wsVol
.AutoFilterMode = False
.Range("A2").AutoFilter field:=1, Criteria1:=Array(2, dateCalculation), Operator:=xlFilterValues
.Range("A2").AutoFilter field:=2, Criteria1:=volperiod
Set Rng = .AutoFilter.Range
MsgBox .Range(volColumns & "2:" & volColumns & .Cells(Rows.Count, volColumns).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
End With
End Sub
Mercii et bonne journée
Lucy