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 :

VBA recordset, je n'y arrive pas avec un champs texte d'une table!


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut VBA recordset, je n'y arrive pas avec un champs texte d'une table!
    Bonjour/bonsoir à vous tous!

    Je patine avec ces lignes depuis un moment maintenant.

    J'ai bien essayé de trouver la solution, mais je n'arrive pas à le faire fonctionner...

    J'essaie de remplir un recordset pour cibler certaine données selon une date de début et date de fin provenant d'un champ du formulaire... Ceci fonctionne très bien!

    Mais je dois ajouter un autre critère texte dans la table étant oui ou "", mais là je galère!

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        'Si la variable globale est à 2 c'est une recherche pour l'alto sinon c'est vista par défault
        If Recherche = 2 Then
            'J'ouvre un recordset pour n'avoir que les données alto
            Set rs = CurrentDb.OpenRecordset("SELECT tbl_ato.DateCreation, tbl_ato.Alto, tbl_ato.Rendement FROM tbl_ato WHERE tbl_ato.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Alto='OUI'")
        Else
            'Je vais chercher les données pour vista
            Set rs = CurrentDb.OpenRecordset("SELECT tbl_ato.DateCreation, tbl_ato.Alto, tbl_ato.Rendement FROM tbl_ato WHERE tbl_ato.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Alto=''")
        End If
    Pouvez-vous m'aider à m'en sortir?

    Merci à l'avance pour votre aide

    Louise

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut J'ai essayé ceci, mais ne fonctionne pas plus
    Re bonsoir,

    J'ai esayé ceci en définisant une variable string nommée typAlto qui reçoie OUI comme argument, mais rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = CurrentDb.OpenRecordset("SELECT tbl_atomisation.DateCreation, tbl_atomisation.Agglo, tbl_atomisation.Rendement FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# and Agglo = '" & typAlto & "'")
    Aucun résultat...

    Je désespère!

    Merci!

    Louise

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Le contenu du champ typAlto est-il toujours écrit en majuscule.
    Pourquoi ne pas avoir utilisé un champ de type Oui/Non plutot qu'un champ texte pour le champ Agglo(1er Message) ou Alto(2eme Message) ?

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Jeannot45 , Tilous bonjour

    Dans le cas d'un champ OUI/NON comme le rappelle justement Jeannot, il serait judicieux d'utiliser un champ booleen?

    Mais cela ne donne pas de réponse à ton problème :

    Tu peux récupérer le contenu de ta requête en plaçant un debug.print ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rs = CurrentDb.OpenRecordset("SELECT tbl_atomisation.DateCreation, tbl_atomisation.Agglo, tbl_atomisation.Rendement FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# and Agglo = '" & typAlto & "'")
    debug.print "SELECT tbl_atomisation.DateCreation, tbl_atomisation.Agglo, tbl_atomisation.Rendement FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# and Agglo = '" & typAlto & "'"
    Ensuite il te suffit de récupérer cette chaîne dans la fenêtre d’exécution de ton éditeur VBA et de faire un copier-coller dans le qbe (assistant requête -> mode SQL). En exécutant cette requête tu devrais avoir ta solution.

    Regarde ce tuto : http://cafeine.developpez.com/access...el/debugprint/

    JimBolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Merci pour le retour
    Bonjour à vous deux!

    Merci pour l'aide.

    Pour le champs oui/non, il était comme cela avant et j'utilisais une champs OUI/NON dans la table, mais la perssonne, elle voulait un champs texte...

    J'ai donc modifié, mais cela cause souci...

    Je vais regarder vos astuces et vous reviens!

    Merci beaucoup,

    Louise

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Tilous,

    pas de soucis...

    je suis connecté sur le chat si tu veux m'y retrouver...

    jim
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Ok j'ai remis les champs oui non, mais je lui affiche oui ou non au lieu d'une case à cocher!
    Bonjour,

    J'ai corrigé mon problème en gardant les champs oui/non... je me suis apperçu que la personne avait joué dans les tables! grrr tout fonctionne très bien maintenant.

    Merci de votre aide, celà m'a permis d'y voir plus clair!

    J'aurais une autre demande, est-ce que je peux la poster ici? Je me lance tout de même...

    Dans ce fameux formulaire, je réalise des moyennes selon des dates précises indiquée via des champs de formulaire date début et fin pour 2 périodes. Le résultat des moyennes sont affichés dans deux étiquettes, une pour la période 1 et l'autre pour la période 2.

    J'aimerais lister la liste des codes des périodes visées en dessous.

    Exemple, je clique sur période 1 cela m'affiche les code en dessous.

    Selon vous, quel serait la meilleur méthode pour le faire?

    Je me demande si je mets un contrôle Onglet qui se remplirait, lorsque je clique sur l'onglet selon la période, ... si ça pourrais fonctionner?

    Merci de votre aide!

    Louise

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Tilous,

    je pense qu'il existe à vrai dire une multitude de façons d'y arriver !

    Idéalement une requête généré par code et affichable dans un sous formulaire, il te suffirait de sélectionner tes dates et indiquer sur quelle période tu veux agir (suivant la période choisie tu modifies le recordsource de ton sous formulaire). Cela évite de cliquer en plus sur un onglet.

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Avec cette astuce est-ce que je pourrai faire des caccul de différence entre les deux période?
    Merci pour le retour jimbolion!

    En faite, j'avais penser aux Onglets, car je trouve celà plus beau qu'un sous formulaire!

    Est-ce que je pourrai faire des calculs de différence entre les deux périodes?

    Je ne sais pas comment trop m'en sortir disons...

    J'ai pensée remplir un tableau en vba provenant du recordset puis d'afficher les résultats, ce qui me permettrait, je crois, la possibilité d'effectuer mes calculs à la volé...

    Par contre, je ne sais pas trop comment le coder et comment les afficher dans le formulaire tout en étant dynamique selon les périodes... grrr

    Merci beaucoup pour ta précieuse aide.

    Voici ce que j'ai pour le moment dans un module qui sera activé par un clic sur l'onglet...:

    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
     
    Dim compteur
    Dim tabCode() As Variant
    Dim rs As DAO.Recordset
     
        'Information provenant d'une variable globale
        If Recherche = 2 Then
     
            'J'ouvre un recordset pour n'avoir que les données Agglo
            Set rs = CurrentDb.OpenRecordset("SELECT tbl_atomisation.Code FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Agglo=True")
        Else
            'Je vais chercher les données pour Atomisation
            Set rs = CurrentDb.OpenRecordset("SELECT tbl_atomisation.Code FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Agglo=False")
        End If
        'Ici je voulais remplir mon tableau avec les données du recordset???
        'tabCode = rs.GetRows
     
        'Je m'assure de ne pas avoir atteint la fin du recordset
        If rs.RecordCount <> 0 Then
        compteur = 1
            rs.MoveFirst ' Je m'assure d'être sur le premier enregistrement
            Do Until rs.EOF 'Je procède jusqu'à la fin du recorset
                'Dans le debug print les codes s'impriment bien
                Debug.Print rs("Code")
                'Ne fonctionne pas, il n'affiche rien dans l'onglet, j'imagine que dois créer les champs ici...
                Forms!frm_tableau_bord!OngletPeriode1 = rs("Code")
                'J'incrémente mon compteur
                compteur = compteur + 1
                'Je passe à l'autre enregistrement
                rs.MoveNext
            'Je boucle
            Loop
        End If
        rs.Close 'Fermeture du recordset
        Set rs = Nothing 'Nettoyage
    Louise

  10. #10
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Tilous,


    Pour l'onglet si tu trouves çà plus beau, et ben pourquoi pas

    En tout cas le code est propre mais tu as une façon beaucoup plus simple pour résoudre ton problème. Je n'ai malheureusement que peu de temps pour décortiquer le tout mais je donne la piste.

    Debug.Print rs("Code")
    Cette fonction ne permets d'afficher un résultat que dans la fenêtre d’exécution VBA et n'agit aucunement sur les contrôles des formulaires.

    rs.MoveFirst ' Je m'assure d'être sur le premier enregistrement
    Inutile, car l'ouverture d'un objet recordset se place nécessairement au niveau du premier enregistrement.

    Bon maintenant voilà comment moi je procéderai. Si ta requête nécessite des calculs, il faut positionner ces calculs directement dans la requête (à toi de voir comment agir dessus), je ne connais pas les règles.

    Ensuite dans l'onglet désiré tu places un sous formulaire et tu te soucies aucunement de la source de données de celui-ci (tu auras pris soin de le créer dans ta base préalablement : SF_results). Le résultat généré par ton code viendra mettre à jour ce sous formulaire. Regarde ici : http://access.developpez.com/faq/?pa...onnee#SrcsFrom

    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
    Function calcul()
     
    '
    Dim Ssql As String
     
        'Information provenant d'une variable globale
        If Recherche = 2 Then
     
            'J'ouvre un recordset pour n'avoir que les données Agglo
            ' il faudrait passer le résultat de tes calculs ici
            '
            Ssql = "SELECT tbl_atomisation.Code FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Agglo=True"
        Else
            'Je vais chercher les données pour Atomisation
            ' il faudrait passer le résultat de tes calculs ici
            '
            Ssql = "SELECT tbl_atomisation.Code FROM tbl_atomisation WHERE tbl_atomisation.DateCreation Between #" & date_deb_moy & "# And #" & date_fin_moy & "# And Agglo=False"
        End If
        'Ici je voulais remplir mon tableau avec les données du recordset???
        'tabCode = rs.GetRows
        '
        Me.SF_results.Form.RecordSource = Ssql      ' modifie le recordsource ou Forms![monform]![SF_results].Form.RecordSource = Ssql
        Me.SF_results.Requery                       ' actualise la liste ou Forms![monform]![SF_results].requey
        '
        Exit Function
        '
        '
    End Function

    Maintenant si tu n'arrivais pas à effectuer tes calculs directement dans la requête (tu peux ouvrir pour cela un nouveau sujet de discussion), tu pourrais éventuellement boucler sur le recordset (ta première intention) et alimenter une table temporaire (addnew ou insert) pour stocker tes calculs et afficher le contenu de cette table dans le sous formulaire.

    JimboLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Merci merci merci!
    Bonjour jimbolion,

    Un gros merci pour le retour!

    Je regarde cela ce soir et au besoin j'ouvrirai une autre discussion.

    À la prochaine peut être!

    Louise

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

Discussions similaires

  1. Je n'arrive pas avec la formule "DECALER"
    Par Naw81 dans le forum Excel
    Réponses: 1
    Dernier message: 14/04/2015, 14h24
  2. Pb avec les champs numériques d'une table
    Par karinya dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/09/2010, 15h16
  3. Réponses: 3
    Dernier message: 19/08/2009, 18h25
  4. Pbe avec un champ memo d'une table ACCESS
    Par kiki.gaby dans le forum InfoPath
    Réponses: 12
    Dernier message: 06/12/2008, 18h15
  5. [VBA SQL] DLookup j'y arrive pas
    Par dalmasma dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/07/2007, 08h44

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