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

IHM Discussion :

Affecter valeur à un textebox d'un formulaire en fonction de la valeur retourné par un champ requête [Toutes versions]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut Affecter valeur à un textebox d'un formulaire en fonction de la valeur retourné par un champ requête
    Bonjour à tous,

    tout nouveau dans le monde passionnant de la programmation access, je me casse la tête depuis 3 jours sur un problème qui sans doute est assez simple à résoudre mais auquel je ne trouve aucune solution compréhensible à mon niveau sur les différents forums que j'ai consultés.
    Voici mon problème:

    j'ai créé un formulaire continue qui m'affiche les résultats d'une requête (environ 2000 enregistrements) jusque là rien de compliqué et tout fonctionne très bien je voudrais maintenant ajouter un textbox indépendant qui prendrait différentes valeurs "texte" en fonction de la valeur numérique d'un champ retourné dans un autre textebox du formulaire (lié à ce champs bien sûr)
    le champs de la requête ne vient pas d'une table mais est calculé à partir de la différence de date du champ d'une table qui appartient à la requête et de la date du jour
    Je m'explique:
    Dans la requête j'ai un champs [prochain] (format date) qui vient d'une table T_Session et j'ai crée dans ma requête un champs Reste qui contient la différence en tre [Prochain] et [Maintenant]() (libéllé Reste: NZ([prochain]-Maintenant()).
    Tout ceci fonctionne bien et je reçoit bien mon "reste" dans cahque enregistrement ma textBox lié
    Mais lorsque j'écris le code pour comparer les valeur prise par cette textbox et affecté la valeur ma textbox cible rien ne ce passe... Pas de message d'erreur... queue Dalle... et c’est ce qui est frustrant car du coup je ne sais pas où je me plante... :'-(
    j'ai essayé plein de code à base de If-ElseIf, ou de Case mais rien n'y fait et j'arrive au bout de mes compétences (et de ma patience!).
    En gros ce que je veux c'est:
    Me.reste > X alors Me.cible= valide ; X<Me.reste>Y alors me.cible=recyclage, Me.reste< Y alosr me.Cible=Dépassé.
    dis comme ça ça ne parait pas compliqué... mais je n'y arrive pas
    Pouvez-vous m'aider S'il vous plait?
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et bienvenue chez nous,


    Pas facile à suivre ton histoire !

    Peux-tu poster ta db dans une version Access2000, ce sera sans doute alors plus concret.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Salut,

    Et merci beaucoup pour cette réponse rapide.
    J'ai bien conscience que ce n'est pas facile à expliquer comme ça et je ne suis pas certain que la DB t'aide beaucoup alors je t'ai fait des copie d'écran de la requête, du formulaire, du formulaire actif et le formulaire en mode feuille de données avec quelques commentaires qui je l'espère te permettront de cerner le problème.
    Si ça ne va toujours pas n'hésite pas à le dire j’essaierai d'être toujours plus clair...
    Images attachées Images attachées     

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Désolé, je passe.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Pas de mal!
    D'autres challenger? ?

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonsoir,

    A priori, tu veux affecter une valeur à un "champ" ou "contrôle" d'un formulaire par rapport à un autre selon les conditions :
    Me.reste > X alors Me.cible= valide ; X<Me.reste>Y alors me.cible=recyclage, Me.reste< Y alosr me.Cible=Dépassé.
    Comment tu t'y prends? parce que tes images ne l'expliquent pas.

    La fonction suivante devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function ValCible (PrReste as long) as string
    If PrReste > X then
         ValCible = "Valide"
    Else
         If PrReste <Y then
              ValCible = "Recyclage"
         Else
              ValCible = "Dépassé"
         End If
    End If
    end Function
    Tu peux l'appeler directement dans ta requête, tu crées un champ avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CibleVal : ValCible(Reste)
    Et le champ CibleVal sera accessible dans ton formulaire
    ou dans le formulaire dans ton contrôle :
    Cordialement,

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Merci pour la suggestion et le code que je testerais demain, je ne manquerais pas de te tenir informé du succès ou des difficultés rencontré.
    pour te préciser les choses afin de peut affiner ta réponse je reprends ce que j'ai écrit et envoyé en essayant d'être plus clair

    J'ai un formulaire de tri dans lequel figure toute les formation suivi par le personnel de mon service avec différents renseignements (voir copie d'écran Formulaire) qui est lié à une requête qui me permets de trier à l'envie tout ces critère (voir copie d'écran Requête) cela fonctionne mais ce n'est pas assez complet pour l'usage que je veux en faire.
    certaine formation doivent être renouvelé à intervalle régulier et j'ai besoin de connaître l'état d'avancement de c'est formation par rapport à leur date d'échéance, cette date est déjà calculée et apparaît dans le formulaire (et la requête) c'est le champ [prochain] issu de la table Session (T_Session: voir copie d'écran requête)
    Pour que ce soit plus facile et parlant pour l’utilisateur je voudrais ajouter un textbox d'alerte qui me renverrais la valeur "Valide", "recyclage", "dépassé" en fonction de l'arrivée à échéance: par exemple "valide" jusqu'à 120jours, "Recyclage" entre 120 et la date d'échéance et "Dépassé" aprés la date.
    pour cela j'ai inclus dans ma requête un champs [delai] (ou reste) qui calcul le nombre de jours restants (voir copie écran requête) ce champs fonctionne aussi et j'arrive à renvoyé sa valeur dans mon formulaire lorsque j'exécute ma requête.
    On arrive enfin à mon problème :-) Lorsque je veux évaluer cette valeur "delai" (plus grand ou plus petit que 120j pour faire simple) et en fonction de cette valeur affecter à mon textebox d'alerte la valeur correspondant rien ne ce passe ou la valeur affecté est toujours la même malgré des valeur de [reste] très différente.
    j'ai essayé en faisant des comparaisons If (genre If me.delai<120 then me.TextboxAlerte=Recyclage avec des ElseIf pour les autres conditions) j'ai mis ce code à l'ouverture du formulaire après Me.requery mais ça ne fonctionne pas. j'ai également essayé avec une méthode Case.... pareil :-( et le plus frustrant c’est qu'il n'y a aucun message d'erreur. qui me permette de cibler mes errances!)
    je pense que mon échec vient en effet du fait que j'essaie de comparer un champs (qui comprends plus de 2000 lignes) et que If ou Case ne sont pas les bonnes méthodes pour tester les uns après les autres toute les valeurs de [delai] et que sans doute le salut et dans ta solution du Recordset; le problème principal étant que je ne sais absolument pas manier ce type de fonction... Mais bon tout s'apprend et avec de l'aide tout est possible! c'est pour cela que je te remercie encore de prendre de ton temps pour lire ce petit roman qui, je l'espère, te permets de mieux saisir mon souci.

  8. #8
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    Angelinu,

    mauvaise stratégie, tu vas t’épuiser (et nous aussi par ailleurs) à essayer de décrire ton problème alors que si tu mets à disposition une base (épurée de données confidentielle ) ou même des écrans ne posant pas de problèmes, il y a plein de spécialistes qui peuvent t'aider et probablement voir immédiatement d'où vient le souci ( petite remarque, tu viens d'en décourager 1, particulièrement émérite )

    Mais à toi de voir

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Salut,

    Et désolé de ne pas avoir mesuré l'importance d'avoir la base à dispo pour pouvoir répondre.
    Effectivement il y a des donnée plutôt confidentielles mais ça n'excuse rien car épuré le fichier est assez facile et c’est ce que j'ai fait!
    Tu trouveras donc la version expurgée de ma Bd contenant juste les donnée nécessaire à exposer le problème:

    Donc je résume ce que je veux:
    Qu'à l'ouverture du formulaire le textBox "StatutForm" prenne différentes valeur "texte" en fonction de la valeur numérique du TextBox "RepriseReste"
    j'ai rentré le code ci-dessous dans l’événement "ouverture" du formulaire mais tu constateras que bien que la syntaxe soit correcte ça ne fait pas du tout ce que je veux... j'ai essayé aussi avec un code "Select Case" et même chose.

    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
    Private Sub Form_Open(Cancel As Integer)
     
        Me.Requery
     
        If IsNull(Me.RepriseReste.Value) Then
            IsNull (Me.StatutForm.Value)
        ElseIf Me.RepriseReste.Value < 120 Then
            Me.StatutForm.Value = "Valide"
        ElseIf 0 < Me.RepriseReste.Value < 120 Then
            Me.StatutForm.Value = "Recyclage"
        ElseIf -120 < Me.RepriseReste.Value < 0 Then
            Me.StatutForm.Value = "Dépassé"
        ElseIf Me.RepriseReste.Value < -120 Then
            Me.StatutForm.Value = "Périmé"
        End If
    End Sub

    Voilà, j'espère que tu (vous tous) pourrez m'aider et encore désolé pour la perte de temps.
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    Si t'es dans un formulaire continu, effectivement avec un contrôle indépendant, tu ne peux pas avoir des valeurs différentes pour chaque enregistrement.
    Il faut définir une source pour ton contrôle.
    Je joins ta base modifiée avec la fonction proposée hier.

    Cordialement,

    PS : La prochaine fois, compacte ta base avant de la zipper et de la poster.
    Je sais que de nos jours la taille n'est pas un élément essentielle, mais essayons d'économiser quand c'est possible .

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup!! Je teste ça et je reviens dire si ça marche.

    Oui, je penserais au "compactage" de ma base la prochaine fois (car il y aura sans doute une prochaine fois!! )

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Re-Salut,


    Et Archi-Merci madefemere car ta solution fonctionne à merveille avec la base simplifiée.
    je vais maintenant intégrer ce module avec le code (que j'ai adapté à mon besoin voir ci dessous) dans ma "vraie" base et ça devrait le faire!

    je reviendrais clore le sujet à ce moment mais déjà Big Up pour toi et tous ceux qui ont essayé de me répondre malgré mes imprécisions!

    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
    Option Compare Database
    Option Explicit
    Function FnStatut(RepriseReste As Variant) As String
     
     
        Select Case RepriseReste
     
        Case Is < -120
            FnStatut = "périmé"
        Case Is < 0
            FnStatut = "dépassé"
        Case 0 To 120
            FnStatut = "Recyclage"
        Case Is > 120
            FnStatut = "Valide"
        Case Else
            FnStatut = ""
        End Select
     
        Debug.Print RepriseReste, "Résultat=", FnStatut
    End Function

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Novembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Ca Fonctionne!!

    Sujet clos!
    1000 fois merci!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/06/2011, 10h02
  2. Réponses: 17
    Dernier message: 23/05/2007, 14h57
  3. Réponses: 7
    Dernier message: 23/02/2007, 15h33
  4. Réponses: 4
    Dernier message: 01/08/2006, 16h12
  5. Réponses: 4
    Dernier message: 12/06/2006, 11h46

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