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

VBA Access Discussion :

Test controle vide sur sous formulaire continu [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 56
    Par défaut Test controle vide sur sous formulaire continu
    Bonjour à tous,

    Je cheche un moyen de faire un test (en vba) pour savoir s'il existe un enregistrement pour lequel le contrôle "txt_prix" de mon sous formulaire "SF_dem_prix" est vide. Les enregistrements affichés dans mon sous formulaire proviennent d'une requête directement entrée dans la source de mon sous formulaire.

    J'ai pensé à deux solutions mais je n'arrive pas à les coder (manque de compétence !!).

    Première solution : faire une requête identique a la requete source avec en plus une condition EST NULL pour le champ "prix". Si le nombre de résultats de cette requête est =0 alors mon test est faux (il n'existe pas de champ "prix" vide pour ces enregistrements), alors je lance la procédure correspondante.

    Deuxième solution : tester un par un les enregistrements apparaissant dans mon sous formulaire et si un contrôle (zone de texte) "txt_prix" est vide pour un enregistrement alors mon test est vrai.

    En éspérant avoir été clair, merci d'avance pour votre aide !

    Cordialement,

    Pierre

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Citation Envoyé par pierrequimousse Voir le message
    Première solution : faire une requête identique a la requete source avec en plus une condition EST NULL pour le champ "prix". Si le nombre de résultats de cette requête est =0 alors mon test est faux (il n'existe pas de champ "prix" vide pour ces enregistrements), alors je lance la procédure correspondante.
    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
     
    public function APrixNull() as boolean
      dim result as boolean
     
      dim db as dao.database:set db=currrentdb
      dim r as dao.recordset:set r=db.OpenRecordSet("NomTaQueryDeControle")
     
      if r.recordcount<>0 then
          result=true
        else
          result=false
      end if
      'Ou plus synthétique : result=(r.recordcount<>0)
     
      r.close:set r=nothing
      db.close:set db=nothing
     
      APrixNull=result
    end function
    Cette méthode est sans doute plus rapide que celle de parcourrir les enregistrement par VBA mais elle t'oblige à maintenir 2 requêtes qui font la même chose ce qui est rarement une bonne chose car si tu en modifie une il faut penser à modifier l'autre en conséquence.

    Deuxième solution : tester un par un les enregistrements apparaissant dans mon sous formulaire et si un contrôle (zone de texte) "txt_prix" est vide pour un enregistrement alors mon test est vrai.
    Tu peux faire aussi mais une solution ne nécessitant pas de programmation est aussi possible.

    Dans ta requête qui alimente ton sous-formulaire tu ajoutes un champ calculé qui s'appelle EstPrixNull et dont la valeur est IsNull([NomTonChampPrix]). Cela va te donner -1 si [TonChampPrix] est null et 0 sinon. Il suffit ensuite de faire l'addition des EstPrixNull dans un champ calculé dans le pied de ton sous-formulaire (=Somme([EstPrixNull])).

    Si cette somme est 0 alors tu n'as pas de prix null, sinon c'est qu'au moins un prix est null et tu peux même savoir exactement combien de prix nulls tu as.

    Et rendant le pied de sous-form invisble ton utilisateur n'en sait rien.

    Pour lire la valeur de ce champs calculé à partir du formulaire principal tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.NomTonSousFormulaire.Form![NomTaSommeDeEstPrixNull]
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Forms]![NomTonFormulaire]![NomTonSousFormulaire].[form]![NomTaSommeDeEstPrixNull]
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 56
    Par défaut
    Bonjour marot_r,

    Merci pour ces réponses rapides ! J'ai utilisé la deuxième solution que tu m'a proposée, c'est simple, élégant, et fonctionne très bien ! Grand merci à toi donc, bonne journée et bon week end !

    Cordialement,

    Pierre

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/11/2014, 20h30
  2. Pb de Controle sur sous formulaire
    Par Aladin_23 dans le forum IHM
    Réponses: 1
    Dernier message: 07/09/2009, 13h34
  3. Valuer un controle dans un sous-formulaire continu
    Par micniv dans le forum Access
    Réponses: 6
    Dernier message: 25/01/2007, 14h19
  4. probleme de vue sur sous formulaire
    Par fabrice518 dans le forum Access
    Réponses: 12
    Dernier message: 05/09/2005, 10h35
  5. Action sur sous-formulaire filtré
    Par thevenix dans le forum IHM
    Réponses: 4
    Dernier message: 20/06/2005, 00h39

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