[Function custom] création d'une fonction perso. bug pour son affichage
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous,
J'ai voulu créer une fonction perso, mais, un problème subsiste sur cette fonction de mon côté, v.Excel 2016 Fr
Objet: création d'une fonction personnalisée j'ai un bug pour son affichage pour l'aide de cette fonction et de plus la fonction BISSEXTILE
Voici dans un Module1:
Option Explicit
' source : https://excel.quebec/excel-formules-et-fonctions/excel-fonction-personnalisee/
' test Andre13 pour création de cette fonction
'24/02/2021
' -----------------------------------------------------
Sub DescribeFunction()
' Permet d'ajouter une fonction personnalisée dans l'assistant de fonction
' et dans la catégorie de son choix.
Dim FuncName As String ' NEW il y avait 1 faute ici
Dim FuncDesc As String
Dim Category As String
Dim ArgDesc(1 To 1) As String
FuncName = "BISSEXTILE"
FuncDesc = "Trouve la plus proche année bissextile vers le futur" 'Description de la Fonction
Category = 2 'Catégorie Date et Heure
ArgDesc(1) = "Année pour laquelle une recherche est faite" 'Description du 1er argument
Application.MacroOptions _
Macro:=FuncName, _
Description:=FuncDesc, _
Category:=Category, _
ArgumentDescriptions:=ArgDesc
End Sub
Function BISSEXTILE(Annee As Integer) As Integer
'Trouve la plus proche année bissextile vers le futur
Dim varResteDivision As Double
varResteDivision = Annee / 4 - WorksheetFunction.RoundDown(Annee / 4, 0) ' NEW il y avait 1 faute ici
Select Case varResteDivision
Case 0 'C'est une année bissextile(varResteDivision = 0)
BISSEXTILE = Annee
Case 0.25 'Cela fait un an depuis la dernière année bissextile (varResteDivision =0.25)
BISSEXTILE = Annee + 3
Case 0.5 'Cela fait 2 ans depuis la dernière année bissextile (varResteDivision =0.5)
BISSEXTILE = Annee + 2
Case 0.75 'Cela fait 3 ans depuis la dernière année bissextile (varResteDivision =0.75)
BISSEXTILE = Annee + 1
End Select
End Function- aucune aide ne s'affiche sur cette fonction, même si je me dirige sur le ruban, (Formules, Date et Heure)
- je l'a vois présente dans Fx personnalisé à côté de la barre de formule mais aucune réaction
- Note: j'ai ôté l'Option Explicit sur la feuille 1 et dans le Module 1
merci d'avance pour votre aide, ceci ne presse pas !
ci-joint le classeur
crdlt,
André
Salut André !
Edit : Excuse-moi, j'ai répondu trop vite, à côté du problème... Je cherche en attendant.
A plus,
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Merci 3GB
pas de soucis 3Gb et merci
j'ai vu peut-être qu'il fallait déclarer la fonction lors, de l'ouverture du classeur dans le ThisWorkbook à l'ouverture Workbook_Open
apparemment dans le ruban cela fonctionne correctement dans Formules, Date et Heure il apparaît BISSEXTILE, mais pétard le détour que cela fait, bizarre
Note: mais la fonction ne fonctionne pas encore grrr, je dois me tromper quelque part, grrrOption Explicit
Private Sub Workbook_Open()
Application.MacroOptions Macro:="BISSEXTILE", Description:="Trouve la plus proche année bissextile vers le futur", Category:=2
End Submerci d'avance
Note : trouve l'année la plus proche dans son future
2 petites erreurs trouvées : String et non Sting + WorksheetsFunction le s de trop
Re André,
J'ai essayé de le faire manuellement en reprenant ton lien (puis d'autres trouvés sur Internet disant la même chose) mais impossible d'arriver à quelque chose...
J'arrive seulement à mettre une description, notamment en faisant clic droit sur le code de la fonction/ Explorateurs d'objets/Clic droit sur le titre de la fonction/Propriété.
Mais je n'arrive pas à décrire les paramètres...
Est-ce que tu as essayé manuellement toi ?
Je vais essayer ton code pour voir s'il fonctionne.
Pour le code de la fonction, je t'en propose un autre (c'était ma réponse en fait que j'ai effacée) :
Function BISSEXTILE(Annee As Integer) As Integer
'Trouve la plus proche année bissextile vers le futur
dim estbiss as boolean 'variable booléenne permettant de tester si l'année est bissextile, par défaut sur False
do while estbiss = false 'tant que estbiss est false
if Dateserial(Annee, 12, 31) - Dateserial(Annee, 1, 1) < 365 then 'si la différence entre les 2 extrémités de l'année est inférieure à 365 (donc si l'année compte moins de 366 jours)
Annee = Annee + 1 'incrémentation Annee
else 'sinon
estbiss = true 'estbiss = true >> sortie boucle
end if
loop
BISSEXTILE = Annee
End FunctionIl est possible de l'écourter en se passant de la variable estbiss.
Ici, l'avantage c'est que cela comprend toutes les années bissextiles (parce qu'il existe des années multiples de 4 qui ne sont pas bissextiles > les années multiples de 100 sauf celles multiples de 400)...
Sinon, je ne vois pas pourquoi ça ne marche pas... En C2, tu es sûr d'avoir un nombre ?
Cdlt,
J'ai pas vu que tu avais trouvé...
Est-ce que tu as la description alors ?
Edit : Avec la macro, ça marche chez moi ! Merci beaucoup, c'est génial ! C'est étonnant que je n'y arrive pas manuellement...
A plus,
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
merci 3Gb, je vais opté pour ta fonction @ toi lol
oui sur la cellule C5 s'était bien le format de cellule en nombre,
je me suis aperçu de 2 grosses fautes j'ai rectifié sur le 1er post de ce fil de discussion, s'était la variable String, j'avais oublier de mettre le 'r' de string, et l'autre erreur le WorksheetsFunction le s de trop, tout les deux mal orthographiés ce qui, faisait que BISSEXTILE la formule n'était pas opérationnelle donc faussé
j'ai réussi cela affiche bien l'année future la plus proche pour BISSEXTILE
une ch'tite capture d'écran, le classeur test003 ci-joint du post précédent est ok
merci@toi, je vais faire ta fonction personnalisé ^^ et te tiens au courant
crdlt,
André
Merci André ! Oui, j'obtiens bien ce résultat avec ton code ! J'aurais voulu le faire à la main (pour savoir le faire sans utiliser la macro sur tous les fichiers)... Mais tant pis, j'essaierais de retenir application.macrooptions
A bientôt,
bonsoir,
Ici, l'avantage c'est que cela comprend toutes les années bissextiles (parce qu'il existe des années multiples de 4 qui ne sont pas bissextiles > les années multiples de 100 sauf celles multiples de 400)...y compris l'erreur d'avoir volontairement considéré que 1900 est une année bissextile pour rester compatible avec lotus 123.
Salut h2so4 !
Ah, je ne savais pas, je suis allé regardé à l'instant (ce ne sont pas des années que j'utilise souvent^^).
Merci à toi !
Cdlt,
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
coucou et merci H2so4 pour l'information 1900
@tous
petite précision, cette fonction personnalisée BISSEXTILE, classeur ci-dessus Test003
Il se peut qu'une fois le classeur fermé puis lors de la création d'un nouveau classeur Excel, sur cette fonction personnalisé vous puissiez voir ' BISSEXTILE-v1.0-Function-test003--ok dans Formule, Date et Heure à la place de BISSEXTILE, ne pas s'alarmer!
DESINSTALLATION de cette fonction manuellement : pour effectuer sa désinstallation voir dans le Ruban : Options Excel, menu de droite, Personnalisé le Ruban, puis à droite à la liste déroulante choisir Onglets Principaux, cliquer sur le signe + de Formules puis, Bibliothèque de Fonctions cliquer sur le signe + de DateHeure et Réinitialisations puis Ok
Note: il faudra fermer le classeur et rouvrir un classeur vierge pour que cela prenne effet, afin de vérifier si cela à fonctionner allez sur le menu du ruban, Formules et vérifier Date et Heure si il n'y a plus BISSEXTILE c'est oki
J'ai un peu galéré
crdlt,
André
Merci André pour cette précision ! C'est pratique ça : on se donne du mal à créer des fonctions perso et Excel les personnalise finalement à notre place...