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 :

Personnaliser les messages d'erreur de validation des données [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut Personnaliser les messages d'erreur de validation des données
    Bonjour,

    Pour un ensemble de cellules j'ai limité la tranche de valeurs saisissables (outil de Validation des données) en la paramétrant depuis 2 champs paramètres comme suit:
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(G3>="ScaleMini";G3<="ScaleMaxi")
    Je peux ainsi réutiliser mon modèle en le customisant au gré des circonstances.

    J'ai placé le message d'Alerte "Valeur hors limite" suivant: "La valeur doit être comprise entre 1 et 5 " mais évidemment j'aimerais faire référence à ScaleMini et ScaleMaxi pour informer l'utilisateur avec les limites actuellement posées.
    Est-ce possible ?

    Sauf erreur, je n'ai pas trouvé semblable question dans le forum.
    Merci d'avance.

    Cordialement.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    évidemment j'aimerais faire référence à ScaleMini et ScaleMaxi pour informer l'utilisateur avec les limites actuellement posées.
    Est-ce possible ?
    Hélas non.
    Sauf en utilisant du VBA, il n'est pas possible de faire référence à une cellule dans le texte qui s'affiche dans la validation de données. Je le déplore également
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Hélas non.
    Sauf en utilisant du VBA, il n'est pas possible de faire référence à une cellule dans le texte qui s'affiche dans la validation de données. Je le déplore également
    Merci Philippe.
    C'est dommage.
    La fin justifie les moyens. Je suppose qu'il faudrait:
    • gérer un évènement de saisie dans la plage de saisie
    • comparer chaque valeur saisie avec celle de référence
    • afficher un message en cas de dépassement

    ça à l'air simple dit comme ça mais j'y connais rien en VBA. J'en ai pour des jours à lire des tutos et à trouver comment faire. Un exemple serait le bienvenu.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quand j'invoquais le VBA, c'est juste pour les messages. Pour le reste, il n'y a pas de raison de modifier la fonctionnalité native de l'outil.
    Je n'ai pas le temps de regarder à cela pour l'instant mais l'enregistreur de macro devrait donner les méthodes et propriétés à utiliser.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Dioon Voir le message
    évidemment j'aimerais faire référence à ScaleMini et ScaleMaxi pour informer l'utilisateur avec les limites actuellement posées.
    Dans le code de ta feuille tu mets ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.CountLarge = 1 Then
            If Not Intersect(Target, Union(Range("ScaleMini"), Range("ScaleMaxi"))) Is Nothing Then Call Msg_prm
        End If
    End Sub
    Dans un module ou dans le code de ta feuille tu mets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Msg_prm() ' Macro paramétre message erreur'
    Dim ws As Worksheet
        Set ws = Worksheets("Feuil1")
        With ws.Range("G3").Validation
            .Delete
            .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=AND(G3>=""ScaleMini"",G3<=""ScaleMaxi"")"
            .ErrorTitle = "Valeur hors limite"
            .ErrorMessage = "La valeur doit être comprise entre " & ws.Range("ScaleMini").Value & " et " & ws.Range("ScaleMaxi").Value
            .ShowError = True
        End With
    End Sub
    Bien entendu tu utilises le nom de ta feuille concernée pour "Feuil1" et ainsi tu auras toujours les bonnes valeurs dans ton message.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Merci Anasecu.
    Des précisions sont nécessaires:
    L'intersect plante. scaleMini et scaleMaxi sont les cellules contenant les valeurs extrêmes des Axes et sont sans rapport avec la zone de saisie qui semble l'objet de l'intersect. (de plus ils sont dans l'onglet "PARM")
    j'ai remplacé par ceci qui me semble approprié et qui passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Intersect(Target, Range("G3:H16")) Is Nothing Then Call Msg_prm
    Ensuite ça plantait dans Msg_prm. ScaleMini et ScaleMaxi étant dans l'onglet "PARM" j'en déduis qu'il serait judicieux de le déclarer avec la variable wsP.
    J'ai également ajouté un msgbox pour suivre l'exécution et vérifier la prise en compte de ScaleMini.

    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 Msg_prm() ' Macro paramétre message erreur'
    Dim ws As Worksheet
    Dim wsP As Worksheet
        Set ws = Worksheets("Quick Win(2)")
        Set wsP = Worksheets("PARM")
        msgbox (wsP.Range("ScaleMini").Value)
        With ws.Range("G3").Validation
            .Delete
            .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=AND(G3>=""ScaleMini"",G3<=""ScaleMaxi"")"
            .ErrorTitle = "Valeur hors limite"
            .ErrorMessage = "La valeur doit être comprise entre " & wsP.Range("ScaleMini").Value & " et " & wsP.Range("ScaleMaxi").Value
            .ShowError = True
        End With
    End Sub
    Quelle que soit la valeur saisie en G3 le message d'erreur s'affiche (correctement formaté toutefois)
    J'ai mis des points d'arrêt partout pour suivre pas à pas et j'observe que pour n tentatives de saisie ("réessayer"), après "Annuler" le code boucle ensuite 2n fois.
    C'est à dire :
    1 message d'erreur est suivi par 2 msgbox successives
    2 messages d'erreur sont suivis par 4 msgbox successives
    3 par 6, etc.

    En revanche quand je saisi dans une autre cellule de la plage contrôlée par l'intersect, Msg_prm s'exécute une seule fois. Mais toujours sans afficher le message alors que G3 (qui figure dans formula1) contient toujours une valeur hors limite.

    L'intersect fonctionne bien maintenant car les cellules saisies hors plage G3:H16 lui font bien shunter Msg_prm.

    Est-ce inspirant tout ça ?

  7. #7
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Dioon Voir le message
    Des précisions sont nécessaires:
    Effectivement ceci n'était pas précisé dans ta demande et comme dit il fallait adapter à ta feuille ou plutôt tes feuilles.

    , après "Annuler" le code boucle ensuite 2n fois.
    Lorsque tu annules la saisie tu fais 2 modifications consécutives.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Citation Envoyé par anasecu Voir le message
    Bonjour,


    Effectivement ceci n'était pas précisé dans ta demande et comme dit il fallait adapter à ta feuille ou plutôt tes feuilles.
    Pas de soucis, ce n'était pas une critique, c'était juste pour expliquer mes modifs d'adaptation desquelles j'étais prévenu. D'ailleurs, je m'attendais à un exemple à bidouiller, pas à du "sur mesure" comme ici.
    Tant mieux car c'est plus coriace que je ne pensais.

    Citation Envoyé par anasecu Voir le message
    Lorsque tu annules la saisie tu fais 2 modifications consécutives.
    Désolé, je ne sais pas comment interpréter ta phrase (question ou affirmation ?). Alors voici deux réponses en rase motte.
    Non je ne fais pas 2 modifications consécutives (saisies) après avoir Annulé.
    Non, le programme ne fait pas non plus 2 modifications consécutives après que j'ai Annulé car (1) il ne s'agit que de contrôles et/ou (2) le traitement consécutif n'est pas réalisé 2 fois mais 2 fois le nombre de messages d'erreur générés précédemment suite à mes saisies.
    Une chose me parait claire concernant la cinématique:
    - quelque soit la donnée saisie en G3 elle est considérée hors limites (objectif principal non atteint) : problème de syntaxe ignoré de la compile ? Problème résolu en supprimant les doubles quotes dans Formula1: Formula1:="=AND(G3>=ScaleMini,G3<=ScaleMaxi)"
    et même si cette anomalie était corrigée, aussi tordu que cela soit, si j'ai envie de laisser ma msgbox là où elle est (cas d'école je te rassure), l'appli reste inexploitable car :
    - après n erreurs de saisie d'un utilisateur peu éveillé, lorsque ce dernier abandonne alors (2 * n) box de message se mettent à débouler à l'écran à la queue leu leu: de quoi le réveiller, certes, mais c'est choquant en soi non ? (je sèche sur celle là) C'est curieux: le message d'erreur s'affiche et c'est seulement après avoir répondu "Annuler" que l'on entre dans Worksheet_Change puis dans Msg_prm pour les arrêts aux BreakPoints

  9. #9
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,
    Citation Envoyé par Dioon Voir le message
    l'appli reste inexploitable car :
    - après n erreurs de saisie d'un utilisateur peu éveillé, lorsque ce dernier abandonne alors (2 * n) box de message se mettent à débouler à l'écran à la queue leu leu:
    J'avoue que je ne comprends pas ton souci car j'ai fait un exemple avec les feuilles de ton classeur et cela fonctionne comme prévu.

    Il a-t-il un mauvais référencement des feuilles ?

    Regardes l'exemple qui te feras peut-être trouver le hic.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. message d'erreur d'ajout des données
    Par ahmed_kh dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/04/2012, 18h18
  2. Traduire les messages d'erreur de validation
    Par Aquaa dans le forum Zend_Form
    Réponses: 2
    Dernier message: 10/05/2010, 13h08
  3. Afficher les messages d'erreur de validator
    Par weed dans le forum Struts 1
    Réponses: 3
    Dernier message: 30/10/2008, 09h17
  4. personnaliser les messages d'erreurs
    Par jdev23 dans le forum JSF
    Réponses: 1
    Dernier message: 02/09/2008, 14h46
  5. Réponses: 9
    Dernier message: 17/08/2006, 15h04

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