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 :

[XL-2003] Comment faire pour exécuter automatiquement dans une cellule une fonction VBA ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Points : 121
    Points
    121
    Par défaut [XL-2003] Comment faire pour exécuter automatiquement dans une cellule une fonction VBA ?
    Bonjour,

    Comment faire exécuter automatiquement dans une cellule une fonction réalisée en VBA ?


    Mon exemple :

    J'ai réalisé une fonction en VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Couleur(feuille, ligne, colonne As Integer) As Long
       Couleur = Sheets(feuille).Cells(ligne, colonne).Interior.ColorIndex
    End Function

    si je met dans la cellule B1 de la 1ère feuille "=couleur(1;1;1)", la couleur contenue dans la cellule A1 de la feuille 1 s'affiche bien dans la cellule B1 si je viens mettre mon curseur dans B1 et que je frappe sur la touche Entrée de mon clavier.

    Je n'arrive pas à obtenir que le contenu de la cellule B1 change automatiquement quand je change la couleur de la cellule A1.

    Que faut il faire pour que la mise à jour de la cellule B1 soit automatique ?

    Merci de vos réponses

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    bonjour,


    Je n'ai pas trouvé le moyen de le faire spécifiquement quand des couleurs sont modifiées, par contre il est possible d'intercepter les modifications des selections dans le classeur.
    Dans Thisworkbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Calculate
    End Sub
    edit : attention toutefois, ça peut être lourd de lancer le calcul à chaque modification de selection.
    Pour un classeur pas trop lourd avec quelques formules comme dans le test que j'ai fais, ça marche plutot bien.

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Points : 121
    Points
    121
    Par défaut
    merci aalex_38,

    Mais n'y a-t-il pas un moyen simple pour que le calcul se fasse automatiquement comme par exemple pour l'addition de deux cellules dans une troisième ?

  4. #4
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    Malheureusement non, car le changement de couleur ne déclenche aucun événement particulier que l'on pourrait utiliser pour forcer la mise à jour.

    Une solution un peu bâtarde est de rendre ta fonction volatile, ce qui provoque un recalcul à chaque fois qu'un calcul est effectué dans une cellule quelconque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function Couleur(feuille, ligne, colonne As Integer) As Long
       Application.Volatile
       Couleur = Sheets(feuille).Cells(ligne, colonne).Interior.ColorIndex
    End Function
    Cela signifie que la MAJ sera faite régulièrement, en cas de modif quelconque déclenchant un calcul, ce qui n'est malheureusement pas le cas d'un simple changement de couleur
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Points : 121
    Points
    121
    Par défaut
    Merci Bigalo,

    Comme tu dis, c'est batard, mais ça marche au moins quand on relance un calcul par la touche F9, et on n'est pas obligé de mettre à jour cellule par cellule !

    Merci

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut Exécution de fonction automatique
    J'ai une remarque , la fonction colorindex est du type variant car il y a des valeurs du type xlColorIndexAutomatic, xlColorIndexnone ( avec un long ça marche dans 99% des cas , je le fais).
    Pour le forcer le rafraichissement, je fais F9 .

    et pour simplifier , on peut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function Couleur(ByRef zone As Range) As variant
       Application.Volatile
       Couleur = zone.Interior.ColorIndex
    End Function

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Points : 121
    Points
    121
    Par défaut
    Merci CodeFacile,

    Tu as raison, vaut mieux utiliser le bon type de variable si l'on veut que ça marche à tous les coups

    Désolé d'en savoir si peu, mais pourquoi introduis tu la variable zone par un "ByRef" ?

    A+

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/09/2014, 11h05
  2. Réponses: 1
    Dernier message: 10/12/2012, 12h58
  3. comment faire pour integrer OpenOffice dans une application wampServer
    Par besmbesm dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/03/2011, 08h14
  4. Réponses: 3
    Dernier message: 25/09/2009, 11h48
  5. Réponses: 3
    Dernier message: 08/11/2007, 03h09

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