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 :

Actualiser ses propres fonctions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Par défaut Actualiser ses propres fonctions
    Bonjour à tous !

    J'ai créer une fonction afin d'afficher un smiley différent en fonction de certaines conditions.
    Tout marche bien sauf que les smileys ne s'actualise pas tout seul quand on modifie une valeur dans le tableau qui est utilisé par la fonction pour le smiley.
    J'ai fais quelques recherches sur internet, et j'ai ajouter Application.Volatile afin que les smileys s'actualisent. Chose qui est réussie, mais le seul problème est que les couleurs ne suivent pas.
    Par exemple, avant la modification on a un smiley content de couleur vert. Après la modification, on devrait avoir un smiley pas content de couleur rouge mais on a un smiley pas content de couleur vert.

    Voilà j'espère avoir été claire, je vous montre le code pour que vous puissez m'aider :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Function perteRendement(valeur, cellule, feuille)
    Application.Volatile
        If valeur < 15 Then
            perteRendement = "J"
            'Call smileyvert(cellule, feuille)
        ElseIf valeur >= 15 And valeur < 25 Then
            perteRendement = "K"
            'Call smileyorange(cellule, feuille)
        Else
            perteRendement = "L"
            'Call smileyrouge(cellule, feuille)
        End If
    End Function
     
     
    Sub smileyrouge(cellule, feuille)
     
        Sheets(feuille).Range(cellule).Select
     
        With Selection.Font
            .Name = "Wingdings"
            .Size = 20
            .Color = 255
            .Bold = True
        End With
    End Sub
     
     
    Sub smileyvert(cellule, feuille)
     
        Sheets(feuille).Range(cellule).Select
     
        With Selection.Font
            .Name = "Wingdings"
            .Size = 20
            .Color = 5287936
            .Bold = True
        End With
    End Sub
     
    Sub smileyorange(cellule, feuille)
     
        Sheets(feuille).Range(cellule).Select
     
        With Selection.Font
            .Name = "Wingdings"
            .Size = 20
            .Color = 49407
            .Bold = True
        End With
    End Sub
    Merci d'avance !

    Cordialement,
    PokeR

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une mise en forme conditionnelle est faite pour ça.

    Sinon, si tu tiens à ta fonction, essaies comme ceci
    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
    Function PerteRendement(ByVal Valeur As Double) As String
    Dim Ltr As String, Klr As Long
     
    Application.Volatile
    If Valeur < 15 Then
        Ltr = "J"
        Klr = 255
    ElseIf Valeur >= 15 And Valeur < 25 Then
        Ltr = "K"
        Klr = 5287936
    Else
        Ltr = "L"
        Klr = 49407
    End If
     
    Application.Caller.Font.Color = Klr
    PerteRendement = Ltr
    End Function

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec la démarche suivante :
    1) copiez le code suivant dans la fenêtre de code de ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Call Colorisation(Sh)
    End Sub
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Call Colorisation(Sh)
    End Sub
    2) copiez le code suivant dans un module standard
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    '#####################################################
    '## En cas de changement du nom de la fonction
    '## changer la constante avec le nouveau nom
    Public Const NOM_FONCTION As String = "perteRendement"
    '#####################################################
     
    Function perteRendement(Cellule As Range)
    Application.Volatile
    If Cellule < 15 Then
      perteRendement = "J"   'vert
    ElseIf Cellule >= 15 And Cellule < 25 Then
      perteRendement = "K"   'orange
    Else
      perteRendement = "L"   'rouge
    End If
    End Function
     
    Sub Colorisation(Sh As Worksheet)
    Dim R As Range
    Dim C As Range
    Dim couleur&
    '---
    Application.EnableEvents = False
    On Error GoTo Erreur
    Set R = Sh.Cells.SpecialCells(xlCellTypeFormulas)
    For Each C In R
      If InStr(1, UCase(C.Formula), "=" & UCase(NOM_FONCTION)) Then
        If Err = 0 Then
          Select Case C
            Case "J"
              couleur& = 5287936
            Case "K"
              couleur& = 49407
            Case "L"
              couleur& = 255
          End Select
          '---
          With C.Font
            .Name = "Wingdings"
            .Size = 20
            .Color = couleur&
            .Bold = True
          End With
        Else
          Err.Clear
        End If
      End If
    Next C
    On Error GoTo 0
    Erreur:
    Application.EnableEvents = True
    End Sub
    Je joins un classeur exemple pour plus de facilité.

Discussions similaires

  1. Eviter le declenchement inopiné de ses propres fonctions
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/09/2010, 12h34
  2. Réponses: 7
    Dernier message: 05/04/2010, 02h11
  3. Définir ses propres fonctions dans BIRT
    Par soumou dans le forum BIRT
    Réponses: 4
    Dernier message: 02/05/2007, 23h16
  4. [MySQL] créer ses propres fonctions
    Par essono dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/11/2006, 15h09
  5. [XML+XSLT+MSXML] Ecrire ses propres fonctions
    Par görgh dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 19/05/2005, 13h04

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