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 ?

8 réponses

  1. 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
    1. 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
  2. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonsoir,

      Une seule fois Application.Volatile devrait être suffisant non ?
      eric
      0
  3. 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
  4. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   957
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   957
     
    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
  8. bla
     
    Intéressant,

    pourquoi faut-il déclarer les variables ?
    0
  9. 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