Fonction ne se met pas à jour

MarieAude

XLDnaute Nouveau
Bonjour,

J'ai créé une fonction qui permet de trouver une date dans une colonne en fonction de la dernière cellule non-vide de la colonne d'à côté.

Le code fonctionne lorsque je le teste avec une Sub, mais ne se met pas à jour automatiquement.

J'ai pourtant ajouté la ligne Application.Volatile.


Quelqu'un sait pourquoi ma formule ne fonctionne pas ?

Merci

MA

PS: pensez à activer les macros
 

Pièces jointes

  • Test.xls
    41 KB · Affichages: 52
  • Test.xls
    41 KB · Affichages: 55
  • Test.xls
    41 KB · Affichages: 57

MichD

XLDnaute Impliqué
Re : Fonction ne se met pas à jour

Bonjour,

Remplace ta fonction par celle-ci :


VB:
Public Function TrouverDate(ColonneDate As Range, ColonneX As Range)
Dim R As Long
Application.Volatile
With Worksheets(ColonneDate.Parent.Name)
    R = .Cells(65536, ColonneX.Column).End(xlUp).Row
    TrouverDate = .Cells(R, ColonneDate.Column)
End With
End Function
 

MichD

XLDnaute Impliqué
Re : Fonction ne se met pas à jour

A ) Il y a plusieurs façons d'écrire une même fonction personnalisée.
J'ai tenté d'apporter des correctifs à la tienne en conservant le plus possible le principe de base.

B ) Quand on écrit une fonction personnalisée, on passe en paramètres toutes les variables dont
la fonction aura besoin pour son exécution. En fait, la fonction doit être écrite de la façon
la plus générique possible pour s'appliquer dans un maximum de situations pour ne pas
devoir les multiplier à l'infini.

C ) Une fonction retourne essentiellement un "RÉSULTAT", elle n'est pas faite pour ajouter ou
modifier la couleur d'une plage de cellules et/ou modifier la feuille active de l'application...
Une fonction n'intervient pas au niveau de l'interface de la feuille de calcul.

Ceci étant dit, voici l'explication de la fonction :

'--------------------------------------
Public Function TrouverDate(ColonneDate As Range, ColonneX As Range)
Dim R As Long 'Déclaration de la variable

Application.Volatile 'La fonction est recalculée à chaque fois que la feuille l'est.
'On aurait pu choisir une autre approche ne nécessitant pas sa réévaluation continuelle.
'j'ai simplement voulu respecter ton approche...

'ColonneDate.Parent.Name retourne le nom de la feuille où la fonction est appelée
'En utilisant With / End With cela permet de travailler avec un objet sans devoir
'le sélectionner

With Worksheets(ColonneDate.Parent.Name)
'Trouve la dernière ligne de la colonne C qui est occupée
R = .Cells(65536, ColonneX.Column).End(xlUp).Row
'Trouve la date correspondante dans la colonne d'à côté....
TrouverDate = .Cells(R, ColonneDate.Column)
End With
End Function
'--------------------------------------


Une autre façon d'écrire la même fonction :

Dans ta cellule, tu écris : =TrouverDate(C:C)

VB:
Public Function TrouverDate(ColonneX As Range)
With Worksheets(ColonneX.Parent.Name)
    R = .Cells(65536, ColonneX.Column).End(xlUp).Row
    TrouverDate = .Cells(R, ColonneX.Offset(, -1).Column)
End With
End Function
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11