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 :

condition avec plage de donnée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 94
    Par défaut condition avec plage de donnée
    Bonjour à tous forum,

    Je cherche à trouver une macro me permettant de vérifier une condition dans une plage de donnée.
    "Si mes prix sont compris dans la fourche moyenne+10% et moyenne -10% "alors prix correct" sinon "pas correct"

    J'ai joint le fichier xl pour plus d'explication.
    Par la meme occasion est il possible de mettre dans la macro le calcul de la moyenne.


    Merci de votre aide précieuse.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    Pourquoi une macro ?

    D'après ton fichier, une petite formule suffit, pour ta premire question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI((NB.SI($F4:$K4;">"&$C4)+NB.SI($F4:$K4;"<"&$D4))=0;"PRIX CORRECT";"PAS CORRECT")
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Au vu de ton tableau, je pense que tu as peut-être intérêt à utiliser une Mise en Forme Conditionnelle pour visualiser les prix hors limites.

    Par exemple :
    Si le prix est hors tolérances, couleur de police rouge
    Si le prix est dans les tolérances, couleur de police bleue
    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Si tu tiens à une 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
    19
    20
    21
    22
    23
    Sub test()
        Dim c As Range
        With Sheets("objet")
            .[B2:D1000].ClearContents
            For Each c In .Range([A2], .Cells(.Rows.Count, 1).End(xlUp))
                If Application.CountA(.Range(.Cells(c.Row, 6), _
                .Cells(c.Row, .Columns.Count).End(xlToLeft))) > 0 Then
                    c.Offset(, 1).Value = Application.Average(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft)))
                    c.Offset(, 2).Value = c.Offset(, 1).Value * 1.1
                    c.Offset(, 3).Value = c.Offset(, 1).Value * 0.9
                     If Application.Max(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft))) > c.Offset(, 2).Value Or _
                        Application.Min(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft))) < c.Offset(, 3).Value Then
                            c.Offset(, 4).Value = "pas correct"
                        Else
                           c.Offset(, 4).Value = "prix correct"
                        End If
                End If
            Next c
        End With
    End Sub
    et si tu veux que le calcul se fasse quand tu ajoutes une valeur dans les colonnes F:Q, mets la macro suivante dans le module de la feuille :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim c As Range
        If Intersect([F:Q], Target) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        With Sheets("objet")
            .Cells(Target.Row, 2).Value = Application.Average(.Range(.Cells(Target.Row, 6), _
                .Cells(Target.Row, .Columns.Count).End(xlToLeft)))
            .Cells(Target.Row, 3).Value = .Cells(Target.Row, 2).Value * 1.1
            .Cells(Target.Row, 4).Value = .Cells(Target.Row, 2).Value * 0.9
             If Application.Max(.Range(.Cells(Target.Row, 6), _
            .Cells(Target.Row, .Columns.Count).End(xlToLeft))) > .Cells(Target.Row, 3).Value Or _
            Application.Min(.Range(.Cells(Target.Row, 6), _
            .Cells(Target.Row, .Columns.Count).End(xlToLeft))) < .Cells(Target.Row, 4).Value Then
                .Cells(Target.Row, 5).Value = "pas correct"
            Else
                .Cells(Target.Row, 5).Value = "prix correct"
            End If
        End With
        Application.EnableEvents = True
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 94
    Par défaut
    Merci à tous,


    Vos réponses sont toutes bonnes pour des prix positif mais lorsque ceux ci sont négatifs les propositions ne marchent pas.

    Y aurait il une solution?

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Vos réponses sont toutes bonnes pour des prix positifs
    ??? je ne connais pas de prix négatifs sauf si on me donne de l'argent quand j'achète mais ça n'arrive jamais ou donnes-moi un tuyau
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 94
    Par défaut
    Dans mon exemple, j'ai pris la variable prix mais tout comme j'aurais pu dire autre chose.

    La solution proposé ne fonctionne donc pas avec des valeurs négatives.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Pour des montants négatifs :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim c As Range
        If Intersect([F:Q], Target) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        With Sheets("objet")
            .Cells(Target.Row, 2).Value = Application.Average(.Range(.Cells(Target.Row, 6), _
                .Cells(Target.Row, .Columns.Count).End(xlToLeft)))
            .Cells(Target.Row, 3).Value = IIf(.Cells(Target.Row, 3).Value >= 0, .Cells(Target.Row, 2).Value * 1.1, .Cells(Target.Row, 2).Value * 0.9)
            .Cells(Target.Row, 4).Value = IIf(.Cells(Target.Row, 3).Value >= 0, .Cells(Target.Row, 2).Value * 0.9, .Cells(Target.Row, 2).Value * 1.1)
             If Application.Max(.Range(.Cells(Target.Row, 6), _
            .Cells(Target.Row, .Columns.Count).End(xlToLeft))) > .Cells(Target.Row, 3).Value Or _
            Application.Min(.Range(.Cells(Target.Row, 6), _
            .Cells(Target.Row, .Columns.Count).End(xlToLeft))) < .Cells(Target.Row, 4).Value Then
                .Cells(Target.Row, 5).Value = "pas correct"
            Else
                .Cells(Target.Row, 5).Value = "prix correct"
            End If
        End With
        Application.EnableEvents = True
    End Sub
    Et la première macro, pour rattrzper l'existant :

    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
    Sub test()
        Dim c As Range
        With Sheets("objet")
            .[B2:D1000].ClearContents
            For Each c In .Range([A2], .Cells(.Rows.Count, 1).End(xlUp))
                If Application.CountA(.Range(.Cells(c.Row, 6), _
                .Cells(c.Row, .Columns.Count).End(xlToLeft))) > 0 Then
                    c.Offset(, 1).Value = Application.Average(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft)))
                    c.Offset(, 2).Value = IIf(c.Offset(, 1).Value >= 0, c.Offset(, 1).Value * 1.1, c.Offset(, 1).Value * 0.9)
                    c.Offset(, 3).Value = IIf(c.Offset(, 1).Value < 0, c.Offset(, 1).Value * 1.1, c.Offset(, 1).Value * 0.9)
                     If Application.Max(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft))) > c.Offset(, 2).Value Or _
                        Application.Min(.Range(.Cells(c.Row, 6), _
                        .Cells(c.Row, .Columns.Count).End(xlToLeft))) < c.Offset(, 3).Value Then
                            c.Offset(, 4).Value = "pas correct"
                        Else
                           c.Offset(, 4).Value = "prix correct"
                        End If
                End If
            Next c
        End With
    End Sub

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/04/2019, 17h34
  2. [XL-2003] Créer une fonction avec plage de données
    Par coklin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/12/2009, 13h01
  3. [XL-2003] Graphique avec plage de données variables
    Par yoord dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/06/2009, 11h48
  4. Somme si avec plusieurs conditions et plage de données variables.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2007, 14h19
  5. Graphique avec plage de données contenant des dates / heures
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2007, 21h13

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