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 syntaxe en VBA pour champ oui/non [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Problème syntaxe en VBA pour champ oui/non
    Bonjour à tous,
    Ce code informe dans la liste déroulante ChoixChamp les champs d'une table, quand le champ est sélectionné la deuxième liste déroulante ChoixValeur informe toutes les données représentées dans le champ sélectionné. ex: si choix prénom sélectionné dans ChoixChamp alors le champ ChoixValeur indique tous les prénoms se trouvant dans le champs Prénom.
    Le problème est quand je sélectionne, après l'ouverture du formulaire d'où les deux listes déroulantes sont, dans la liste déroulante ChoixChamp un champ soit numérique soit texte soit date le choixValeur est renseigné et le sous-formulaire aussi, mais quand après plusieur sélections de champ je sélectionne un choix oui/non ACCESS m'indique une erreur de propriété du champ comme " vous avez inséré une valeur texte dans un champ non compatible... Avez-vous une solution ? Merci à vous tous et bonne soirée

    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 ChoixValeur_AfterUpdate()
     
    Dim ChampFiltre As String, Condition As String
    Dim MonSQL As String, NbEnreg
    Dim DateE As Date
    '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
     
    ElseIf ChampFiltre = "CodeTitre" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " = " & Condition
     
    ElseIf ChampFiltre = "PasDeTéléphone" 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

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 372
    Points
    34 372
    Par défaut
    salut,
    déjà petite recommandation de programmation,
    en lieu et place des multiples ElseIf Then, je te propose un Select Case

    et pour le champ oui/non, à quelle ligne de code as-tu cette erreur ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Problème syntaxe en VBA pour champ oui/non
    Salut,

    La Ligne qui me pose problème c'est dans le sous-formulaire ci-joint le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.SF_rechercheClients.Form.RecordSource = MonSQL
    quand je sélectionne plusieurs types de champs numériques ou textes tout va bien les données se positionnent dans mon sous-formulaire, puis si je séléctionne un champ oui/non alors blocage et j'ai en surbrillance mon code si dessus.
    Par contre si le premier choix est un champs oui/non cela fonctionnne et les données se positionnent dans mon sous-formulaire, mais si après je sélectionne un champ texte ou numérique alors de nouveau blocage et c'est toujours le même code qui est surligné c'est à dire le code ci-dessus.
    La chose bizarre c'est que je peux sélectionner aussi bien du texte puis du numérique puis du texte et encore du numérique sans rencontrer de problème et c'est simplement quand je choisi un champ oui/non que les problème arrivent.
    Je dois donc avoir un problème de syntaxe pour définir le champ oui/non dans mon code.
    Si tu as une solution ......
    Merci et A+

  4. #4
    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 768
    Points
    7 768
    Par défaut
    Bonsoir,

    En supposant que ta liste propose "Oui" ou "Non".
    essaie de remplacer "Oui" par "True" et "Non" par "False" dans la variable Condition.

    A+

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Problème syntaxe en VBA pour champ oui/non
    Salut LedzeppII,
    J'ai essayé ta syntaxe sans succès. je t'envoi ma base en Zip afin que tu pisse voir réellement mon problème. En faite si dans le formulaire " rechercheClients" je sélectionne dans la liste déroulante ChoixChamp le un champs oui/non comme les champs ADSL, Analogique ou pasDeTéléphone lors je sélectionne le oui ou le non et une fenêtre me demande d'indiquer la valeur du champ si j'indique 0 ou -1 cela fonctionne. Je souhaite simplement éviter d'indiquer la valeur 0 ou -1.
    As tu une solution à ce problème. Je pense que quelque par une erreur de syntaxe a été faite mais où je ne le sais pas.
    Une bonne soirée à tous
    Franck

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous,
    Le problème est résolu grâce à la condition select case .
    Merci à jpcheck qui m'avait guidé dans cette construction et aussi à Ilank.
    Ce code permet donc, dans un formulaire après la sélection d'un libellé de champ, repris dans la table Clients, dans la liste déroulante "ChoixChamp" de sélectionner dans une deuxième liste déroulante "ChoixValeur" n'importe quelle valeur que ce soit du texte, une date, un champ oui/non, un champ monétaire. Toute l'information s'incrit dans le sous-formulaire " SF_rechercheClients "

    Ci joint le code en selectcase:

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ChoixChamp_AfterUpdate() ' ChoixChamp libellé de la première liste déroulante
       'Mes la liste déroulante vide pour pouvoir sélectionner un champ
       ChoixValeur = ""
           If ChoixChamp.Value <> "" And Not IsNull(ChoixChamp.Value) Then
            If SF_rechercheClients.Form.Recordset.Fields(ChoixChamp.Value).Type = dbDate Then
                ChoixValeur.RowSource = "SELECT DISTINCT Cstr(" & ChoixChamp.Value & ") FROM Clients ORDER By Cstr(" & ChoixChamp.Value & ")"
            Else
                ChoixValeur.RowSource = "SELECT DISTINCT " & ChoixChamp.Value & " FROM Clients"
            End If
        Else
            SF_rechercheClients.Form.RecordSource = "Clients"
        End If
    End Sub
    après la mise à jour du champ ChoixChamp:

    Code :
    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
    Private Sub ChoixValeur_AfterUpdate() ' ChoixValeur libellé de la deuxième liste déroulante
    Dim Condition As String
        If Not IsNull(ChoixValeur.Value) Then
        Condition = ChoixValeur.Value
            If SF_rechercheClients.Form.RecordSource = "" Then SF_rechercheClients.Form.RecordSource = "Clients"
            Select Case SF_rechercheClients.Form.Recordset.Fields(ChoixChamp.Value).Type
                Case dbDate 'dbDate est une constante access qui indique pour un champ (Field): Date/Heure
                    Condition = Chr(35) & Format(ChoixValeur.Value, "mm/dd/yyyy") & Chr(35)
                Case dbText 'dbText est une constante access qui indique pour un champ (Field): Texte
                    Condition = Chr(34) & ChoixValeur.Value & Chr(34)
     
                Case dbBoolean 'dbBoolean est une constante access qui indique pour un champ (Field): oui/non
                    Condition = IIf(ChoixValeur.Value = "Oui", "-1", "0")
                Case dbSingle, dbCurrency, dbDouble, dbFloat
                    Condition = Replace(ChoixValeur.Value, ",", ".")
            End Select
         SF_rechercheClients.Form.RecordSource = "SELECT * FROM Clients WHERE " & ChoixChamp.Value & " = " & Condition
        End If
    End Sub
    A l'ouverture du formulaire:

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
        'Pour obtenir une liste vide à l'ouverture du formulaire - Valider les lignes suivantes
        SF_rechercheClients.Form.RecordSource = "SELECT * FROM Clients WHERE IDClient IS NULL"
    End Sub

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

Discussions similaires

  1. Champ oui/non et VBA
    Par gorjette dans le forum IHM
    Réponses: 4
    Dernier message: 16/05/2010, 18h14
  2. [AC-2003] SQL-Case à cocher pour champ Oui/non
    Par AndréPe dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/01/2010, 08h43
  3. Réponses: 1
    Dernier message: 03/10/2008, 21h34
  4. [VBA] : Pb Create Table avec Champs Oui/Non
    Par GuidoBrasletti dans le forum Access
    Réponses: 8
    Dernier message: 15/03/2006, 19h11
  5. Mise à jour d'un champ Oui/Non
    Par mouloudéen dans le forum Access
    Réponses: 3
    Dernier message: 11/03/2006, 22h32

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