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 :

Excel macro validation résultats d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut Excel macro validation résultats d'une cellule
    Bonjour,
    je tente d'écrire une macro qui envoie un message box quand le résultat d'une formule dans une cellule (appelons la "V7") dépasse une valeur prédéfinie.
    Il ne s'agit donc pas d'une validation d'une entrée directe mais d'une sorte de validation d'un résultat.
    La macro ne doit pas être activée manuellement mais devrait s'auto-déclencher lors du changement de valeur dans cette cellule "V7".
    Merci d'avance pour votre aide,

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour

    tu fais une petite fonction dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function message(mess as string) as string
          msgbox mess
          message = ""
    end function
    et dans une cellule, disons W7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =si(v7>9999;message("Depassement !");"")

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour et bienvenue sur le forum

    Tu peux essayer la procédure évènementielle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("V7").Value > 10 Then MsgBox "coucou"
    End Sub
    Code à placer dans l'objet ThisWorkbook qui vérifiera à chaque modification sur la feuille si la valeur de la cellule V7 ne dépasse pas 10

    EDIT : oups...2ème...salut Wilfried

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut mikske
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage_T As Range
    On Error Resume Next
    Set Plage_T = Target
    Set Plage_T = Union(Plage_T, Target.Dependents)
    On Error GoTo 0
    If Intersect(Plage_T, [V7]) Is Nothing Then Exit Sub
    'traitement de V7
    End Sub
    ça ne fonctionne que sur la feuille active. Si les arguments de la fonction sont sur une autre feuille, il faut utiliser la macro change de l'autre feuille pour calculer la feuille contenant V7 et regarder si la cellule correspond aux critère. Mais c'est une autre histoire....

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Il me semble que la réponse de fring, bien que plus sobre, répond parfaitement à la demande, regarde ici http://www.developpez.net/forums/sho...99&postcount=3

    @GorfaelJe viens de regarder ton code et je m'aperçois que si tu avais placé ta ligne en début de code, ta gestion d'erreur serait inutile
    If Intersect(Plage_T, [V7]) Is Nothing Then Exit Sub
    D'autant que s'agissant d'une seul cellule, un simple test sur l'adresse est suffisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Target.Address(0, 0) = "B7" Or Target.Cells.Count > 1 Then Exit Sub

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut ouskel'n'or
    Je viens de regarder ton code et je m'aperçois que si tu avais placé ta ligne en début de code, ta gestion d'erreur serait inutile
    Oui et non : la cellule modifiée n'est pas V7, mais une des cellules utilisées dans la formule en V7. Et les cellules n'ont pas systèmatiquement des "parents", d'ou la nécessité de gérer l'erreur
    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Regarde la ligne que j'ai ajoutée

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut ouskel'n'or
    Un peu critique ce soir

    Données :
    V7 : =MAX(A1:E9)

    La macro : j'ai juste rajouté une colorisation de la cellule (dernière ligne de code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage_T As Range
    On Error Resume Next
    Set Plage_T = Target
    Set Plage_T = Union(Plage_T, Target.Dependents)
    On Error GoTo 0
    If Intersect(Plage_T, [V7]) Is Nothing Then Exit Sub
    If [V7] > 10 Then     Target.Interior.ColorIndex = 4
    End Sub
    et mets 12 en C2
    fais-le avec ta macro
    A+

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu crées des erreurs volontaires dans tes formules, ou que tu appelles des fonctions qui n'existent pas, alors tu as raison
    Mais à mon avis, dans ces deux cas, il est préférable de savoir que ta formule génère une erreur ou que ta fonction n'existe pas
    Ce n'est que mon avis... mais je le partage
    Bonne soirée

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Cool,
    Un tout grand merci à vous.
    La proposition de fring fonctionne bien.
    Il reste juste un petit problème, la cellule V7 fait appel à une formule (dans une autre feuille ) dont un des paramètres dépend d'un choix fait dans un combo box (situé dans la même feuille que V7 analysé). Ce choix ne se répercute pas alors que la cellulle V7 change de valeur mais ne semble pas enclencher la macro.
    Gorfael, je n'ai pas de connaissance de base en VB et n'ai pas compris ce que fait, dans ta proposition, cette union et le test?
    A+

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans ce cas, tu dois mettre le code dans l'événement Calculate de la feuille pour laquelle tu testes V7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Calculate()
    If Range("V7").Value > 10 Then MsgBox "coucou"
    End Sub

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans l'événement Calculate à la place de Change, ça change tout
    Regarde ce que je t'ai mis
    Par contre, si > 10, le code tel quel n'a pas fini de t'afficher le message. Faudra adapter. En l'état, tu n'as plus tellement la liberté de mouvements
    Tu dis ce que tu veux faire si > 10
    A+

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Un grand merci à vous,
    A+

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Salut,
    Je n'ai pas encore résolu le problème , je suis tjrs dessus (mais par intermittence). Je travaille sur base de la solution de Fring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("V7").Value > 10 Then MsgBox "coucou"
    End Sub
    mais il n'accepte pas que je remplace la valeur 10 par le contenu d'une autre cellulle (ds la même feuille) donc je chipote.
    a+

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Re,
    Voilà, juste un petit problème de déclaration de variable.
    Je vous recommende donc la solution de Fring (qui marche bien ds le cadre de ma petite feuille;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("V7").Value > 10 Then MsgBox "coucou"
    End Sub
    Code à placer dans l'objet ThisWorkbook
    merci encore,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro : Exporté donnée d'une cellule Excel vers Word
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2011, 18h13
  2. Réponses: 6
    Dernier message: 24/01/2007, 08h15
  3. Réponses: 3
    Dernier message: 27/01/2006, 18h35
  4. [OLE Excel] formatter ecriture float dans une cellule
    Par netah25 dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/01/2006, 10h09
  5. [EXCEL] Insertion liste déroulante dans une cellule
    Par the java lover dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/11/2005, 18h30

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