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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 13
    Points
    13
    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
    12 769
    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 : 12 769
    Points : 28 629
    Points
    28 629
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 13
    Points
    13
    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
    12 769
    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 : 12 769
    Points : 28 629
    Points
    28 629
    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 chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 13
    Points
    13
    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 chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 13
    Points
    13
    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 chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

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


    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.
    Merci pour le fichier. j'ai travaillé dessus et il ressort ceci:

    Il fait effectivement ce que l'on veut, en apparence seulement, et pas de la façon voulue !
    (il est tout aussi important de comprendre pourquoi ça fonctionne que pourquoi ça ne fonctionne pas: les apparences sont souvent trompeuses)
    En fait le paramétrage de la validation par le VBA se fait APRES que la validation (déjà renseignée sans doute par un test précédent) ne s'exécute !
    =>Je purge donc la Validation pour la cellule G3 afin que son contenu ne vienne que du VBA.

    Nouveaux tests: aucune réaction à aucune saisie !
    =>Normal: le VBA n'a pas écrit dans la Validation de la cellule...

    Je remarque que Worksheet_Change est placé dans la feuille "PARM" alors que la saisie se fait dans la feuille "Quick Win(2)": l'évènement n'est pas détecté. Ce que l'on voyait c'est bien la validation Excel qui était renseignée .
    =>Donc j'ai déplacé Worksheet_Change dans la bonne feuille.

    Nouvel essai et cette fois-ci l'évènement est bien capté.

    <Erreur d'éxécution '1004': La méthode 'Range' de l'objet'_Worksheet' a échoué> sur la ligne:
    If Not Intersect(Target, Union(Range("ScaleMini"), Range("ScaleMaxi"))) Is Nothing Then Call Msg_prm

    Le test intersect est sensé limiter les contrôles à une plage de saisie définie. Cette plage est au minimum égale à G3.
    Je ne sais pas ce que cette Union est sensée faire mais ScaleMini et ScaleMaxi sont des paramètres qui sont dans une autre feuille et ils ne définissent pas du tout une zone de saisie.
    =>J'ai remplacé par: If Not Intersect(Target, Range("G3:H16")) Is Nothing Then Call Msg_prm

    Nouvel essai: je saisi "12" et les 2 msgbox s'affichent mais aucun message d'erreur !
    Je regarde les paramètres de la validation: ils ont pourtant été renseignés par le VBA et le message prévu indique "de 1 à 5".
    .=> C'est parce qu'ils ont été renseignés APRES l'exécution de la Validation

    Je modifie ScaleMax à 10.
    Nouvel essai: Je saisi "13" et le message d'erreur s'affiche mais en demandant de saisir entre "1 et 5".
    => La Validation s'est déclenchée AVANT que le VBA ne prenne connaissance de la nouvelle valeur de ScaleMax.

    Nouvel essai: je saisi "22" et le message d'erreur s'affiche mais en demandant de saisir entre "1 et 10".
    CQFD !

    Le plus beau dans l'affaire c'est qu'à chaque fois que j'ai cliqué sur "Annuler" du message d'erreur, la 1ère et la seconde msgbox apparaissent puis... aïe !... apparaissent à nouveau !

    Maintenant tu disposes d'un fichier (ici=>DioonV2.xlsm) qui réagit comme le mien. Valides-tu ma démarche ?

    Je lance une hypothèse, ne connaissant pas VBA:
    Faut-il/peut-on désactiver la validation avant de la renseigner et lancer son exécution seulement après ?

  11. #11
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par Dioon Voir le message
    Le test intersect est sensé limiter les contrôles à une plage de saisie définie. Cette plage est au minimum égale à G3.
    Je comprend mieux ton problème car ton raisonnement est erroné.

    - il faut lancer la modification de la validation sur la feuille où sont situés "ScaleMini" et "ScaleMaxi" car sinon s'ils sont modifiés ta validation ne peux pas changer.

    - tant que tes valeurs mini/maxi ne sont pas modifiées il n'y a pas lieu de toucher à la validation

    - si tu lances la modification de la validation à chaque saisie comme tu as fait, tu ne changes rien puisque tes paramètres sont restés à la même valeur.

    La connaissance du VBA n'a pas grand chose à voir avec ton souci car ce n'est que de la logique et tu es parti sur une mauvaise route qui ne peut pas te conduire à bon port.

    Je ne sais pas ce que cette Union est sensée faire
    Cette fonction regroupe "ScaleMini" et "ScaleMaxi" pour le test mais sans en connaitre le rôle tu la gicles :
    je pense qu'avec un tel raisonnement tu auras pas mal de souci avec le VBA car ce n'est qu'un langage mais si tu veux parler une autre langue, il faut connaitre la signification des mots sinon les quiproquos ne vont pas manquer.

    Essayes de repenser ton problème.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

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


    Je comprend mieux ton problème car ton raisonnement est erroné.
    Ca c'est très possible.

    Citation Envoyé par anasecu Voir le message
    - il faut lancer la modification de la validation sur la feuille où sont situés "ScaleMini" et "ScaleMaxi"
    "lancer la modification de la validation" ? C'est à dire ?
    J'ai démontré avec des tests que Worksheet_Change doit être dans la feuille de saisie et non dans la feuille PARM contenant "ScaleMini" et "ScaleMaxi".
    Démonte ma démonstration et tu me convaincra.
    D'ailleurs, conceptuellement, l'évènement Change qui capture la Target ne doit-il pas être sur la page de la Target à traiter ?

    Citation Envoyé par anasecu Voir le message
    car sinon s'ils sont modifiés ta validation ne peux pas changer.
    - mes tests prouvent le contraire: les modifications de "ScaleMini" et "ScaleMaxi" sont immédiatement prises en compte pour l'alimentation du volet Validation (il suffit de le consulter après le test). C'est juste que le volet de validation s'exécute AVANt qu'il ne soit mis à jour.
    - j'ai renforcé la démo (résultats des tests inchangés) en modifiant deux lignes comme suit dans le module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox (wsP.Range("ScaleMini").Value & " / " & wsP.Range("ScaleMaxi").Value & " / Saisie=" & ws.Range("G3").Value)
    Formula1:="=AND(G3>=" & wsP.Range("ScaleMini").Value & ",G3<=" & wsP.Range("ScaleMaxi").Value & ")"
    Citation Envoyé par anasecu Voir le message
    - tant que tes valeurs mini/maxi ne sont pas modifiées il n'y a pas lieu de toucher à la validation
    Je dirais même plus: il n'y a JAMAIS lieu de toucher le volet de Validation (où serait l'intérêt d'automatiser ?).
    Je réinitialise le volet Validation uniquement avant le premier test dans LE SEUL BUT de révéler la cinématique et de la comprendre. Refais mes tests et là tu pourras m'expliquer mes erreurs de manip (s'il y en a)

    Citation Envoyé par anasecu Voir le message
    - si tu lances la modification de la validation à chaque saisie comme tu as fait,
    (?) Je ne fais pas ça. Une seule fois à l'init de ma série de tests (comme indiqué ci-dessus)

    Citation Envoyé par anasecu Voir le message
    La connaissance du VBA n'a pas grand chose à voir avec ton souci car ce n'est que de la logique et tu es parti sur une mauvaise route qui ne peut pas te conduire à bon port.
    Merci du compliment. Mais je suis un pragmatique et tester me semble une bonne route. M'expliquer que ce que je vois n'est qu'une illusion ça revient à dire que je suis fou sans le démontrer. Pour ce prix peux-tu rejouer mes tests à la lettre et analyser en quoi ils sont biaisés ? Je dois savoir si j'ai besoin de me faire soigner...

    Citation Envoyé par anasecu Voir le message
    Cette fonction regroupe "ScaleMini" et "ScaleMaxi" pour le test mais sans en connaitre le rôle tu la gicles :
    je pense qu'avec un tel raisonnement tu auras pas mal de souci avec le VBA car ce n'est qu'un langage mais si tu veux parler une autre langue, il faut connaitre la signification des mots sinon les quiproquos ne vont pas manquer.
    Je la gicle pour la raison que j'ai déjà indiquée mais sur laquelle tu ne t'es pas prononcé: ces paramètres n'ont aucun rapport avec le besoin qui motive l'emploi de l'intersect (besoin= plage de saisie et non valeurs saisissables). Prouve moi le contraire.
    Je n'ai donc pas besoin de connaitre les subtilité d'une UNION en VBA (même si le terme est très évocateur quand on connait la théorie des ensembles) !

    Citation Envoyé par anasecu Voir le message
    Essayes de repenser ton problème.
    J'aurais aimé un OK/KO explicité pour chacune de mes observations, modifications et tests que j'ai réalisés sur ton fichier test. Cela aiderait à partager le même fil conducteur.
    Je sens qu'il manque juste quelque chose pour que cela fonctionne parfaitement mais il faut que l'on élimine un par un les faux problèmes (avec pédagogie) et qu'on soit d'accord sur celui qui reste (s'il y en a un).

    Mais je conçois que cela fasse beaucoup de littérature pour un problème d'apparence trivial et que tu en as peut être un peu marre quitte à survoler les détails de mes investigations. Surtout que tu rames seul pour m'aider.

    Tant que les tests invalident le besoin initial, le problème reste entier.
    Besoin initial:
    - contrôler la saisie seulement dans une zone délimitée
    - contrôler la valeur saisie dans une tranche de valeur indiquée dans une autre feuille
    - le changement de tranche doit être immédiatement disponible pour le contrôle de saisie

  13. #13
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par Dioon Voir le message
    J'ai démontré avec des tests que Worksheet_Change doit être dans la feuille de saisie et non dans la feuille PARM contenant "ScaleMini" et "ScaleMaxi".
    C'est bien là que tu fais fausse route car :
    - tant que tes bornes ne changent pas tu n'as pas à modifier ton message
    - en voulant changer avec la saisie ton message ne sera mis qu'après la saisie et ne permet pas de saisir si tes bornes ont changé.
    et c'est ton constat "C'est juste que le volet de validation s'exécute AVANt qu'il ne soit mis à jour"


    conceptuellement, l'évènement Change qui capture la Target ne doit-il pas être sur la page de la Target à traiter ?
    Sauf que dans ton cas ce sont les bornes qui sont traitées pas la saisie.

    . Refais mes tests et là tu pourras m'expliquer mes erreurs de manip (s'il y en a)
    Pas besoin car tu n'as pas compris le principe qui fait que ce n'est que lorsque tes bornes sont modifiées qu'il faut modifier ton message de validation.

    Je dois savoir si j'ai besoin de me faire soigner...
    Il n'a jamais été question de cela, tout le monde a un jour et même souvent je dirais, fait un raisonnement erroné.
    Tu connais sans doute le fameux sophisme : Tout ce qui est rare est cher Un cheval bon marché est rare Donc un cheval bon marché est cher
    Par contre un paralogisme est un raisonnement faux qui apparaît comme valide, notamment à son auteur, lequel est de bonne foi, contrairement au sophisme qui est un argument fallacieux destiné à tromper.
    Par exemple : Tous les chats sont mortels. Socrate est mortel. Donc Socrate est un chat.
    Ce n'est pas avoir perdu la raison que de faire un paralogisme.

    Mais je conçois que cela fasse beaucoup de littérature pour un problème d'apparence trivial
    Effectivement...

    le changement de tranche doit être immédiatement disponible pour le contrôle de saisie
    Tu as tout à fait raison, et c'est pour cela que je t'ai proposé de modifier le contrôle de saisie lorsque la tranche change et c'est ce que tu n'as pas intégré dans le fonctionnement de mon code.

    Bon tu es tellement sûr de ton fait que je pense bien que j'ai perdu mon temps à essayer de t'expliquer ma proposition ...

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 769
    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 : 12 769
    Points : 28 629
    Points
    28 629
    Billets dans le blog
    53
    Par défaut
    Bonjour Anasecu,
    Bon tu es tellement sûr de ton fait que je pense bien que j'ai perdu mon temps à essayer de t'expliquer ma proposition ...
    Effectivement et j'ai très vite compris qu'il était inutile que je propose une solution.
    Quand la personne qui demande de l'aide te fait la leçon, j'avoue que c'est très sympathique
    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

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par anasecu Voir le message
    Bon tu es tellement sûr de ton fait
    Moi, j'ai l'ai sûr de moi ? C'est juste que je ne lâche pas le morceau sans une bonne raison.

    Citation Envoyé par anasecu Voir le message
    que je pense bien que j'ai perdu mon temps à essayer de t'expliquer ma proposition ...
    PAS DU TOUT ! Je craignais ta lassitude mais tes efforts ont portés leurs fruits car j'ai vu la lumière (au sens figuré, je te rassure) ! et tout s'éclaire.
    je viens de comprendre, dès la seconde phrase, que ton code s'occupe (1) du paramétrage de la validation mais (2) pas de restreindre la validation à une plage (ici G3)
    C'est la seconde fonctionnalité que je testais en premier. Toutes mes modifs découlaient d'une tentative d'y remédier au travers de mes tests.
    Avoue que je n'ai rien caché de mon raisonnement afin que tu puisses plus facilement voir si je déraillais et où. Mais on ne comprenait pas nos intensions mutuelles.

    En reprenant Worksheet_Change dans la feuille où tu l'avais mise et en laissant tomber cette histoire de plage: le programme réagit comme attendu.
    C'était juste une question d'attendu. Et du coup tout devient logique (l'Union, etc.)
    Et pour gérer la plage j'imagine qu'un autre intersect sur la feuille concernée fera l'affaire.

    Et oui ! je trouvais ça lourd de réécrire la Validation à chaque saisie mais ce n'est pas à moi de dire si c'est comme ça qu'il faut faire ou non en VBA. J'étais surtout intéressé par le fait que marche et de comprendre pourquoi.
    Un Grand Merci.
    L'enseignement de cet échange est qu'ici comme en Art Martial, le pouvoir de l'intention est grand mais aussi casse gueule.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Effectivement et j'ai très vite compris qu'il était inutile que je propose une solution.
    Quand la personne qui demande de l'aide te fait la leçon, j'avoue que c'est très sympathique
    Tu te méprends. Mener un dialogue contradictoire ce n'est pas faire la leçon. C'est provoquer les réponses que l'on recherche.
    Peut être devrais-je utiliser davantage les smiley ? (pour rassurer sur mon état d'esprit)
    Ou dire merci même si je n'ai pas compris la réponse juste parce qu'elle vient d'un Expert ?

    Les efforts de anasecu ont payés et c'est ce qui compte. Et c'est parce qu'il ne m'a pas jugé sans me connaitre.
    Comprendre le raisonnement d'autrui est un art difficile, surtout à distance. Ce n'est pas en l'évitant qu'on le maîtrise.
    Je dis ça sans Smiley mais avec bienveillance.

  17. #17
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par Dioon Voir le message
    Et pour gérer la plage j'imagine qu'un autre intersect sur la feuille concernée fera l'affaire.
    Eh bien non, ton imagination te joue décidément bien des tours il suffit de renseigner la plage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ws.Range("G3:H20").Validation
    Je pense que tu devrais étudier de plus près les objets, leurs propriétés et leurs méthodes pour pouvoir les utiliser à bon escient.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

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


    Eh bien non, ton imagination te joue décidément bien des tours il suffit de renseigner la plage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ws.Range("G3:H20").Validation
    Fichtre ! C'est bien plus simple.

    Citation Envoyé par anasecu Voir le message
    Je pense que tu devrais étudier de plus près les objets, leurs propriétés et leurs méthodes pour pouvoir les utiliser à bon escient.
    J'en suis conscient. Me frotter à des cas pratiques (utiles comme actuellement) m'aide beaucoup à mémoriser l'intérêt de telle ou telle notion avant de l'approfondir. Par exemple, j'ignorais (faute d'y avoir réfléchi) qu'on pouvait paramétrer toutes les fonctions du bandeau Excel. Mais quand on le sait ça devient une évidence et ça ouvre des perspectives inouïes. Une relecture des basics est également prévue. Je comprends ou crois comprendre à la lecture mais ne mémorise vraiment qu'en codant (activité devenue lointaine). Et là c'est rentré !

    Encore merci.

  19. #19
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par Dioon Voir le message
    Fichtre ! C'est bien plus simple.
    C'est incroyable que tu n'es pas rejeté cette procédure car c'est bien la première fois que l'on me met en demeure de certifier un raisonnement foireux mais indiscutable.

    Si tu as besoin d'un médecin, je crains pour lui d'avance car tu vas lui expliquer la médecine

    Enfin comme dit Philippe que je salue, je m'abstiendrai à l'avenir d'aider des donneurs de leçon.

  20. #20
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 769
    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 : 12 769
    Points : 28 629
    Points
    28 629
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre approche dans ce billet titré Comment rendre dynamique le message de saisie d'une validation de données
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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