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 :

Macro Vs Fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Par défaut Macro Vs Fonction
    Je voudrais faire une fonction qui :
    - recoit en argument un range et une valeur "MinValue"
    - Modifie la couleur des cellules du range dont la valeur et égale à MinValue.

    Mon problème :
    J'arrive à écrire une Macro qui fait ce travail (Range et MinValue sont pour le moment en dur dans le code) mais si je mets le meme code dans une fonction alors il ne se passe rien.

    Y a t'il quelque chose de particulier à faire dans une fonction pour pouvoir modifier l'apparence d'une cellule excel ?

    Voici le code de ma macro :

    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
    Sub Macro3()
    Dim MinValue As Double
    MinValue = Worksheets("Optim Vent").Cells(1, 14).Value
     
    Worksheets("Optim Vent").Range("H14:AQ49").Select
        Selection.Interior.ColorIndex = xlNone
     
        For Each c In Worksheets("Optim Vent").Range("H14:AQ49").Cells
            If c.Value = MinValue Then
                c.Select
                With Selection.Interior
                    .ColorIndex = 4
                    .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                End With
            End If
        Next
    End Sub
    Pour la fonction, je remplace juste "Sub" par "Function"

    J'utilise Excel 2003 en Version Anglaise.

    Merci pour votre aide

  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 fonction retourne une valeur
    par contre tu peux mettre tes paramètres dans une procédure
    exemple
    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
     
    Sub Macro3(byref rng as Range, byval MinValue as double)
    dim c as range
    rng.Interior.ColorIndex = xlNone
     
    For Each c In rng
      If c.Value = MinValue Then
        With c.Interior
          .ColorIndex = 4
          .Pattern = xlSolid
          .PatternColorIndex = xlAutomatic
        End With
      End If
    Next c
    End Sub
    tu peux appeler ta sub par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub tst
    Macro3 sheets("Optim Vent").Range("H14:AQ49"), sheets("Optim Vent").Cells(1, 14).Value
    end sub

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Par défaut
    Merci. Je regarde ce que je peux faire avec ca.

    Jimmy
    PS : Merci ouskel'n'or pour le formatage de mon code.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pour compléter Mercatog, je précise qu'une fonction utilisée dans une feuille de calcul ne peut rien modifier dans le classeur. Si cette fonction effectue la moindre modification, elle ne pourra pas être appelée via la feuille de calcul. Pour pouvoir être utilisée dans une feuille de calcul, cette fonction ne pourra non plus faire appel à une procédure ou à une autre fonction qui apporte une modification au classeur.

    Dans ton cas, c'est donc par une procédure que tu t'en sortiras, quelque soit le mode d'appel de cette procédure.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    +1 en ce qui concerne ce que vient d'exposer Pierre Fauconnier (que je salue).

    Une fonction utilisée dans la feuille de calcul déclenche en effet un processus de calcul sur un fil (thread) totalement distinct du reste. Ce fil parait même (je ne l'ai pas encore totalement "prouvé", mais ...) totalement indépendant du fil VBA.

    Il est clair que toute autre fonction ou procédure "VBA" qu'appellerait cette fonction resterait alors "confinée" dans ce fil, qui n'est qu'un fil de calcul, et resterait sans effet sur tout ce qui ne se trouve pas inclus dans ce fil.

    Dans ces conditions : seule la cellule où cette fonction est utilisée (comme formule) peut être modifiée par la valeur retournée par la fonction ...

Discussions similaires

  1. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 16h13
  2. [Macro] Exécuter une macro en fonction d'un contrôle
    Par sugan dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2006, 17h02
  3. Macro en fonction d'une sélection de plage de cellules.
    Par Labiche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/08/2006, 11h23
  4. [VBA-E] macro avec fonction "TRANSPOSE"
    Par Ardeciel dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 12/06/2006, 17h11
  5. choix entre macro et fonction
    Par remi77 dans le forum C
    Réponses: 4
    Dernier message: 22/10/2003, 15h26

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