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 qui change la couleur d'une cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Fonction qui change la couleur d'une cellule
    Bonjour,

    Le titre doit paraitre un peu con mais je n'ai pas réussi à trouver la réponse!

    Dans un module, j'ai une fonction
    Je voudrai changer la couleur de fond d'une cellule en tapant dans une cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =mafonction(mavariable)
    J'ai donc créé une fonction dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function mafonction(mavariable)
    If mavariable=1 Then
    ???.Interior.ColorIndex = 3
    Else
    ???.Interior.ColorIndex = 10
    End If
    End Function
    Je bloque sur les "???"!

    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour cailloup

    C'est le fond de ta cellule que tu veux colorée.

    Remplace donc tes ??? par une cellule


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1").Interior.ColorIndex = 6
    ou
    Cells(1,1).Interior.ColorIndex = 6
    Cordialement

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

    Pourquoi ne pas utiliser la mise en forme conditionnelle ?

    Philippe

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Je voudrai changer la couleur de fond d'une cellule en tapant dans une cellule:

    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part
    =mafonction(mavariable)
    Tu ne peux pas parce que ce n'est pas possible.

    Utilise plutôt une Mise en Forme Conditionnelle.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    bonjour


    a suposer que tu veux que dans le sheets(1)
    si tu tape "toto"
    la cellule deviendra par exemple magenta
    si tu tape "titi" la cellule deviendra jaune

    mais une fois que tu aura taper enter ou selectionné une autre cellule

    car quand tu ecrit dans la cellule tu est en mode edition et le control d'une condition se fait quand la cellule est libérée (updated)

    met ca dans le module thisworkbook
    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
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    'Changer la couleur de fond d'une cellule modifiée
        If ActiveSheet.Name = "Feuil1" Then 'si la feuille est la feuille1
            'Target est la plage modifiée 
            If Target.Value = "toto" Then 'si c'est "toto
                Target.Interior.Color = vbMagenta 'magenta
            ElseIf Target.Value = "titi" Then 'si c'est "titi"
                Target.Interior.Color = vbYellow 'Jaune
            End If
     
        End If
     
     
    End Sub
    Apres il peut y avoir une solution mais il faudrais utiliser les apis

    ma ca serais tres complexe de realisé une macro de ce genre
    sans parler d'une boucle perpétuelle dans la quelle tu capterais l'appui d'une touche en controlant le sheets
    le target
    et la valeur inscrite
    dynamiquement bien sur!!!
    mais c'est possible il me semble

    au plaisir

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une fonction retourne une valeur ou un tableau de valeurs mais n'exécute aucune action donc ce que tu demande est impossible avec une fonction, il te faut passer par une Sub.

    Hervé.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    il est vrai qu'a relire ta question il ne semble pas pour toi que sa soit la valeur qui soit controlée mais seulement la presence


    dans ce cas

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     If oldcell <> "" Then Range(oldcell).Interior.Color = couleurcel
    If ActiveCell.Address <> oldcell Then
    couleurcel = ActiveCell.Interior.Color
    ActiveCell.Interior.Color = vbRed
    oldcell = ActiveCell.Address
     
    End If
     
     
    End Sub
     
    a chaque fois que tu change de cellule elle deviens rouge et la précedante reprend ca couleur d'origine

    au plaisir

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Yersin Voir le message
    Bonjour cailloup

    C'est le fond de ta cellule que tu veux colorée.

    Remplace donc tes ??? par une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1").Interior.ColorIndex = 6
    ou
    Cells(1,1).Interior.ColorIndex = 6
    Cordialement
    ça ça fonctionne très bien, donc je ne comprends pas pourquoi Hervé dit:

    Citation Envoyé par Theze Voir le message
    Bonjour,

    Une fonction retourne une valeur ou un tableau de valeurs mais n'exécute aucune action donc ce que tu demande est impossible avec une fonction, il te faut passer par une Sub.

    Hervé.
    A noter que ça aussi ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activecell.Interior.ColorIndex = 6
    Seulement je ne veux pas écrire en dur une cellule particulière, ni utiliser la cellule actuellement selectionnée.
    Autrement dit, je vais avoir plein de celllules un peu partout dans ma feuille avec la même fonction dedans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =mafonction(mavariable)
    Ensuite j'ai une macro qui fait des calculs et qui va donner une valeur à mavariable
    A la fin de la macro, je recalcule ma feuille, et c'est la que toutes mes cellules doivent prendre une certaine couleur.

    Je pourrai donc formuler mon problème autrement:
    J'ai une fonction dans une cellule, j'aimerai effectuer une action sur cette cellule (dans ce cas, colorier le fond), mais je ne sais pas comment définir qu'il s'agit de la cellule dans laquelle j'ai tapé la fonction.
    Je pourrai créer une autre fonction qui va me renvoyer le nom de la cellule dans laquelle j'ai ma fonction principale, mais je n'ai pas réussi. Un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =mafonction(une2emefonction(),mavariable)
    avec "une2emefonction" qui renvoie par exemple "D38" si la formule a été tapée en D38

    Ce qui donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function une2emefonction()
    une2emefonction=cellule dans laquelle la fonction est tapée
    End Function
     
    Public Function mafonction(macellule, mavariable)
    If mavariable=1 Then
    Range(macellule).Interior.ColorIndex = 3
    Else
    Range(macellule).Interior.ColorIndex = 10
    End If
    End Function
    J'espère que je n'ai pas tout embrouillé!

    Merci patricktoulon pour les réponses, mais j'ai peur que ça ne m'aide pas vraiment, à moins que j'ai mal compris ce que tu proposes

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonsoir


    alors je récapitule

    tu veux!!!:

    que la cellule dans laquelle tu tapes change de couleur

    ça c'est impossible sans faire appel au apis

    par contre lorsque tu change de cellule après avoir tapé du texte ou ce que tu veux
    tu peux faire en sorte que si un mot est repéré hop un action que tu veux
    la en l'occurrence le changement de couleur

    c'est la première que je t'ai proposé avec l'option de vérification du nom de sheets (facultatif)

    la deuxième proposition que je t'ai faite est:

    a chaque changement de cellule la nouvelle cellule devient rouge et la précédente redeviens d'origine


    voila si tu ne comprend pas une ligne de code n'hésite pas a demander


    au plaisir

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    mais il n'y a aucune sélection de cellule dans l'histoire!
    J'ai une fonction que j'ai rentré dans plusieurs cellules
    Quand je lance une macro (par un bouton en l'occurence), il y a des calculs qui se font et qui donnent une valeur à une variable (entre autre)
    A la fin de cette macro, je recalcule la feuille par un "worksheet("feuil1").calculate", et je veux que la couleur des cases dans lesquelles j'ai mis ma fonction change en fonction de ma variable

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    au passage yersin a raison une fonction retourne effectivement une valeur


    mais pas une action

    en revange des actions peuvent etre insérées dans une fonction ce qui n'es pas tout a fait la meme chose

    bien que le resultat soit le meme mais a manipuler avec precautions


    au plaisir

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    mais il n'y a aucune sélection de cellule dans l'histoire!
    J'ai une fonction que j'ai rentré dans plusieurs cellules
    Quand je lance une macro (par un bouton en l'occurence), il y a des calculs qui se font et qui donnent une valeur à une variable (entre autre)
    A la fin de cette macro, je recalcule la feuille par un "worksheet("feuil1").calculate", et je veux que la couleur des cases dans lesquelles j'ai mis ma fonction change en fonction de ma variable
    puré de puré de zut on est loind eta question de depart là

    donne plus de precision par ceque la encore c'est vague essaie d'aller a l'essenciel si tu veux que l'on comprenne


    au plaisir

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Ok je vois la nuance

    Je suis embêté parce que j'ai l'impression d'avoir bien tout expliqué clairement dans mon "long" message ^^

    et les 4 lignes cités me paraissent également bien explicite ^^

    Et si je dis:
    Existe-il ou est-il possible de coder une fonction qui renvoie l'adresse de la cellule dans laquelle on l'a tapée?

    je mets dans ma cellule par exemple "=ADRESSE()" et ça m'écrit dans la cellule "A14"

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Bonjour

    Pourquoi ne pas utiliser la mise en forme conditionnelle ?

    Philippe

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Je ne vois pas comment je peux m'en sortir avec la mise en forme conditionnelle
    ma variable de couleur elle dépend d'autres éléments
    J'ai essayé de simplifié mon soucis au maximum, mais en réalité ça donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function mafonction(i,j)
     
    mafonction=variable_valeur(i,j)
     
    If variable_couleur(i,j)=1 Then
    Range(macellule).Interior.ColorIndex = 3
    Else
    Range(macellule).Interior.ColorIndex = 10
    End If
     
    End Function

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    c'est quoi i,j ?

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    oui meme question c'est quoi "i " et "j"

    si tu fait référence a une addresse tu risque de faire peter le m'essage d'erreur "l'indice n'apartiens pas a la selection"

    ca ne serait pas plutot ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Function mafonction(i,j)
     macelule=cells(i,j)
     
    If cells(i,j).interior.color=1 Then
    Range(macellule).Interior.ColorIndex = 3
    Else
    Range(macellule).Interior.ColorIndex = 10
    End If
     
    End Function

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    i et j ce sont d'autres cellules avec des valeurs dedans

    Avec par exemple 3 dans la cellule A12 et 25 dans la cellule D45

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    c'est bien ce que je dis dans ce CAS LA C'EST

    =mafonction([A12].value,[D45].value)

    je recapitule parceque la sa ne veux plus rien dire du tout ca deviens dur hihihi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function mafonction(i,j)'donc ici ca corespond a 
    Public Function mafonction(A12,D45) 
    
    mafonction=variable_valeur(i,j)'donc ici ca corespond a
     mafonction=variable_valeur(A12,D45)
    rien que ces deux lignes devraient te metre la puce a l'oreil sur ton erreur
    je ne vois pas le reste du code mais rassure moi le "variable_valeur" est une fonction pas une variable

    bon il est tard tout est pardonné


    dis moi seulement si dans ces deux cellules il y a le chiffre coresoondant a la couleur que tu veux ??????
    on fini par ne plus comprendre ce que tu veux faire exactement

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Je viens enfin d'admettre que ce que je voulais faire au début est impossible
    Une fonction ne peut pas utiliser l'adresse de la cellule dans laquelle on l'a rentrée (à moins de savoir à l'avance de quelle cellule il s'agit) puisqu'elle est calculée avant d'arriver dans la fameuse cellule.

    Le code que j'ai donné, je l'utilise actuellement (en enlevant la partie pour la couleur) et il fonctionne ^^
    J'ai bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (dans une cellule)=mafonction(D12,E13)
     
    Public Function mafonction(i,j)
    mafonction=mavariable(i,j)
    End Function
     
    Public mavariable(10,20) as Variant
    avec ça il ira bel et bien me chercher mavariable(1,2) si D12=1 et E13=2

    mavariable est un tableau
    je l'ai définie en tant que Variant

    J'ai trouvé une solution, qui ne sera pas aussi flexible que mon idée de base mais tant pis
    Toutes mes cellules dans lesquelles je vais mettre mafonction sont réunies dans un tableau ou les lignes ont un en tete et les colonnes aussi
    Ce tableau je veux pouvoir le bouger dans ma feuille (d'ou l'utilisation de cette fonction)
    Je vais rechercher l'adresse d'une cellule d'en tete en recherchant le texte qui est dedans, puis appliquer un décalage en fonction de i et j et je tomberai sur la cellule que je veux colorier. Donc si le texte de l'en tête en question est modifié ça ne marchera plus.

    Voila voila
    Merci pour votre aide, je coche "résolu"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 15
    Dernier message: 07/04/2012, 09h34
  2. [XL-2003] fonction qui renvoit les coordonnées d'une cellule (As Range)
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/12/2011, 08h56
  3. macro qui change de couleur après une alerte
    Par murka62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/07/2011, 00h06
  4. Créer un bouton qui change la couleur d'un cellule
    Par Tony. dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/09/2008, 15h51
  5. [VBA-PP]fonction qui écrit un chiffre dans une cellule excel
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/04/2006, 19h34

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