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 :

Probleme de transfert de données par liste déroulante [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 Probleme de transfert de données par liste déroulante
    Bonjour à tous,
    Ci-dessous le code pour mettre à jour un sous formulaire Me.SF_rechercheClients. Le problème c'est la sélection d'une date dans la liste déroulante ChoixValeur n'introduit pas les renseignement du client dans le formulaire et aussi un champ boléen. Sinon pour le numérique et le texte tous marche. Y a t'il quelqu'un qui peut me renseigner. Merci d'avance

    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
    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
     
    ElseIf ChampFiltre = "DateE" 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 & """"
     
     
     
    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
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    Pour différencier les dates des divisions, on encadre les dates avec des #
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf ChampFiltre = "DateE" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " =#" & Condition & "#"
    Si cela ne suffit pas, il faudra peut être mettre la date en MM/JJ/AAAA
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf ChampFiltre = "DateE" Then
    MonSQL = "SELECT * FROM Clients Where " & ChampFiltre & " =#" & format(Condition,"MM/DD/YYYY") & "#"
    Frédéric
    Développeur d'Applications Access

  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
    Merci pour le code j'avais bien un problème de syntaxe pour le champs DateE.Ta première solution fonctionne. Pour le champ boléen (champ oui/non) je ne trouve dans aucun bouquin la syntaxe en VBA à employer.
    A+ à tous et bon week-end.
    Avis aux amateurs....

  4. #4
    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 Correction pour créer une liste déroulante sur VBA
    Bonjour à tous,

    Pour info j'ai pu créer une liste de valeur "ChoixChamps" qui répertorie tous les champ d'une table. Après la sélection du champ, la liste de valeur ChoixValeur est réactualisée par la valeur du champ sélectionné.
    Merci à fgiambelluco qui m'a aidé dans la finalisation de mon code.
    A vos ordis et A+
    Ci dessous le code intégral, avis aux amateurs.

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    Option Compare Database
    
    
    Private Sub ChoixChamp_AfterUpdate()
    Dim MonSQL As String
    'définition de l'instruction SQL
    'qui alimente la liste déroulante ChoixValeur
    MonSQL = "SELECT DISTINCT " & Me.ChoixChamp
    MonSQL = MonSQL & " FROM Clients order by " & Me.ChoixChamp
    'Définit la propriété Origine source
    'de la liste déroulante ChoixValeur
    'en tant que table/requête
    Me.ChoixValeur.RowSourceType = "Table/Query"
    'Définit la propriété Contenu
    'de la liste déroulante ChoixValeur
    'avec la valeur définie dans MonSQL
    Me.ChoixValeur.RowSource = MonSQL
    
    End Sub
    
    Private Sub ChoixChamp_Click()
    DoCmd.Requery
    End Sub
    
    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
    ' j'ai pu constater qu'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
    
    Private Sub Form_Open(Cancel As Integer)
    
    
    Me.SF_rechercheClients.Form.RecordSource = "SELECT IDClient FROM Clients WHERE False;"
    
    End Sub

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 18/06/2014, 02h34
  2. E-mail avec données excell selectionnées par liste déroulante
    Par jooris dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/03/2012, 02h39
  3. Réponses: 18
    Dernier message: 23/12/2011, 20h11
  4. Réponses: 3
    Dernier message: 24/11/2008, 14h09
  5. PB de Transfert de données par l'URL
    Par TUX01 dans le forum Langage
    Réponses: 4
    Dernier message: 02/12/2005, 16h04

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