Fonction personnalisée et mise à jour

Bonjour,

J'utile une fonction personnalisée:

Public Function dossier()

' Cette macro renvoie le nom du dossier dans lequel est enregistré ce fichier.

Dim tableau() As String

tableau() = Split(ActiveWorkbook.Path, "\")

dossier = tableau(UBound(tableau))

End Function

Je ferme ce classeur, copier/ coller du dossier mais dans le nouveau fichier ainsi obtenu la cellule qui contient:

=dossier()

n'est pas mise à jour et je ne parviens pas non plus à l'activer avec:

Private Sub Workbook_Open()

ThisWorkbook.Worksheets(32).Range("B4").Calculate

End Sub

D'avance merci

Bonjour,

ajoute au début :

application.volatile

Mais méfie-toi qu'activeworkbook est le classeur actif, pas celui qui contient la macro.

eric

Bonjour,

Je viens de tester et effectivement ça fonctionne. Là solution n'était donc pas ACTIVATE comme je le pensais. MERCI beaucoup pour cette réponse.

Bonjour,

revoici mon code modifié (car cette fois çi c'est le nom du fichier qui m'intéresse):

Public Function fichier()
    Application.Volatile
    nom = ActiveWorkbook.Name
    fichier = Split(nom, ".")(0)  
End Function

J'utilise plusieurs fichiers. Ces différents fichiers sont essentiellement créer par copier-coller et contiennent systématiquement la macro concernée. Par ailleurs, je viens de faire un test avec deux fichiers ouverts et ça marche. Aussi suis-je concerné par : Mais méfie-toi qu'activeworkbook est le classeur actif, pas celui qui contient la macro.?

Bonjour,

Aussi suis-je concerné par : Mais méfie-toi qu'activeworkbook est le classeur actif, pas celui qui contient la macro.?

Dans Classeur1!A1 tu mets ta fonction, ta cellule contient "Classeur1.xls"

Tu actives un Classeur2, ta cellule Classeur1!A1 contiendra maintenant "Classeur2.xls" puisque tu fais référence au classeur actif.

Peut-être pas gênant selon l'usage que tu fais de ta cellule, mais faux si c'est le nom du classeur de cette cellule que tu voulais.

Si tu veux que ça reste Classeur1.xls il faut mettre ThisWorkbook.name (nom du classeur que contient la macro).

Ou bien si tu veux une fonction unique (code présent une seule fois) utilisable dans tous les classeurs qui donne le nom du classeur où la fonction est écrite tu peux faire :

Function nomClasseur()
    nomClasseur = Application.Caller.Parent.Parent.Name
End Function

eric

Merci pour cette réponse. C'est un point qui me parait clair maintenant. MERCI

Rechercher des sujets similaires à "fonction personnalisee mise jour"