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 :

message d'alerte sous conditions


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 245
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 245
    Par défaut message d'alerte sous conditions
    Bonjour a tous et toutes,

    j'ai un tableau excel intitule "donnees hermes".
    Chaque jour, j'insere de nouvelles lignes. Le tableau peut donc prendre jusqu'a 65.000 lignes.

    Ce tableau est constitue de 32 colonnes.
    Dans ce cas precis, les colonnes importantes sont :
    la colonne C intitulee "date" sous le format :dd/m/aaaa
    la colonne D intitulee "ligne"
    la colonne E intitulee " code liaison"
    la colonne AC intitulee "CP TOTAL"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ( colonne C)  (colonne D)          (colonne E)                 (colonne AC) 
    date	      ligne	               Code liaison	           CP TOTAL 
    3/1/2011	     69 acp              sup	                        20
    4/1/2011	     nyk	               69C-1390	          33
    5/1/2011	     42 ppdc            69C-102DP 	           0
    Les colonnes C (date), D (ligne) et E (code liaison) contiennent des valeurs imposees par le logiciel.
    Par contre, dans la colonne AC ( CP TOTAL), des employes doivent saisir des chiffres et des erreurs de frappe apparaissent souvent.

    Je souhaiterais donc creer une petite macro qui afficherait un message d'alerte sur mon tableau.
    Ce message d'alerte s'afficherait sous 3 conditions :
    Sur chaque ligne,
    Si dans la colonne D, la valeur de la cellule est differente de "nyk" et
    Si dans la colonne E, la valeur de la cellule ne contient pas "DP" et
    Si dans la colonne AC, la valeur de la cellule est strictement superieur a "33"
    alors un message d'alerte du type :" chargement superieur a la capacite du vehicule"

    Merci de votre aide .

  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 : 70
    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,
    un truc dans ce gout là :
    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)
    If Target.Column = 29 Then
       If Cells(Target.Row, 4) <> "nyk" And _
             Cells(Target.Row, 5) <> "*DP*" And Target > 33 Then
          MsgBox "chargement superieur a la capacite du vehicule"
          Exit Sub
       End If
    End If
    End Sub
    je vais me coucher A+
    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 éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    Bonjour
    Si je suis la demande de 'facteur':
    Si dans la colonne D, la valeur de la cellule est differente de "nyk" et
    Si dans la colonne E, la valeur de la cellule ne contient pas "DP" et
    Si dans la colonne AC, la valeur de la cellule est strictement superieur a "33"
    alors un message d'alerte du type :" chargement superieur a la capacite du vehicule"
    Je change uniquement le code de 'casefayre' les Row par Column pour que mon essai fonctionne.
    Merci casefayre, je vote pour toi.
    Cordialement


    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)
    If Target.Column = 29 Then
       If Cells(Target.Column, 4) <> "nyk" And _
             Cells(Target.Column, 5) <> "*DP*" And Target > 33 Then
          MsgBox "chargement superieur a la capacite du vehicule"
          Exit Sub
       End If
    End If
    End Sub

  4. #4
    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 : 70
    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 Vadorblanc, facteur, le forum,

    Vadorblanc a ecrit
    Je change uniquement le code de 'casefayre' les Row par Column pour que mon essai fonctionne
    Pour moi est egal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("E" & target.row)
    alors je ne comprends pas ta remarque, ou suis-je passé à coté de quelque chose ?

    Bonne journée
    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...)

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 003
    Par défaut
    Salut
    +1 pour Casefayere, les 2 écritures sont bien identiques.

    Par contre!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Target.Row, 5) <> "*DP*"
    Ça ne peut pas fonctionner, le caractère * utilisé ainsi n'est pas considéré comme étant un caractère spécial remplaçant n'importe quel texte .. mais juste comme le caractère '*'
    Il faudrait écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(Cells(Target.Row, 5), "*DP*") <> 0
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    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
    Salut à tous
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Cells(Target.Row, 5).Value Like "*DP*" Then

  7. #7
    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 : 70
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    re,
    je n'avais pas vérifié ma méthode et en reprenant le code à mercatog, j'en rajoute :

    si l'utilisateur ne fait pas de distinction entre les majuscules et minuscules, en début de programme, pour Like :
    Bonne journée, mes amis
    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...)

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 245
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 245
    Par défaut
    Merci pour vos reponse..
    Effectivement mercatog et Qwazerty ont raison pour la fonction "ne contient pas ", l'asterix ne fonctionne pas en VBA.
    Mais je ne parviens pas a remplace le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Target.Column, 5) <> "*DP*"
    par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Cells(Target.Row, 5).Value Like "*DP*" Then
    dans la macro donne par Vadorblanc

    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)
    If Target.Column = 29 Then
       If Cells(Target.Column, 4) <> "nyk" And _
             Cells(Target.Column, 5) <> "*DP*" And Target > 33 Then
          MsgBox "chargement superieur a la capacite du vehicule"
          Exit Sub
       End If
    End If
    End Sub

    J'ai encore besoin de votre aide

  9. #9
    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
    Tu as pris la mauvaise réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
       If Target.Column = 29 Then
          If Target.Value > 33 And Cells(Target.Row, 4) <> "nyk" And Not Cells(Target.Row, 5) Like "*DP*" Then
             MsgBox "Chargement superieur a la capacite du vehicule"
             Application.EnableEvents = False
             Application.Undo
             Application.EnableEvents = True
          End If
       End If
    End If
    End Sub

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 245
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 245
    Par défaut
    j'ai trouve le probleme , il manquait le code "End If".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 29 Then
    If Not Cells(Target.Row, 5).Value Like "*DP*" Then
    If Cells(Target.Row, 4) <> "nyk" And Cells(Target.Row, 5) <> "*DP*" And Target > 33 Then
          MsgBox "chargement superieur a la capacite du vehicule"
          Exit Sub
    End If
    End If
    End If
    End Sub
    Mais j'aimerais approfondir ce programme.
    Lorsque la boite de message m'indique "chargement superieur a la capacite du vehicule", pourrait on voir afficher, toujours dans la boite de message, la ou les lignes qui presentent une surcapacite.

    Je ne veux pas toutes les valeurs contenues dans la ou les lignes a corriger ( il y en a 32), mais simplement 4 valeurs qui me permettraient ainsi de retrouver assez facilement les lignes concernees par cette surcapacite et de les corriger.
    Ces 4 valeurs sont les suivantes :
    la date (colonne C), la ligne (colonne D), le code liaison (colonne E) et enfin le nombre CP TOTAL (colonne AC).

    Merci

    merci mercatog et j'espere que tu pourras me repondre pour ce programme que je souhaite ameliorer...

  11. #11
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 003
    Par défaut
    Salut
    Je veux pas dire, mais ça ressemble a s'y méprendre à une validation, regarde du coté du menu Donnée, Validation sous Excel. Tu choisis Personnalisé et tu met la formule correspondante à ton besoin, elle devrait pas être bien compliqué, à base de Et() et de Non(), ensuite tu regardes les onglets Message et Alerte et tu paramétrés comme tu le souhaites.

    Ensuite tu déploies ta validation dans ton tableau.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 245
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 245
    Par défaut
    Bonjour Qwazerty,
    Woua, je dois dire que je suis un peu perdu....
    Disons que j'applique cette validation , que dois je faire du programme macro....?

  13. #13
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 003
    Par défaut
    Salut
    Citation Envoyé par facteur
    Disons que j'applique cette validation , que dois je faire du programme macro....?
    Rien du tout, tu n'en as pas besoin pour gérer ce genre de chose dans Excel.

    Voila un exemple
    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 245
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 245
    Par défaut
    Qwazerty,

    Je ne crois pas que cette methode me convient. En effet, je ne desire pas creer un nieme colonne avec la mention "faux" ou "vrai".
    Je souhaiterais voir apparaitre un message annoncant une "capacite superieur au vehicule" lorsque, sous des conditions, la valeur contenu dans la colonne AC est strictement superieur a 33 (cf messages ci dessus).
    Et je souhaiterais que le message me designe egalement la ou les lignes concernees pour que je puisse la corriger. Car il faut savoir, que la colonne AC, qui contient les quantites, sont referencees par des tiers personnes et que mon role est de verifier et corriger ces quantites lorsqu'elles sont erronees (> 33).

    Je te joins le tableau allege si cela peut aider :
    Le tableau contien la macro de mercatog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
       If Target.Column = 29 Then
          If Target.Value > 33 And Cells(Target.Row, 4) <> "nyk" And Not Cells(Target.Row, 5) Like "*DP*" Then
             MsgBox "Chargement superieur a la capacite du vehicule"
             Application.EnableEvents = False
             Application.Undo
             Application.EnableEvents = True
          End If
       End If
    End If
    End Sub
    Fichiers attachés Fichiers attachés

  15. #15
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 003
    Par défaut
    Salut
    Citation Envoyé par facteur
    Je ne crois pas que cette methode me convient. En effet, je ne desire pas creer un nieme colonne avec la mention "faux" ou "vrai".
    C'est juste une colonne de teste... as tu essayé de rentré une valeur en colonne AC??

    Pour ce qui est de la coloration de ta cellule ou de ta ligne il suffit de mettre une Mise en forme Conditionnel, qui aura encore une fois une formule simple, la même que la validation mais avec une inversion du résultat avec un Non() je pense.

    Je regarderais ton fichier plus tard mais essaie comme il faut celui que je t'ai envoyer stp.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    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
    Bonjour,
    Je trouve que la proposition de Qwaz est judicieuse.
    Sinon, par code (si tu y tiens absolument)
    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
    Sub test()
    Dim Target As Range
    Dim Msg As String
     
    Application.ScreenUpdating = False
    With Sheets("donnees hermes")
        For Each Target In .Range("AC3:AC" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            Target.Interior.ColorIndex = xlNone
            If Target.Value > 33 And Cells(Target.Row, 4) <> "nyk" And Not Cells(Target.Row, 5) Like "*DP*" Then
                Msg = Msg & Target.Address(0, 0) & vbCrLf
                Target.Interior.Color = 255
            End If
        Next Target
    End With
    If Msg <> "" Then
        Msg = "Chargement supérieur à la capacité du véhicule dans les cellules en rouge suivantes:" & vbCrLf & Msg
    Else
        Msg = "Tout est bon"
    End If
    MsgBox Msg
    End Sub

Discussions similaires

  1. affichage d un message sous condition
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2009, 12h25
  2. message d'alerte sous excel
    Par kivala dans le forum Excel
    Réponses: 1
    Dernier message: 17/10/2005, 12h56
  3. message d'erreur sous l'utilitaire IBconsole
    Par vbcasimir dans le forum Outils
    Réponses: 6
    Dernier message: 05/01/2005, 12h07
  4. Boite de message d'alerte
    Par JustinT dans le forum ASP
    Réponses: 5
    Dernier message: 27/05/2004, 23h46
  5. Réponses: 9
    Dernier message: 24/03/2004, 12h15

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