Fonction LET pour Excel 2013
RésoluBonjour à tous,
Dans le but d'avoir une fonction LET pour mon Excel 2013 j'ai consulté l'IA Gemini qui m'a concocté ce code
Function LET_2013(ParamArray args() As Variant) As Variant
‘Exemple de fonction : =LET_2013("x"; A1*2; "y"; B1+5; "x + y")
Dim i As Long
Dim numArgs As Long
Dim varName As String
Dim varVal As Variant
Dim expr As String
numArgs = UBound(args) - LBound(args) + 1
If numArgs < 3 Or (numArgs Mod 2 = 0) Then
LET_2013 = CVErr(xlErrValue)
Exit Function
End If
expr = CStr(args(UBound(args)))
For i = LBound(args) To UBound(args) - 1 Step 2
varName = CStr(args(i))
varVal = args(i + 1)
If IsError(varVal) Then
LET_2013 = varVal
Exit Function
ElseIf TypeName(varVal) = "String" Then
varVal = """" & Replace(varVal, """", """""") & """"
ElseIf TypeName(varVal) = "Date" Then
varVal = CDbl(varVal)
ElseIf TypeName(varVal) = "Boolean" Then
varVal = IIf(varVal, "TRUE", "FALSE")
End If
expr = Replace(expr, varName, CStr(varVal))
Next i
LET_2013 = Application.Evaluate(expr)
End Function
Puis j'ai ajouté des arguments de la fonction en consultant d'anciennes fonctions ajoutées à mon Excel
Sub DescriptionFonction()
‘Déclaration des variables
Dim NomFonction As String
Dim DescriptionFonction As String
Dim ArgumentDesc (1 To 9) As String
‘Affectation des variables
NomFonction ="LET_2013"
DescriptionFonction ="La fonction LET_2013 attribue des noms aux résultats des calculs. Elle permet de stocker des calculs intermédiaires, des valeurs ou de définir des noms à l’intérieur d’une formule. Ces noms ne s’appliquent que dans le cadre de la fonction."
' Descriptions des 9 premiers arguments visibles dans la fenêtre fx
ArgumentDesc (1) = "Nom de la variable 1 (entre guillemets, ex: "x")."
ArgumentDesc (2) = "Valeur ou formule attribuée à la variable 1."
ArgumentDesc (3) = "Nom de la variable 2 (optionnel) ou calcul final utilisant la variable définie (entre guillemets)."
ArgumentDesc (4) = "Valeur ou formule attribuée à la variable 2."
ArgumentDesc (5) = "Nom de la variable 3 (optionnel) ou calcul final utilisant les variables définies (entre guillemets)."
ArgumentDesc (6) = "Valeur ou formule attribuée à la variable 3."
ArgumentDesc (7) = "Nom de la variable 4 (optionnel) ou calcul final utilisant les variables définies (entre guillemets)."
ArgumentDesc (8) = "Valeur ou formule attribuée à la variable 4."
ArgumentDesc (9) = "Calcul final utilisant les variables définies (entre guillemets)."
'Insertion de la fonction dans la bibliothèque des fonctions d'Excel
Application.MacroOptions _
Macro:=NomFonction, _
Description:=DescriptionFonction, _
ArgumentDescriptions:=ArgumentDesc
End Sub
Mesdames/Messieurs les cadors du code VBA j'aimerai savoir s'il y a des rectifications à apporter.
Je vous remercie par avance.
Cordialement
Windows / Chrome 152.0.0.0
3 réponses
-
-
-
@danielc0
Par contre avec Copilot, ceci fonctionne, au moins pour une plage de cellules :
Public Function LET_2013(ParamArray Arguments() As Variant) As Variant On Error GoTo Erreur Dim i As Long, Dernier As Long Dim NomRecherche As String Dernier = UBound(Arguments) ' Couples nom/valeur + résultat final If Dernier < 2 Or (Dernier Mod 2) <> 0 Then LET_2013 = CVErr(xlErrValue) Exit Function End If NomRecherche = CStr(Arguments(Dernier)) ' Recherche du nom demandé For i = 0 To Dernier - 1 Step 2 If StrComp(CStr(Arguments(i)), NomRecherche, _ vbTextCompare) = 0 Then If IsObject(Arguments(i + 1)) Then LET_2013 = Arguments(i + 1).Value Else LET_2013 = Arguments(i + 1) End If Exit Function End If Next i LET_2013 = CVErr(xlErrName) Exit Function Erreur: LET_2013 = CVErr(xlErrValue) End FunctionAu moins, ça fonctionne avec Excel 365. A tester avec Excel 2013.
Daniel
-
-
Salut Daniel
J'ai changé par ton code mais comme je n'y comprends toujours rien en VBA je fais confiance.
Je ne cherche pas une fonction très compliquée du moment que ce soit plus lisible pour des calculs moyennement complexes.
Par contre pour la partie description j'ai certainement fait une erreur en enregistrant car, à part les 9 cases visibles je n'ai aucune explication dans la fenêtre fx. As-tu un mode d'emploi ?
Cordialement
-
Un exemple pour affecter la variable "tbl" à la plage A1:A10 et afficher celle-ci :
=LET_2013("tbl";A1:A10;"tbl") =LET_2013("tbl";RACINE(A1:A10);"tbl")Par contre, ça ne fonctionne pas pour :
=LET_2013("tbl";A1:A10;RACINE("tbl"))Je regarde, mais j'ai l'impression qu'il va y avoir une tonne de cas particculiers
Daniel
-
@danielc0
En fait, ça me dépasse totalement. Quand j'entre par exemple :
=LET_2013("tbl";A1:A10;"tbl"*2)La formule retourne "#VALEUR!" sans que le code VBA soit lancé. Je laisse tomber. Si tu n'as pas de réponse ici, pose la question sur un autre forum.
Daniel
-
-
Bonjour,
Daniel, je te remercie.
Finalement j'abandonne aussi ; ça ne fonctionne pas correctement et ça ralentit l'ouverture d'Excel, je supprime cette fonction complémentaire.
Cordialement
