Creation d'une fonction ss Excel

Résolu
Mennix -  
 DADOU -
Bonsoir a tous,
voila , j'ai un petit souci sous excel, je desire ecrire une fonction qui me permettrait de changer la couleur d'une case en fonction de son contenu appelé depuis une cellule d'excel (la mise au format conditionnel ne m'interesse pas, car nous sommes limité a 3 fonctions)

j'ecris pour cela une fonction, que j'insere ensuite ds la cellule et qui me changera la couleur d'une autre en fonction de son propre contenu!::
voici le module:
Static Function ess(s As Range)

If Cells(s.Row, s.Column).Value = "RS" Then ess = 1 Else ess = 10

s.Font.ColorIndex = 2
s.Interior.ColorIndex = 2

End Function

alors ca change bien le contenu, soi 1 soi 10 en fonction de VALUE, par contre la couleur de fond, rien de se passe!!! en resumé si la celulle est RS alors rouge sinon Bleu!!!
est ce deja possible ??? et si oui comment faire!!! j'ai cherché un peu sur le net, mais visiblement je dois etre le seul a avoir le souci!!!
merci par avance

16 réponses

  1. Lupin
     
    Bonjour,

    en début de function ajouter :

    Application.Volatile

    la proposition précédente est excellente, mais si vous
    tenez à conserver votre fonction ! Tout changement
    provoque une exécution.

    Lupin
    2
  2. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    bonsoir,

    si tu veux changer autre chose que la valeur de la cellule qui appelle ta fonction, il faut passer par une procédure. exemple :
    derrière la feuille 1 de ton classeur tu mets ce code
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "RS" Then Target.Interior.ColorIndex = 36
    End Sub
    A+
    1
  3. DADOU
     
    J’ai un petit problème pour METTRE UNE FORMUNE POUR QUANTIT2 CONSOMMABLE VOIR QUE
    Dans la colonne A se trouvent les codes des articles qui se compose des chiffre et des lettre exp : K0012y
    Dans la colonne C j’ai la liste des commandes par quantité
    Dans la colonne B je dois avoir la consommation nécessaire de la 1ere métier première pour chaque commande
    dans le colonne D JE dois avoir la consommation nécessaire de la 2eme métier première pour chaque commande
    dans la colonne H je dois avoir la consommation nécessaire de la 3émé matière première pour chaque commande
    Les conditions sont les suivants :

    si A1=K0012Y alors B1=1.5*C1 et D1=0.3*C2 et H1=0.8*C1
    si A1=K0013Y alors B1=1.5*C1 et D1=0.6*C2 et H1=0.7*C1
    si A1=K0012 alors B1=2.5*C1 et D1=0.1*C2 et H1=0.2*C1
    si A1=K0013 alors B1=1.8*C1 et D1=0.025*C2 et H1=0.18*C1

    Comment écrire une formule sur excel pour ce problème ?
    1
  4. mennix
     
    ok merci a tous, effectivment la fonction est sympas, seul souci, c'est qu'il y a changement de couleur apres la saisie clavier!!! or je charge un fichier texte que je mets ensuite dans les cellules excel, et la il y a pas de changement de couleurs, sauf si je valide ds la cellule!!!
    en fait, en fonction du contenu de la cellule changement de courleurs, mais pas forcement si c'est moi qui tape ds la cellule, ca peut etre une macro qui vient mettre a jour cette cellule !!!

    pas simple mon affaire!!!! si il y avait plus de 3 conditions ds les mise en forme conditionnel, je n'aurais pas de souci eheheheh
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Lupin
     
    Bonjour,

    et dans l'aide de Excel, vous trouverez la méthode [Calculate].

    Après avoir "charger" vos données vous pouvez forcer l'exécution
    des fonctions.

    Aide Excel :
    Calculate, méthode
    Voir aussi S'applique à Exemple Spécificités
    Cette méthode calcule tous les classeurs ouverts, une feuille de calcul particulière dans un classeur ou une plage de cellules déterminée dans une feuille de calcul, comme indiqué dans le tableau ci-dessous.

    Pour calculer Exemple
    tous les classeurs ouverts Application.Calculate (ou simplement Calculate)
    une feuille de calcul particulière Worksheets(1).Calculate
    une plage déterminée Worksheets(1).Rows(2).Calculate

    expression.Calculate

    expression Facultative pour Application et obligatoire pour Worksheet et Range. Expression qui renvoie un des objets de la liste S'applique à.

    Exemple
    Cet exemple montre comment calculer les formules des colonnes A, B et C de la plage utilisée dans la feuille Sheet1.

    Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate

    Lupin
    0
  7. LCO2007 Messages postés 1 Date d'inscription   Statut Membre
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "RS" Then Target.Interior.ColorIndex = 36
    End Sub

    Si je veux le faire sur 80 lignes dois-je faire 80 if .... ?

    Merci pour votre aide :)
    0
  8. Utilisateur anonyme
     
    Bonjour,

    suggestion :

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        
        Dim Plage As Range, Intersection As Range
        
        Set Plage = Range("B2:B82")
        Set Intersection = Application.Intersect(Plage, Target)
        
        If Not (Intersection Is Nothing) Then
            If Target.Value = "RS" Then
                Target.Interior.ColorIndex = 36
            Else
                Target.Interior.ColorIndex = xlNone
            End If
        End If
    End Sub
    '
    

    Lupin
    0
  9. natou
     
    Je n'ai pas compris comment on fait pour avoir plus de 3 conditions dans Format Mise en forme conditionnelle
    0
  10. kiki56
     
    J'ai récemment eu en cadeau un superbe e-book ! Malheureusement, tous mes fichiers de travail ont été créés sur Excel 2007 (environnement windows PC). Du coup, je ne trouve plus les mêmes fonctionalités Excel 2007 sur Excel / MAC OS, notamment la fonction "créer une liste" bien pratique pour les tableaux dynamiques croisés. Est-ce que quelqu'un pourrait-me dire si elle existe bien sur Excel en version Mac ??? Merci !!!
    0
    1. Goldrigger 61 Messages postés 77 Date d'inscription   Statut Membre
       
      Bonsoir, j'ai également un problème avec Worksheet Change.


      Private Sub Worksheet_Change(ByVal sel As Range)

      If Cells(1, 2) >= 0 Then
      Sheets("Feuil2").Activate
      End If

      End Sub


      En fait dés que je saisie dans une cellule quelconque, ca va automatiquement dans la feuil2.
      Alors que je voudrais que si seulement la cellule indiqué change,c'est à ce moment la qu'automatiquement je passe a la feuille 2.
      0
  11. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Peut-être comme ceci car il faut utiliser "sel" pour savoir sur quelle cellule tu es
    Private Sub Worksheet_Change(ByVal sel As Range)
    
    If sel.address = Cells(1, 2).address and  Cells(1, 2) >= 0 Then
    Sheets("Feuil2").Activate
    End If
    
    End Sub 
    0
  12. Utilisateur anonyme
     
    Bonjour,

    Exemple type :

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Dim Plage As Range
    
        Set Plage = Application.Intersect(Target, Cells(1, 2))
    
        If Not (Plage Is Nothing) Then
            Sheets("Feuil2").Activate
        End If
    
    End Sub
    '
    


    Lupin
    0
    1. Goldrigger 61 Messages postés 77 Date d'inscription   Statut Membre
       
      Ok, ça marche très bien,

      j'avais essayé avec sel mais j'avais mis la formule dans une seule expression alors qu'il fallait faire un And.

      Merci.
      0
  13. elodie
     
    je voudrais savoir comment fait on un fonction ave SI
    0
  14. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Comme tu ne donnes aucune précision sur ton problème c'est impossible de te donner de l'aide.

    Avec l'icône fonction (Fx) recherche la fonction SI et cliques sur le lien aide pour cette fonction.
    0
  15. arrichris
     
    Bonjour,
    je n'arrive pas à additionner dans une formule plusieurs "SI".
    Comment formuler par exemple: A3 est égal à 20% si A1>50000,15% si A1>20000,12% si A1>10000, 8% si A1>5000....
    J'ai réussi avec 2 valeurs: 20% et 15% mais impossible d'en ajouter d'autres...
    Merci d'avance si quelqu'un peut m'aider pour cette formule.
    0
    1. Bleh
       
      =si(A1>50000;"20%";si(A1>20000;"12%;si(A1>10000;"8%";"x%")))
      C'est limité à je ne sais plus combien de conditions...
      0
      1. Bleh > Bleh
         
        humm... le "&qu­ot;x" a rien à foutre là... le reste est bon.
        Ca donne ça :
        =si(A1>50000;"20%";si(A1>20000;"12%";si(A1>10000;"8%";4%")))
        0
      2. Bleh > Bleh
         
        eh merde !
        prend le début, capte le principe et laisse tomber la fin de mon truc...
        pas vrai, ça !
        0
  16. Utilisateur anonyme
     
    Bonjour,

    s'il s'agit bien de créer une fonction permettant plus de trois conditions !

    exemple :

    Private Sub Worksheet_Change(ByVal Target As Range)
        
        Dim Plage As Range, Intersection As Range
        
        Set Plage = Range("B2:B82")
        Set Intersection = Application.Intersect(Plage, Target)
        
        If Not (Intersection Is Nothing) Then
            Select Case (Target.Value)
                Case "RS": Target.Interior.ColorIndex = 36
                Case "RSST": Target.Interior.ColorIndex = 34
                Case "TU": Target.Interior.ColorIndex = 32
                Case "TUUV": Target.Interior.ColorIndex = 30
                Case Else: Target.Interior.ColorIndex = xlNone
            End Select
        End If
    End Sub
    '
    


    ou encore :

    Private Sub Worksheet_Change(ByVal Target As Range)
        
        Dim Plage As Range, Intersection As Range
        
        Set Plage = Range("B2:B82")
        Set Intersection = Application.Intersect(Plage, Target)
        
        If Not (Intersection Is Nothing) Then
            If (Target.Value = "RS") Or _
                (Target.Value = "ST") Or _
                (Target.Value = "TU") Or _
                (Target.Value = "UV") Or _
                (Target.Value = "VW") Or _
                (Target.Value = "WX") Or _
                (Target.Value = "XY") Or _
                (Target.Value = "YZ") Then
                    MsgBox "Trois conditions"
            End If
        End If
    End Sub
    '
    


    Lupin
    -1