IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction perso non rafraichie [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 23
    Par défaut Fonction perso non rafraichie
    Bonjour,

    Je travaille sur Excel 2007 et je rencontre un petit problème.

    J'ai créé une fonction perso : RechercheSA(x,y), qui fait appel à la fonction hlookup. Jusqu'à là, je n'ai pas de soucis, tout fonctionne correctement.

    Mon problème : quand je modifie les valeurs qui se trouvent dans le tableau source (là où va aller chercher la fonction HLookUp), le résultat de la fonction RechercheSA ne se met à jour que si je tape sur Entrée dans la barre où est écrite la fonction sur ma feuille Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function RechercheSA(Cellule, ligne)
        Dim tableau
        tableau = Sheets("SA").Range(Sheets("SA").Cells(3, 3), Sheets("SA").Cells(23, 1000))
        RechercheSA = Application.WorksheetFunction.HLookup(Cellule, tableau, ligne, False)
    End Function
    Pour régler ce problème, j'ai tenté de créer une mini macro de rafraichissement qui se déclenche sur modification de n'importe quelle cellule de n'importe quelle page de mon fichier, en vain :

    Dans ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        ThisWorkbook.RefreshAll
    End Sub
    Quelqu'un peut il m'aider ??

    Merci beaucoup
    Cordialement

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    bonjour dans ta fonction essaye en rajoutant après la déclaration des variables:

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne voudrais pas être rabat-joie mais est-ce impératif d'utiliser une fonction personnalisée pour obtenir ce résultat.
    La combinaison des fonctions INDEX et EQUIV renverra le même résultat et ce sans utiliser une fonction volatile qui est gourmande en ressource.
    Manifestement tu travailles sur une plage $C$3:$ALL$23 et ta recherche est horizontale donc de $C$3:$ALL$3
    Ces deux fonctions te renvoient le résultat escompté et tu restes avec des fonctions natives d'excel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX($C$3:$ALL$23;ligne;EQUIV(Cellule;$C$3:$ALL$3;0))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 23
    Par défaut
    Bonjour Philippe,

    En effet, je remarque que ces fonctions volatiles sont tres gourmandes en ressouces... Merci de votre intervention

    Si vous regardez bien, ma fonction RechercheSA va chercher dans une autre page (la page "SA").
    Comment modifiriez-vous la formule que vous m'avez proposée ?
    C'est une des raisons pour laquelle j'avais pensé à créer une nouvelle fonction.

    De plus, par la suite, j'utilise ma fonction dans une troisième page comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(AND(NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10))<1000,NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10))>0),NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10)),0)
    Ce que je ne pourrais pas faire avec votre solution puisque nous sommes limités à un certain nombre de fonction dans une même formule.
    (A moins qu'il existe une manière plus intelligente d'écrire ma dernière formule)

    J'espère que j'ai bien expliqué mon problème

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Cécile,
    A la lecture des fonctions imbriquées, je comprends aisément qu'il y ait un fameux ralentissement.
    Le fait de faire une recherche sur une autre feuille ne change rien à l'affaire, les fonctions d'excel fonctionnent parfaitement avec d'autres feuilles du même classeur et même avec des feuilles d'autres classeurs.
    Pour éviter de répéter le nom de la feuille et la plage, j'utiliserais une plage nommée ce qui serait plus simple et surtout plus lisible.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 23
    Par défaut
    Donc, si j'ai bien compris, vous me conseillez ça, à la place de mon RechercheSA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(SA!$C$3:$ALL$23;ligne;MATCH(Cellule;SA!$C$3:$ALL$3;0))
    Et à la place de cette formule ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(AND(NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10))<1000,NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10))>0),NETWORKDAYS(RechercheSA(G1,9),RechercheSA(G1,10)),0)
    Je dois remplacer tous mes RechercheSA par INDEX(...)? Je ne suis pas sûre que c'est ce que vous m'avez conseillé.

    Et j'avais oublié de vous parler d'un autre soucis qui m'avait amené à penser à utiliser une nouvelle fonction : si je rajoute une colonne dans la page "SA" juste avant la colonne C, ma formule IF(AND...) va modifier ma plage de sélection en D3:ALL23 alors que je veux garder la plage C3:ALL23...

    Merci infiniment pour votre aide !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 23
    Par défaut
    Tous mes respects Hervé !!!!

    Réponse rapide et révolutionnaire (à mes yeux)

    Félicitation pour le forum et aux personnes qui nous renseignent !

    Bonne fin de journée

    Cécile

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Recalcule fonction perso non maitrisé
    Par Qwazerty dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/05/2009, 10h10
  2. fonction utilisateur non reconue par sql server 2000
    Par ouedmouss dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/09/2005, 07h46
  3. [C#] Label non rafraichi
    Par BiM dans le forum ASP.NET
    Réponses: 19
    Dernier message: 07/04/2005, 16h00
  4. [JTable]cellules non rafraichies
    Par freudy dans le forum Composants
    Réponses: 3
    Dernier message: 02/07/2004, 16h03
  5. Réponses: 4
    Dernier message: 07/12/2002, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo