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 en forme d'une cellule dans une fonction


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Mise en forme d'une cellule dans une fonction
    Bonjour,
    Est-il possible au sein d'une fonction de réaliser la mise à jour de la cellule cible ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function MajCel(p1 as integer, p2 as integer) as integer
    MajCel=p1+P2
    ' mettre en forme la cellule si le résultat est négatif ( fond rouge )
     
    end function
    Bien sur, il est possible de réaliser l'action en mettant une forme conditionnelle , mais il ne s'agit là que d'un exemple. La mise en forme pourrait bien être plus complexe ...

    merci pour votre éclairage.

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    dans la fonction, la cellule concernée est identifiée par Application.Caller.
    Il suffit donc d'appliquer les mises en formes à cet objet avant de quitter la fonction.

  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
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    Théoriquement une fonction retourne une valeur et c'est tout, elle ne change jamais son environnement.

    VBA pour Excel impose des limites très strictes aux fonctions appelées à l'intérieur de formules de feuilles de calcul. Leur seule attribution est de renvoyer une valeur à la cellule hôte. Ces fonctions ne peuvent effectuer aucune autre action susceptible de modifier le contenu du classeur.
    En particulier, une fonction complémentaire ne peut pas modifier la valeur d'autres cellules que celles où elles ont été saisies. De même, il est impossible de renommer une feuille, déplacer une plage, changer le format d'une cellule, etc. à l'intérieur d'une fonction complémentaire. Les seules actions autorisées sont celles qui n'ont aucun effet sur le contenu du classeur, comme par exemple afficher un message par MsgBox.
    Il faudrait que tu utilises l'évènement calculate pour tester si tu dois changer ta mise en forme.

    eric

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu n'as pas précisé si c'était dans le but de l'utiliser comme fonction personnalisée ou pour l'utiliser dans le cadre d'une application VBA. Dans ce dernier cas, tu peux faire tout ce que tu veux avec la fonction au même titre qu'une procédure Sub.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je comprends bien les limitations imposées dans une fonction personnalisée. Cependant dans le cas ci-joint, cela me parait justifié.

    Je souhaite mettre en place des indicateurs statistiques de tendance calculés à partir de valeur d'un tableau. Le résultat est une flèche montante, horizontale ou descendante en fonction de la tendance ( plutôt du coef de pente de la droite ). J'utilise pour cela un caractère de la police Widdings (simple et efficace ).
    En revanche la couleur de la flèche doit être calculé en fonction d'un autre facteur ( rouge en dehors des valeurs , orange : danger, vert dans la plage acceptable ).
    J'ai réalisé ce tableau en utilisant un bout de code (sub) activé par un bouton. Je me posais la question s'il était possible de réaliser la même opération en utilisant une fonction personnalisée pour éviter le bouton.

    exemple de résultat :
    exemple final du résultat
    Nom : Capture1.JPG
Affichages : 860
Taille : 31,6 Ko

    avec les colonnes permettant le calcul

    Nom : Capture2.JPG
Affichages : 807
Taille : 55,6 Ko


    code associé (pour une flèche) :
    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
     
    Private Sub indicateur(Rge As Range, of As Variant)
    Dim pente As Double
    Dim dispo As Double
    Dim vert, orange, rouge As Double
    Dim seuil1, seuil2 As Double
     
        pente = Round(Rge.Offset(of, -1).Value * 1000, 0)
        dispo = Rge.Offset(of, -2).Value * 100
        vert = Range("VERT").Font.Color
        orange = Range("ORANGE").Font.Color
        rouge = Range("ROUGE").Font.Color
        seuil1 = Range("SEUIL1").Value
        seuil2 = Range("SEUIL2").Value
     
     
     
        If pente > 0 Then
            ret = "ì"
        ElseIf pente = 0 Then
            ret = "è"
        Else
            ret = "î"
        End If
     
        If dispo >= seuil1 Then
            Rge.Offset(of).Font.Color = vert
        ElseIf dispo < seuil1 And dispo > seuil2 Then
            Rge.Offset(of).Font.Color = orange
        Else
            Rge.Offset(of).Font.Color = rouge
     
        End If
     
        Rge.Offset(of).Value = ret
     
        Rge.Offset(of).Font.Name = "Wingdings"
     
     
    End Sub
    Je ne comprends pas très bien comment utiliser la fonction Application.Caller, peux-tu me fournir un exemple stp ?
    Merci en tout cas pour ces premières explications

  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
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    Je comprends bien les limitations imposées dans une fonction personnalisée. Cependant dans le cas ci-joint, cela me parait justifié.
    Il faudrait le dire à MS alors ;-)
    Mais dans tous les langages le rôle d'une fonction est de retourner une valeur (unique ou tableau)

    Application.Caller te permet de connnaitre la cellule appelante de la fonction.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Application.Caller.Address
    Debug.Print Application.Caller.Worksheet.Name
    Pas sûr que tu en aies besoin ici

    Ta mise en couleur peut sans doute se faire avec une MFC (mise en forme conditionnelle).
    Et si tu as excel 2010 tu as des MFC qui mettent des icones en couleur directement.

    Prend l'habitude de mettre un fichier réduit à ton problème. Beaucoup plus utile que des images.

    eric

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 934
    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 : 12 934
    Points : 28 930
    Points
    28 930
    Billets dans le blog
    53
    Par défaut
    Bonjour Christophe,
    D'abord bravo pour la présentation de ta question bien illustrée et détaillée .
    Je ne peux qu'abonder dans le sens d'Eriiic quant au fait que la mise en forme conditionnelle peut répondre à tes besoins ou bien le format personnalisé d'ailleurs (limité à trois conditions).

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Afficher une image dans une cellule d'une gridview
    Par guigui11 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/09/2007, 10h18
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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