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 :

Séparation de données dans 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 Séparation de données dans une zone de texte
    Bonjour,

    But : Filtre un sous-formulaire à l'aide de 3 zones de texte.

    J'ai un formulaire qui est constitué :

    - de 3 zones de textes (Texte0, Texte5, Texte7),
    - de 1 sous-formulaire Fille2

    Le sous-formulaire Fille2 est créé grâce à une requête.
    Dans chaque zone de texte, une lettre ou un groupe de mots ou de lettres peut être écrit. Chaque groupe de mots ou de lettres peut être séparé par un point virgule comme la recherche dans Google. Cette zone de texte peut correspondre à un ou plusieurs champs dans la requête. Il faut utiliser un OU.
    Comment faut-il faire dans le code ci-dessous ? La Syntaxe ?

    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
    Private 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
            ClausE = ClausE & ChamP & " like " & Chr(34) & Chaine & "*" & Chr(34)
          Case 1  'Ajoute le critère si le type est Numerique
            ClausE = ClausE & ChamP & "=" & Chaine
          Case 2  'Ajoute le critère si le type est date
            ClausE = ClausE & ChamP & "=#" & Format(Chaine, "mm/dd/yyyy") & "#"
        End Select
        ArGument = ArGument + 1
    End If
     
    End Sub
     
    Private Sub Commande12_Click()
     
    Dim SQL As String
    Dim NomRequete As String
    Dim Compteur As Integer
    Dim Partie1$
    Dim Partie2$
    Dim strSQL
     
    NomRequete = "Requête1"
    'Appel de la procedure de creation de requête
    'pour le numero de série de type texte
    Restriction Nz(Texte0, ""), "NomAuteur", NomRequete, Compteur, SQL, 0
    'pour la date achat de type date (2)
    Restriction Nz(Texte5, ""), "[Prénom Auteur]", NomRequete, Compteur, SQL, 0
    'Pour la marque de type texte
    Restriction Nz(Texte7, ""), "Nationalité", NomRequete, Compteur, SQL, 0
    'Affecte la requête au sous formulaire
    Me.Fille2.Form.RecordSource = SQL
     
    End Sub
    Code :
    Depuis plusieurs jours que je travaille sur ce code, je n'ai pas encore trouvé la bonne syntaxe et la bonne procédure.
    Aidez-moi !!!

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    peut-être comme ça :
    Code vb : 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
    Private 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)
    Dim arrCritere() As String, iNum 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
        arrCritere() = Split(Chaine, ";")
        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
        ClausE = ClausE & "("
        For iNum = LBound(arrCritere) To UBound(arrCritere)
            If arrCritere(iNum) <> "" Then
               If iNum > 0 Then ClausE = ClausE & " OR "
                Select Case astype
                  Case 0  'Ajoute le critère si le type est texte
                     ClausE = ClausE & ChamP & " like " & Chr(34) & arrCritere(iNum) & "*" & Chr(34)
                  Case 1  'Ajoute le critère si le type est Numerique
                     ClausE = ClausE & ChamP & "=" & arrCritere(iNum)
                  Case 2  'Ajoute le critère si le type est date
                     ClausE = ClausE & ChamP & "=#" & Format(arrCritere(iNum), "mm/dd/yyyy") & "#"
                End Select
            End If
        Next
        ClausE = ClausE & ")"
        ArGument = ArGument + 1
    End If
     
    End Sub
    Exemple:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim SQL As String
    Dim NomRequete As String
    Dim Compteur As Integer
     
    NomRequete = "Requête1"
    Compteur = 0
    ' 1er critère
    Restriction Nz("Hugo;Prévert", ""), "NomAuteur", NomRequete, Compteur, SQL, 0
    ' 2e
    Restriction Nz("", ""), "[Prénom Auteur]", NomRequete, Compteur, SQL, 0
    ' 3e
    Restriction Nz("FR;BE", ""), "Nationalité", NomRequete, Compteur, SQL, 0
    ' affiche requête dans fenêtre d'exécution
    Debug.Print SQL
    donne la requête sql (j'ai mis les sauts de ligne à la main)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Requête1 
    WHERE (NomAuteur like "Hugo*" OR NomAuteur like "Prévert*") 
     AND (Nationalité like "FR*" OR Nationalité like "BE*")
    A+

  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
    Dans chaque zone de texte, une lettre ou un groupe de mots ou de lettres peut être écrit. Chaque groupe de mots ou de lettres peut être séparé par un point virgule comme la recherche dans Google. Cette zone de texte peut correspondre à un ou plusieurs champs dans la requête. Il faut utiliser un OU.
    Les champs peuvent appartenir à plusieurs tables différentes.
    Donc je voudrais pour cela utiliser un OU.

    Exemple :

    Zone de texte (Texte7) : Français;Ile de France; Paris

    Français peut appartenir à plusieurs tables : Table1, Table5, Table6
    Ile de France peut appartenir à plusieurs tables : Table1, Table2, Table4
    Paris peut appartenir à plusieurs tables : Table1, Table3, Table5



    Comment faut-il a jouter dans mon code ci-dessus ? Quelle syntaxe faut-il utiliser ?
    La première réponse à mes question ce n'est pas tout à fait ce que j'attendais.

    Merci d'avance

Discussions similaires

  1. [AC-2013] Importer des donnée dans une Zone de Texte
    Par anto38fr dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/01/2015, 09h27
  2. [AC-2007] Insérer donnée d'une zone de texte dans 2 champs differents
    Par Bubulle232 dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/01/2012, 22h35
  3. [MySQL] affichage données dans une zone de texte déroulante
    Par mayers dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/01/2008, 21h20
  4. Enregistrement d'une donnée dans une Zone de Text
    Par faressam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/05/2007, 18h58
  5. affichage de données dans une zone de texte
    Par Lamie dans le forum Access
    Réponses: 2
    Dernier message: 06/07/2006, 15h31

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