Autres une Function doit elle être dans un module ?

Macpoy

XLDnaute Impliqué
bonjour le forum, j'ai 2 Function que Pierre-Jean m'a donné il y a quelques années, pour le moment elles sont placées dans un module, et j'ai beaucoup de Sub qui passent par ces function sans que cela soit utile (perte de temps de réaction de la sub !) . puis je faire intervenir ces function avant la fermeture du classeur ?

Function fin_mois(LaDate)
If Month(LaDate) = 12 Then
m = "01"
y = Year(LaDate) + 1
Else
m = Month(LaDate) + 1
y = Year(LaDate)
End If
fin_mois = CDate("01/" & m & "/" & y) - 1
End Function

Function dernier_jour_ouvre(LaDate) ' sans travail ni dimanche ni lundi
For n = fin_mois(LaDate) To fin_mois(LaDate) - 7 Step -1
If Weekday(n) <> 1 And Weekday(n) <> 2 Then
dernier_jour_ouvre = n
Exit For
End If
Next
End Function

merci d'avance de vous pencher sur ce petit problème.
 
C

Compte Supprimé 979

Guest
Bonjour Macpoy,

Ces fonctions doivent obligatoirement est placées dans un module, que je nomme personnellement : Fonctions (original :p)

En revanche on peut très bien les appeler à n'importe quel moment et à n'importe quel endroit, dans Workbook_BeforeClose par exemple

@+
 
Dernière modification par un modérateur:

Macpoy

XLDnaute Impliqué
Bonjour le fil

[Juste en passant]
Issu de mes archives
Une petite fonction qui fait la même chose mais elle est moins longue à écrire dans VBE. ;)
VB:
Function FINMOIS(vDate As Date)
FINMOIS = CDate(DateSerial(Year(vDate), Month(vDate) + 1, 0))
End Function
Et pour tester
VB:
Sub Test()
MsgBow FINMOIS(Date)
End Sub
merci je vais tenter.
Bonjour Macpoy
Je ne comprends pas bien :
j'ai beaucoup de Sub qui passent par ces function sans que cela soit utile ?????
Pierre-Jean si tu l'accepte, je t'envoie le classeur en question. mais il fait 2,25 Mo
 

Staple1600

XLDnaute Barbatruc
Re

=>Macpoy
Pour infos
Les procédures et les fonctions sont forcément stockées dans un Module
Ci-dessous une Procédure
Sub test()
Msgbox NOMUSER
End Sub

Ci dessous une Fonction
Function NOMUSER() As String
NOMUSER=Application.Username
End Function
 

Staple1600

XLDnaute Barbatruc
Re

De quelle fonctionnalité tu parles?
Si tu parles d'avoir une fonction disponible pour tous les classeurs
Tu peux:
1) stocker tes fonctions dans Personal.xlsb
(le classeurs de macros personnelles)
2) ou les stocker dans un classeur "complément" que tu enregistras en *.xlam (à paramétrer dans Fichier/Options/Compléments/Gérer/Atteindre
et là Parcourir et tu pointes sur ton *.xlam
 

Macpoy

XLDnaute Impliqué
Re

De quelle fonctionnalité tu parles?
Si tu parles d'avoir une fonction disponible pour tous les classeurs
Tu peux:
1) stocker tes fonctions dans Personal.xlsb
(le classeurs de macros personnelles)
2) ou les stocker dans un classeur "complément" que tu enregistras en *.xlam (à paramétrer dans Fichier/Options/Compléments/Gérer/Atteindre
et là Parcourir et tu pointes sur ton *.xlam
je parle de Function très utiles pour le classeur que je tente de faire évoluer en ce moment.
les voici :
Function fin_mois(LaDate)
If Month(LaDate) = 12 Then
m = "01"
y = Year(LaDate) + 1
Else
m = Month(LaDate) + 1
y = Year(LaDate)
End If
fin_mois = CDate("01/" & m & "/" & y) - 1
End Function

Function dernier_jour_ouvre(LaDate) ' sans travail ni dimanche ni lundi
For n = fin_mois(LaDate) To fin_mois(LaDate) - 7 Step -1
If Weekday(n) <> 1 And Weekday(n) <> 2 Then
dernier_jour_ouvre = n
Exit For
End If
Next
End Function

qui sont pour le moment dans un module et sont bizarrement "appelées" lors de l’exécution de certaines macro de mon classeur.
 

Discussions similaires