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 :

Problème de définition des valeurs de champ


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Par défaut Problème de définition des valeurs de champ
    bonjour ,

    Quand je séléctionne le choix d'un champ dans ma liste déroulante "ChoixChamp" celle-ci met à jour la valeur du champ (ex: Texte ou Numérique ou oui/non) à ma liste déroulante ChoixValeur. Pour un champ oui/non j'ai un message m'indiquant de rentrer la valeur; Si je rentre -1 ou 0 alors j'ai mon sous-formulaire qui renseigne toute la liste de mes clients. Je me demande quelle syntaxe il faut que j'emploi pour eviter de devoir taper -1 ou 0. Dans ma liste déroulante je peux avoir que séléctionner oui ou non et non les valeur -1 ou 0.
    Simplement le ligne référencent mon champ "ADSL" qui est un champ oui/non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf ChampFiltre = "ADSL" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition

    Mon code entier:
    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
    Private Sub ChoixValeur_AfterUpdate()
     
    Dim ChampFiltre As String, Condition As String
    Dim MonSQL As String, NbEnreg
    Dim DateE As Date
    Dim ADSL, Analogique, RbtCaution As Boolean
    Dim IDClient As String
     
     
    'affecte le nom du champ sélectionné
    'sur la liste déroulante ChoixChamp
    'à la variable ChampFiltre
    ChampFiltre = Me.ChoixChamp
     
    'affecte la valeur sélectionnée
    'sur la liste déroulante ChoixValeur
    'à la variable condition
    Condition = Me.ChoixValeur
     
    'Teste si le code filtré est le studio
    'car c'est le seul champ de type numérique
    'dans la table Clients
    'La clause WHERE doit être traitée différemment
    'sur un champ Numérique et sur un champ Texte
    If ChampFiltre = "Studio" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    'ElseIf permet de créer des tests multiples
    'ex: dans ce contexte les champs sont ou Integer ou Date ou String
    'Il faut donc énumérer toutes les types de données.
    ElseIf ChampFiltre = "Number" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    ElseIf ChampFiltre = "CodeTitre" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    ElseIf ChampFiltre = "Comptecomptable" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    'Pour un champ DATE on doit introduire avant le guillemet, le diese puis fermer
    'la condition par un & espace, guillemet, dièse et guillemet.
     
    ElseIf ChampFiltre = "DateE" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " =#" & Condition & "#"
     
    ElseIf ChampFiltre = "DateS" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " =#" & Condition & "#"
     
    ElseIf ChampFiltre = "ADSL" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    ElseIf ChampFiltre = "Analogique" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
    Else
     
    'Dans le cas d'un champ de type Texte
    'la condition WHERE doit inclure un certain nombre de guillemets
    ' ou d'apostrophes
    MonSQL = "SELECT * FROM Clients WHERE " & ChampFiltre & " = " & """" & Condition & """"
    DoCmd.Requery
     
     
     
    End If
    'attribue à la propriété RecordSource du sous-formulaire
    'SF_RechercheClients
    'l'intruction SQL nommé MonSQL
     
    Me.SF_rechercheClients.Form.RecordSource = MonSQL
     
    End Sub
    Si quelqu'un peu m'aider ce serait sympa car cela fait une semaine que je rame tout seul et je fatique; Merci à tous;
    Franck

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    bonjour,
    dans ta liste tu mets deux champs,
    le premier: affiche oui ou non;
    le second:il aura pour valeur -1 ou 0. ce second champ tu le mets de largeur 0 dans la feuille de propriété.
    les données liées c'est le second champ.

    Voilà, j'espère que cela t'aiderait à résoudre ton problème.
    bon prog.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Par défaut
    Petit bison,
    Merci pour ton conseil, mais si j'indique dans les propriétés de ma liste déroulante "colonne liée" : 2, alors j'ai une erreur 3075 "opérateur absent".
    Ce qui me faudrait c'est de pouvoir transformer mon oui en chiffre -1 et mon non en chiffre 0 ce qui me permettrai de ne pas avoir l'erreur 3464 "type de données incompatible dans l'expression du critère".

    bien à toi
    Franck

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    Bonjour,
    essaie ceci.
    Crée un formulaire.
    Ajoutes y un contrôle "zone de liste déroulante"
    "utilise l'assistant, mais clique sur annuler à la première étape"
    nome ce contrôle "Modifiable1";
    toujours en mode création;
    dans la liste des propriétés du formulaire, onglet "Événement", trouve "sur chargement" puis déroule "[Procédure événementielle]"
    tu doit y avoir le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Form_Load()
    Modifiable1.ColumnCount = 2
    Modifiable1.RowSourceType = "Value List"
    Modifiable1.ColumnWidths = "100;0" 
    Modifiable1.BoundColumn = 2
    Modifiable1.AddItem "Oui;0"
    Modifiable1.AddItem "Non;-1"
    End Sub
    tu vas dans ta liste modifiable onglet "Événement", trouve "Après MAJ"
    tu dois copier ce code pour avoir ceci,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Modifiable1_AfterUpdate()
    MsgBox "Liste modifiable colonne 0 = " & Modifiable1.Column(0) & vbCrLf _
           & "Liste modifiable colonne 1 = " & Modifiable1.Column(1)
     
    End Sub
    enregistre ton form
    choisi dans la zone de liste modifiable.
    Voilà, j'espère que cela permeterait de résoudre ton problème.
    remarque: à part le événements, tous ces réglages tu peux les faire manuellement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    re bonjour,

    je viens de jeter un clin d'œil dans ta deuxième partie de code,

    Utilise un select case au lieu des IF, c'est plus lisible

    Utilise un array pour les "MonSQL", c'est facilement maintenable.

    Bonne chance.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    essayer en faisant un Select Case sur le type du champ.

    Exemple :
    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
     
    Private Sub ChoixValeur_AfterUpdate()
    Dim ChampFiltre As String, Condition As String
     
    'affecte le nom du champ sélectionné
    'sur la liste déroulante ChoixChamp
    'à la variable ChampFiltre
    ChampFiltre = Me.ChoixChamp
     
    'affecte la valeur sélectionnée
    'sur la liste déroulante ChoixValeur
    'à la variable condition
    Condition = Me.ChoixValeur
     
    Select Case Sf_RechercheClients.Form.Recordset.Fields(ChampFiltre).Type
        Case dbDate
            Condition = Chr(35) & Format(Condition, "mm/dd/yyyy") & Chr(35)
         Case dbText
            Condition = Chr(34) & Condition & Chr(34)
          Case dbBoolean
            Condition = iif(Condition="Oui","-1","0")
         Case dbSingle, dbCurrency, dbDouble, dbFloat
            Condition = Replace(Condition, ",", ".")
    End Select
     
    'attribue à la propriété RecordSource du sous-formulaire
    'SF_RechercheClients
    'l'intruction SQL
    Sf_RechercheClients.Form.RecordSource = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
     
    End Sub
    Pour la sélection des valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private sub ChoixChamp_AfterUpdate()
     ChoixValeur.Value=""
     ChoixValeur.RowSource="SELECT DISTINCT " & ChoixChamp.Value & " FROM Clients"
    End sub

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/08/2006, 14h45
  2. [Cookies] Conserver des valeurs de champs
    Par Sergejack dans le forum Langage
    Réponses: 4
    Dernier message: 31/07/2006, 11h17
  3. [SQL] Problème de récupération des valeurs d'une liste multiple en php
    Par BOLARD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/05/2006, 00h29
  4. [Système] Problème de définition des variables
    Par SLAM JACK dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 19h53
  5. Tri par la moyenne des valeurs de champs ?
    Par rozwel dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/01/2005, 18h35

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