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 :

Mise à jour fonction personnalisée [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut Mise à jour fonction personnalisée
    Bonjour,

    Contrairement aux fonctions de base d'excel, les fonctions personnalisées ne se mettent pas à jour automatiquement quand on change la valeur de tout ou partie des arguments . Il faut sélectionner la cellule qui la contient, cliquer sur la formule puis valider pour que la mise à jour du résultat se fasse. Je suppose que les programmeurs ont trouvé une solution à ce problème. Merci d'avance pour votre retour.

    Afin d'être plus concret, voici une présentation simplifiée du problème. Supposons que l'on veuille calculer un chiffre d'affaire mensuel. La première cellule d'une colonne donnée identifie le mois, la seconde ligne propose la quantité vendue, la troisième, le prix unitaire. Dans la quatrième ligne, on pourrait donc écrire quelque chose comme = B2 * B3, C2 * C3, ... Pour l'exemple, on a écrit une fonction Ventes(Mois) qui fait la même chose, c'est elle qui récupère les valeurs x2 et x3 d'une colonne et renvoie le produit en x4

    La première mouture se met automatiquement à jour dès que l'on modifie la valeur d'un argument ; la seconde, implique la manipulation décrite plus haut pour atteindre ce résultat. Donc, comment faire pour que les deux moutures fonctionnent identiquement ?

    L'exemple ayant été volontairement simplifié, mettre en oeuvre la première mouture n'est pas envisageable. Merci d'avance pour votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Au début de ta fonction écris :

    https://msdn.microsoft.com/fr-fr/lib.../ff195441.aspx

    Philippe

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Contrairement aux fonctions de base d'excel, les fonctions personnalisées ne se mettent pas à jour automatiquement quand on change la valeur de tout ou partie des arguments
    Si, s'il s'agit de valeurs de cellules. Dans les arguments il faut mettre les cellules qui induisent le changement même si tu ne les utilises pas directement dans ta fonction.
    Si A2= A1*3 c'est A1 que tu dois passer en argument et non A2 même si c'est celui-ci que tu utilises.
    Volatile n'est nécessaire que si des changements ne génèrent pas d'événement (couleur etc)
    eric

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    @Philippe JOCHMANS
    Bonjour Monsieur,

    Merci pour votre réponse. Elle ne produit malheureusement pas l'effet escompté. J'ai également essayé ActiveWorkBook.RefreshAll insérée dans l'événement Change de la worksheet concernée, sans plus d'effet.

    La ListBox sur cette page propose deux options au choix de l'utilisateur qui font que la fonction Ventes d'un mois donné, qui intervient dans un tableau sur une autre page, présente résultat avec un signe plus ou un signe moins selon l'usage qui est fait ensuite de ce montant des ventes.

    Quel événement ou qu'elle commande permettrait d'automatiser le recalcul de la fonction Ventes lors d'une changement d'option ? D'avance merci de votre aide.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    La ListBox sur cette page propose deux options au choix de l'utilisateur
    passer en paramètre la cellule liée.
    eric

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Par défaut
    Bonjour à toutes et à tous,

    J'ai créé une fonction pour calculer un écart-type sur distribution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Function ECARTTYPESURDISTRIB(NOTE As Range, DISTRIB As Range) As Single
     
        Application.Volatile
     
        Dim la, ca, debut, fin, colonnenote, colonnedistrib, i As Integer
        Dim pdtcumul, pdt, etsd As Single
     
        la = ActiveCell.Row
        ca = ActiveCell.Column
     
        debut = NOTE.Row
        fin = debut + NOTE.Rows.Count - 1
     
        colonnenote = NOTE.Column
        colonnedistrib = DISTRIB.Column
     
        pdtcumul = 0
        pdt = 0
     
            For i = debut To fin
     
                pdt = (Cells(i, colonnenote) - Cells(la - 1, colonnedistrib)) ^ 2 * Cells(i, colonnedistrib)
                pdtcumul = pdtcumul + pdt
                pdt = 0
     
            Next i
     
        etsd = Sqr(pdtcumul)
     
        ECARTTYPESURDISTRIB = etsd
     
    End Function
    La feuille excel ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    NOTE DISTRIBUTION
    0               1%
    1               3%
    2               9%
    3               20%
    4               12%
    5               5%
    6               10%
    7               10%
    8               10%
    9               10%
    10             10%
                    ici cellule contenant la moyenne
                    ici cellule contenant la formule de l'écart type sur distribution
    Le truc c'est que les pourcentages sont calculés "à chaud", ils dépendent d'autres cellules et il m'est impossible de mettre en paramètre de la fonction les cellules liées.
    Existe-t-il une solution alternative ?

    Merci de votre retour.

    Christophe.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    il m'est impossible de mettre en paramètre de la fonction les cellules liées.
    C'est rarement impossible, pourquoi ça ne l'est pas dans ton cas ?

    Existe-t-il une solution alternative ?
    Tu as mis Volatile. Avec F9 la fonction sera ré-évaluée.
    Tu te sers d'activecell (choix étrange pour une fonction, j'espère que tu ne te sers pas du résultat dans d'autres calculs qui seront erronés la plupart du temps...)
    Tu peux te servir de l'événement Change sur la plage induisant le recalcul. Une fonction dans ce cas n'est plus absolument nécessaire.
    eric

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

Discussions similaires

  1. [XL-2010] Mise à jour Fonction personnalisée
    Par Ashireon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2013, 13h17
  2. [XL-2003] Mise à jour fonction
    Par bigboy dans le forum Excel
    Réponses: 5
    Dernier message: 03/10/2012, 20h36
  3. [mise à jour tableau en fonction du button radio]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 30/12/2005, 11h41
  4. [JSP] Mise à jour d'un menu déroulant en fonction d'un autre
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/12/2005, 13h32
  5. Réponses: 3
    Dernier message: 15/11/2005, 18h50

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