Excel, fonction personnalisée & actualisation

bla -  
 Skro -
Bonjour,

J'ai créé une fonction sur excel, la voici :

Function LookAtLine(feuille, line, x, y)
LookAtLine = Sheets(feuille).Cells(line + y, x)
End Function

assez simple en effet,
La fonction fonctionne comme un charme à l'exception de la partie actualisation.

Si la valeur contenue dans la cellule cible change, la fonction ne s'en rend pas compte et ne modifie pas sa réponse.

pesser sur F9 ne change absolument rien.
sauvgarder et rouvrir le fichier excel non-plus.

je dois donc sélectionner chaque cellules, peser sur F2 et "enter".

comme j'ai des miliers de cellules utilisant cette fonction, c'est assez chiant si vous permettez l'expression.

est-ce que quelqu'un connais une solution pour mon problème ?
A voir également:

8 réponses

bla
 
Bah, j'ai trouvé en surfant un peu plus.

il s'agit simplement d'insérer ces 3 lignes de codes au dessus de la fonction dans son module visual basic :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub

J'espère que ca va aider quelqu'un d'autre.

Bonne journée
0
bla
 
en fait rajouter ces lignes ne change rien, il s'agit just de modifier quelque chose dans la fenetre visual basic et toutes les fonctions perso d'excel s'actualise.

assez brochafoin.

grgrgrgrgr, ce que j'aime travailler avec des logiciel aussi bien codés.
0
bla
 
Cette syntax semble avoir réglée le problème :

Sub Command1_Click() ' depuis un bouton exp...
LookAtLine
End Sub
Function LookAtLine(feuille, line, x, y)
Application.Volatile
Application.Volatile
LookAtLine = Sheets(feuille).Cells(line + y, x)
Application.Volatile

Calculate

End Function

...maintenant le script s'actualise automatiquement.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

Une seule fois Application.Volatile devrait être suffisant non ?
eric
0
bla
 
heeheheh

Quand l'approche logique ne donne aucun résultat, l'approche illogique est tout ce qu'il reste.

Cela-dit, tu as surement raison, une seule "Application.Volatile" devrait suffire.

(Dans l'hypothèse où cette fonction agit effectivement sur quelque chose)
0
Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   955
 
Salut le forum

Tu aurais pu faire aussi

Function LookAtLine(feuille, line, x, y) 
Application.Volatile
LookAtLine = Sheets(feuille).Cells(line + y, x) 
End Function 


Mytå
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bla
 
N'oublie pas la sub commande d'actualisation

Sub Command1_Click()
LookAtLine
End Sub

je pense que c'est la seule chose qui affecte vraiment l'actualisation.

mais je pourrais me tromper.
0
Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   955
 
Re le forum

Pas besoin si tu écris ta fonction directement dans une cellule

=LookAtLine(feuille, line, x, y)

Tu devrais aussi t'habituer à déclarer tes variables

Function LookAtLine(feuille As String, line As Integer, x As Byte, y As Byte) As String 
Application.Volatile True 
LookAtLine = Sheets(feuille).Cells(line + y, x) 
End Function 


Mytå
Merci de donner suite à votre question, nous ne sommes pas des robots...
Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)]
0
bla
 
Intéressant,

pourquoi faut-il déclarer les variables ?
0
Skro
 
Je n'y comprends rien... J'ai le même problème mais pour ce type de formule :

Function feuille_1(adresse As String)
Application.Volatile True
n = ActiveSheet.Index
feuille_1 = ThisWorkbook.Worksheets(n - 1).Range(adresse)
End Function

Toujours pas de mise à jour...
0