xUpsilon
XLDnaute Accro
Chers confrères,
J'ai un problème assez basique. Dans un fichier Excel, j'extrais les données d'une BDD SQL, qui ressort donc dans un tableau structuré.
Suite à diverses manipulations, je souhaite pousser dans une colonne additionnelle de ce tableau une formule personnalisée, qui se comporte comme ceci :
A priori, rien de bien méchant : après avoir créé ma fonction, je l'insère dans ma colonne supplémentaire de mon tableau structuré, qui se remplit correctement et calcule correctement tous les résultats.
Sauf qu'après ça, je décide de changer une valeur dans ma feuille "DB_SOR", et je me rends compte que le recalcul automatique ne se fait pas. Rien de très surprenant vous allez me dire, vu qu'il s'agit d'une UDF, il suffit de forcer le calcul avec Shift + F9. Sauf que c'est bien là le problème : même en utilisant "Calculer la feuille", le calcul ne s'effectue pas, je suis obligé de retourner dans chaque cellule l'une après l'autre et de valider par entrée pour que le recalcul se fasse.
S'agit-il d'un bug connu ? Y a t'il une alternative ? (pas de Application.Volatile, le fichier risque de devenir trop lourd pour l'emploi souhaité)
Merci et bonne soirée,
J'ai un problème assez basique. Dans un fichier Excel, j'extrais les données d'une BDD SQL, qui ressort donc dans un tableau structuré.
Suite à diverses manipulations, je souhaite pousser dans une colonne additionnelle de ce tableau une formule personnalisée, qui se comporte comme ceci :
VB:
Const sFeuil_DB As String = "DB_SOR"
Const nCol_SOR As Integer = 1
Const nCol_Dlv As Integer = 2
Const nCol_Combi As Integer = 3
Const nCol_Long As Integer = 4
Const nPremLig As Integer = 2
Function TrouveLongBrute(Section, Longueur, Dlv, SOR)
Dim oWs_DB As Excel.Worksheet
Set oWs_DB = ThisWorkbook.Worksheets(sFeuil_DB)
Combinaison = Left(Section, 8) & "/" & Longueur
nDerLig = oWs_DB.Range("A" & Rows.Count).End(xlUp).Row
If InStr(1, Combinaison, "+") Then
For nLig = nPremLig To nDerLig
DateDlv = DateSerial(Right(oWs_DB.Cells(nLig, nCol_Dlv), 2), Mid(oWs_DB.Cells(nLig, nCol_Dlv), 4, 2), Left(oWs_DB.Cells(nLig, nCol_Dlv), 2))
If oWs_DB.Cells(nLig, nCol_SOR) = SOR And oWs_DB.Cells(nLig, nCol_Combi) = Combinaison And DateDlv = Dlv Then
TrouveLongBrute = oWs_DB.Cells(nLig, nCol_Long)
Exit Function
End If
Next nLig
End If
TrouveLongBrute = Longueur
End Function
Sauf qu'après ça, je décide de changer une valeur dans ma feuille "DB_SOR", et je me rends compte que le recalcul automatique ne se fait pas. Rien de très surprenant vous allez me dire, vu qu'il s'agit d'une UDF, il suffit de forcer le calcul avec Shift + F9. Sauf que c'est bien là le problème : même en utilisant "Calculer la feuille", le calcul ne s'effectue pas, je suis obligé de retourner dans chaque cellule l'une après l'autre et de valider par entrée pour que le recalcul se fasse.
S'agit-il d'un bug connu ? Y a t'il une alternative ? (pas de Application.Volatile, le fichier risque de devenir trop lourd pour l'emploi souhaité)
Merci et bonne soirée,