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 :

[Formulaire] Rechercher des données à l'aide d'une zone de texte


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut [Formulaire] Rechercher des données à l'aide d'une zone de texte
    Bonjour,

    J'ai un formulaire F1 avec des zones de texte
    RESULTS_OF_THE_RESEARCH est le sous-formulaire de mon Formulaire F1.
    Il a 4 zones de texte :
    - txtNom,
    - txtPrénom,
    - txtPrix,
    - txtNomdeProduit.
    Un bouton de commande cmd_Research pour la recherche de donnée.

    1er souci :

    A l'aide de la zone texte txtNomdeProduit rechercher des données dans 2 champs différents Produit1 et Produit2 d'une même table.
    J'aimerai avoir une liste des Produit1 puis en dessous une liste des Produit2 (avoir un OU).

    2ème souci :

    Faire une recherche sur les prix : rechercher tous les prix (dans le champ Prix) qui correspond +- 10% de la valeur inscrite dans la zone de texte txtPrix

    Je ne sais pas la démarche qu'il faut employer pour les 2 cas précédents.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Private Sub cmd_Research_Click()
     
    'Filtre pour le sous-formulaire des Données
    Dim SQL As String
    Dim NomRequete As String
    Dim Compteur As Integer
     
    NomRequete = "RFacture"
    'Appel de la procedure de création de requête
    'pour le nom de type texte pour Zone de Texte
    Restriction Nz(txtNom, ""), " [Nom]", NomRequete, Compteur, SQL, 0
    'pour le prénom de type texte pour Zone de Texte
    Restriction Nz(txtPrénom, ""), " [Prénom] ", NomRequete, Compteur, SQL, 0
    'Pour le prix pour Zone de Texte
    Restriction Nz(txtPrix, ""), "[Prix]", NomRequete, Compteur, SQL, 1
    'pour le prénom de type texte pour Zone de Texte
    Restriction Nz(txtNomdeProduit, ""), "[Produit1] & [Produit2]", NomRequete, Compteur, SQL, 2
    'affiche requête dans la fenêtre d'exécution
    Debug.Print SQL
    'Affecte la requête au sous formulaire
    Me.RESULTS_OF_THE_RESEARCH.Form.RecordSource = SQL
     
    End Sub
     
    Public Sub Restriction(ByVal Chaine As String, _
             ByVal ChamP As String, ByVal matable As String, _
             ByRef Argument As Integer, ByRef ClausE As String, ByRef astype As Integer)
     
     
    ' Choix du type : 0 pour un string, 1 pour un numérique ou booleen
    ' 2 pour une date
     
    'Construit la requête au premier passage
    If Argument = 0 Then
      'Elimine les espaces
       matable = Trim$(matable)
      'Si table est une sous requete :(commence par select)
      If InStr(1, matable, "SELECT ", vbTextCompare) <> 0 Then
        'Enleve le ; s'il existe
        If Right(matable, 1) = ";" Then _
           matable = Left(matable, Len(matable) - 1)
        'encadre la sous requete avec des ()
        ClausE = "SELECT * FROM (" & matable & ")"
      Else
        ClausE = "SELECT * FROM " & matable
      End If
    End If
    If Chaine <> "" Then
        If Argument = 0 Then
        '  Ajoute le WHERE
        ClausE = ClausE & " WHERE "
        ' Ajout de l'opérateur "AND" si le where existe déja
        Else: ClausE = ClausE & " AND "
        End If
        Select Case astype
          Case 0  'Ajoute le critère si le type est texte pour une liste déroulante
            ClausE = ClausE & ChamP & " like " & Chr(34) & "" & Chaine & "" & Chr(34)
          Case 1  'Ajoute le critère si le type est Numérique
            ClausE = ClausE & " 0,9 * " & Chaine & " < " & ChamP & " < " & "1,1 * " & Chaine & Chr(34)
          Case 2  'Ajoute le critère si le type est texte pour une zone texte
            ClausE = ClausE & ChamP & " like " & Chr(34) & "" & Chaine & "" Or ChamP & " like " & Chr(34) & "" & Chaine & "" & Chr(34)
        End Select
        Argument = Argument + 1
    End If
     
    'argument chaine correspond à la valeur recherchée.
    'argument champ correspond au champ sur lequelle doit se faire la restriction.
    'argument matable correspond au nom de la table ou d'une requête.
    'argument Argument est un entier.
    'argument Clause est une chaine qui acceptera le résultat.
    'argument astype correspond à un entier représentant le type du champ. 0 pour du texte, 1 pour du numérique, 2 pour une date.
     
    End Sub
    Merci d'avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par rantanplan81
    Bonjour,

    1er souci :

    A l'aide de la zone texte txtNomdeProduit rechercher des données dans 2 champs différents Produit1 et Produit2 d'une même table.
    J'aimerai avoir une liste des Produit1 puis en dessous une liste des Produit2 (avoir un OU).
    Si tu as vraiment un structure comme cela il faut que tu fasse 2 recherches (une sur chaque champ) et que tu fasse une union des deux requètes de recherche.

    Mais il se peut que tu ai une erreur de conception, normalement quand on a un cas sembable la BD est structurée ainsi :

    TablePrincipale :
    ClefPrincipale
    InfoPrincipale

    TableDetail
    ClefDetail
    ClefPrincipale
    ClefProduit

    Cette structure te permets d'avoir autant de produit que besoin.

    2ème souci :

    Faire une recherche sur les prix : rechercher tous les prix (dans le champ Prix) qui correspond +- 10% de la valeur inscrite dans la zone de texte txtPrix
    l'opperateur a utiliser est Between BorneInferieure and BorneSuperieure

    dans ton cas ça devrait ressembler à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonChamp Between MonParam * .9 and MonParam * 1.1
    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 à l'essai
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    MonChamp Between MonParam * .9 and MonParam * 1.1
    J'ai un pb sur la syntaxe mais je sais pas ou.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case 1  'Ajoute le critère si le type est Numérique
            ClausE = ClausE & ChamP & "between" & Chaine * 0.9 And Chaine * 1.1
    J'ai un message d'erreur qui apparaît :

    Erreur d'exécution '13'
    Incompatibilité de type
    Merci d'avance

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case 1  'Ajoute le critère si le type est Numérique
            ClausE = ClausE & ChamP & "between" & Chaine &"* 0.9  And" & Chaine &"* 1.1"
    Faut pas oublier les espaces, en espérant que ca t'aide.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Merci kerynette

    Je n'ai plus de pb de syntaxe mais toujours un autre souci maintenant.

    ex : J'aimerai rechercher tous les produits qui coûtent 12 €+/-10%
    Je mets 12 dans la zone de texte txtPrix

    Cela donne comme résutat tous les produits qui "contiennent" le chiffre 12.
    Résultat : 12.1; 121;1.1; ...etc
    Ce n'est pas tout à fait ce que je veux.

    J'attends votre réponse avec impatience.

    Merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2015, 17h35
  2. [AC-2000] Rechercher des enregistrements à l'aide d'une barre de recherche
    Par Theo64 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/05/2012, 13h53
  3. [XL-2007] Déplacer des données à l'aide d'une date T0
    Par ievtohs dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 08/07/2011, 20h50
  4. Affichage des sauts de lignes dans une zone de texte
    Par Whombat dans le forum Langage
    Réponses: 3
    Dernier message: 25/01/2009, 02h47
  5. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08

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