Fonction ne se met pas à jour

  • Initiateur de la discussion Initiateur de la discussion MarieAude
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
406
Retour