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

IHM Discussion :

Tuto Formulaire de recherche - Conception difficile


Sujet :

IHM

  1. #1
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut Tuto Formulaire de recherche - Conception difficile
    Bonjour.

    J'aimerais construire un formulaire de recherche dans ma db, tel que proposé dans les tutos, à cette adresse ( tuto de loufab ).

    Je suis pour l'instant arrêté à cette étape.

    J'ai inséré tous les codes demandés, mais plusieurs soucis :


    1. après sélection de la table, la liste des champs ne se met pas à jour.
    2. la procédure "Private Sub cbo_champ_AfterUpdate()" bugge sur "Select Case lf_GetTypeField(strTable, strField) ' pour trouver le type du champs" ( "argument "strTable" byref incompatible )


    Est-ce normal à ce stade ?

    Je joins le form ( moche ^^ ) et le module actuel si ça peut éclaircir ce que j'ai déjà fait.
    =>dbrec.zip

    Merci de votre aide ;-)
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  2. #2
    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
    Damkre bonjour,

    Tu n'as pas déclaré le type des variables ainsi ton code doit être transformé ainsi :

    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 cbo_champ_AfterUpdate()
    On Error GoTo Erreurs
    
    Dim strTable As String, strField As String
    '
    If IsNull(strTable) Or IsNull(strField) Then
       Exit Sub     ' l'un des champs est vide
    End If
    
    ' initialise les étiquettes de l'opérateur
    Me.lbl_Etiq1.Visible = True
    Me.lbl_Etiq2.Visible = True
    Me.lbl_Etiq3.Visible = True
    Me.lbl_Etiq4.Visible = True
    Me.lbl_Etiq5.Visible = True
    Me.opt_Ope1.Visible = True
    Me.opt_Ope2.Visible = True
    Me.opt_Ope3.Visible = True
    Me.opt_Ope4.Visible = True
    Me.opt_Ope5.Visible = True
    Me.txt_critere.Visible = True
    
    
    Select Case lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs
        
        
        Case Is = dbBoolean     ' Booléen
             Me.lbl_TypeChamp.Caption = "Oui/Non"
             Me.lbl_Etiq1.Caption = "Oui"
             Me.lbl_Etiq2.Caption = "Non"
             Me.lbl_Etiq3.Visible = False   ' cache car inusité dans ce cas
             Me.lbl_Etiq4.Visible = False   ' idem
             Me.lbl_Etiq5.Visible = False   ' idem
             Me.opt_Ope3.Visible = False
             Me.opt_Ope4.Visible = False
             Me.opt_Ope5.Visible = False
             Me.txt_critere.Visible = False   ' pas de critere
    
        Case dbByte To dbBinary, dbLongBinary, dbGUID To dbVarBinary, dbNumeric To dbTimeStamp
        ' Numériques / date
             Me.lbl_TypeChamp.Caption = "Numérique"
             Me.lbl_Etiq1.Caption = "Etre égale ="
             Me.lbl_Etiq2.Caption = "Etre supérieure >="
             Me.lbl_Etiq3.Caption = "Etre inférieure <="
             Me.lbl_Etiq4.Caption = "Etre différente <>"
             Me.lbl_Etiq5.Visible = False
             Me.opt_Ope5.Visible = False
                
        Case dbText, dbMemo, dbChar ' texte / mémo
             Me.lbl_TypeChamp.Caption = "Texte"
             Me.lbl_Etiq1.Caption = "Etre strictement identique"
             Me.lbl_Etiq2.Caption = "Commencer par la valeur"
             Me.lbl_Etiq3.Caption = "Contenir la valeur"
             Me.lbl_Etiq4.Caption = "Finir par la valeur"
             Me.lbl_Etiq5.Caption = "Pas contenir la valeur"
                
         Case Else
             Me.lbl_TypeChamp.Caption = "Cas non prévu " & lf_GetTypeField(Me.cbo_table, Me.cbo_champ)
    
    End Select
    
    
    Exit Sub
    
    Erreurs:
    Select Case Err.Number
        Case Else
            MsgBox Err.Description, vbCritical, "GestionMaison"
    End Select
    
    End Sub
    En ce qui concerne l'exploitation de ta base, les tables n'étant pas fournies dans l'exemple, le message suivant <Elément non trouvé dans cette collection> s'affiche lors de la sélection du champ dans la deuxième zone de liste déroulante. Intègres donc ces tables et réitères tes essais

    De plus les valeurs strTable et strField ne sont jamais transmises dans l'appel de la fonction lf_GetTypeField (elles doivent êtres récupérés du forms je suppose) de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    On Error GoTo Erreurs
     
    Dim strTable As String, strField As String
    '
    strTable = Nz(Me.cbo_table, "")
    strField = Nz(Me.cbo_champ, "")
    '
    If strTable = "" Or strField = "" Then
       Exit Sub     ' l'un des champs est vide
    End If

    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

  3. #3
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Bonjour/Bonsoir Jimbolion,

    Content de te retrouver ;-)

    J'ai effectué les petites corrections, je pense.

    Cependant, le message "Élément non trouvé dans cette collection" s'affiche lors de la sélection du champ dans la deuxième zone de liste déroulante... malgré le fait que mes tables s'y trouvent...

    Serait-ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub cbo_table_AfterUpdate()
    On Error GoTo Erreurs
     
    Me.cbo_champ.RowSource = "[" & Me.cbo_table.Value & "]"
    Me.cbo_champ.Requery
     
    Exit Sub
    qui poserait problème ?

    En effet, la liste "cbo_champ" ne reçoit pas (encore?) la liste des champs de la table sélectionnée...

    Voici une db corrigée avec certaines tables pour tester :dbrech_2.zip

    Merci de ton aide... et de toute autre aide qui serait disponible ;-)
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  4. #4
    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


    Deux petites modifications à ta procédure :

    1. il faut préciser le type de données affichées dans ta liste (ici Liste de Champs)
    2. au niveau du nom de ta table, il n'y a pas besoin des crochets

    Ci-dessous les corrections

    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
    Private Sub cbo_table_AfterUpdate()
    On Error GoTo Erreurs
    
    Me.cbo_champ.RowSourceType = "Field List"
    'Me.cbo_champ.RowSource = "[" & Me.cbo_table.Value & "]"
    Me.cbo_champ.RowSource = Me.cbo_table
    Me.cbo_champ.Requery
    
    Exit Sub
    
    Erreurs:
    Select Case err.Number
        Case Else
            MsgBox err.Description, vbCritical, "GestionMaison"
    End Select
    
    End Sub
    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

  5. #5
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Bonjour !

    Cela avance, petit à petit...
    Avec les corrections, la liste des champs se met correctement ( ouf ! ).
    ( je pensais avoir bien suivi le tuto, pourtant :p )

    Par contre, après avoir sélectionné le champ, Access me signale une erreur toujours ( "Élément non trouvé dans cette collection" ).
    L'erreur serait située sur Set tbl = dbs.TableDefs(lfNameTbl) dans la procédure suivante :
    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
    Function lf_GetTypeField(lfNameTbl As String, lfNameFld As String)
    ' Renvoie le numéro du type du champ
    'lfNameTbl = nom de la table
    'lfNameFld = nom du champ
    
        Dim dbs As Database             ' Objet de la base
        Dim tbl As TableDef             ' Objet de définition de table
    
        Set dbs = CurrentDb             ' ouvre la base courante
        Set tbl = dbs.TableDefs(lfNameTbl)  ' ouvre la définition table
    
        lf_GetTypeField = tbl.Fields(lfNameFld).Type  ' renvoie le type de champ
        
        Set tbl = Nothing               ' libération des objets
        Set dbs = Nothing
        
    End Function
    J'ai ( encore ) loupé quelque chose ?
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  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
    DamKre re,

    J'ai repris l'application originale et me suis aperçu de quelques petites erreurs :

    1. Après avoir apporté la modification suggérée par Jeannot 45

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.cbo_champ.RowSource = Me.cbo_table.Value
    Me.cbo_champ.Requery
    tu as dû omettre la propriété concernant la listbox cbo_champ avec origine source Liste des Champs

    Nom : Capture.JPG
Affichages : 270
Taille : 108,8 Ko

    2. Ensuite il est nécessaire qu'une table soit enregistrée dans ta base afin d'effectuer des recherches : J'ai positionné une table T_DVD afin que tu puisses faire tes essais et continuer. L'exemple ici :

    dbrev2c.zip

    Bonne continuation à toi,

    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
    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


    Par contre, après avoir sélectionné le champ, Access me signale une erreur toujours ( "Élément non trouvé dans cette collection" ).
    Il faudrait que tes variables soient initialisées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub cbo_champ_AfterUpdate()
    On Error GoTo Erreurs
    
    Dim strTable As String, strField As String
    
    strTable = Me.cbo_table
    strField = Me.cbo_champ
    
    If IsNull(strTable) Or IsNull(strField) Then
       Exit Sub     ' l'un des champs est vide
    End If
    ...
    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

  8. #8
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Merci ;-)
    J'ai vraiment loupé bcp de petites choses dans ce tuto, il ms semble...

    Je continue avant de mettre résolu, on ne sait jamais...
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  9. #9
    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
    DamKre,

    oui et cela est normal. C'est ce qu'on appelle l'apprentissage

    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

  10. #10
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Comme quoi... ;-)

    Tout le code a l'air de fonctionner correctement.

    Par contre, plusieurs interrogations subsistent :

    Tour d'abord, j'ai ( je crois ^^ ) suivi les consignes pour créer les éléments du formulaire.
    Mais l'objet "lst_resultat" ne s'auto-adapte pas en ce qui concerne la taille des colonnes selon le résultat.
    Est-ce normal ?
    Comment prévoir alors la taille des colonnes de cette liste ? ( l'ai-je encore loupé dans le tuto ? )

    Merci de vos regards attentifs.
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  11. #11
    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
    DamKre,

    Euh

    Là va falloir que je creuse un peu le code de notre ami Loufab !

    Je vais tâcher de jeter un œil rapidement là dessus

    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

  12. #12
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonsoir a tous

    je suis justement avec le même tutos que DamKre, pour me créer une recherche multicritèques sur 8 tables mais je crois comme DamKre avoir bien suivi le tutos de Loufab et je n'y arrive pas, je vous joints mon essai pour vous en rendre compte
    Pièce jointe 155358

    mais j’avais déjà ouvert un post a ce sujet que j’ai mis en résolu le temps d’essayer de mon côté a trouvé la solution

    http://www.developpez.net/forums/d14...-soit-8-tables


    Pascal

  13. #13
    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


    @ Grisan29
    Trois remarques par rapport à ta base :
    1. il manque la requête source à ton formulaire :quoi:
    2. au niveau du code, ça ne peut pas fonctionner puisque tu inclus un fonction à l'intérieur d'une autre fonction. Il faut revoir ton code
    3. il est fait mention d'une table : tbl_TempLstTbl (le code fait mention qu'il ne trouve pas celle-ci et il est indiqué dans le paragraphe X Intégration du premier tuto de loufab, qu'il faut importer celle-ci ou créer celle-ci. Voir le paragraphe IX-A. Les objets nécessaires)

    Enfin une fois ceci corrigé :
    1. tu pourras modifier le code de la liste déroulante : cbo_Table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cbo_Table_AfterUpdate()
        Me.cbo_champ.RowSourceType = "Field List"
        Me.cbo_champ.RowSource = Me.cbo_Table
        Me.cbo_champ.Requery
    End Sub
    2. il te faudra également modifier le nom de ta zone de texte Critère du formulaire de Txt critère en txt_critere (comme utilisé dans ton code)
    3. il te faudra renommer la case option de ton formulaire optRechCourante en optRecherche (comme utilisé dans ton code)
    4. il te faudra enfin modifier le passage de paramètres de ta fonction lf_GetTypeField : Function lf_GetTypeField(ByVal lfNameTbl As String, ByVal lfNameFld As String)

    Voila pour commencer

    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

  14. #14
    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
    DamKre,

    Effectivement et comme je le craignais deux remarques :

    1. la structure de ta table tbl_TempLstTbl doit correspondre à celle du tuto,
    2. Rien n'est mentionné sur les largeurs de colonnes (je pense que d'après l'idée de Loufab, chacun adaptera la largeur des colonnes dans les propriétés conformément aux champs souhaités...),


    il ne serait pas étonnant que Fabrice se rapproche d'ici peu de nous pour nous faire part de ses remarques

    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

  15. #15
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Re,

    Merci du regard attentif...

    Apparemment, la table est bien construite chez moi à présent et tout semble OK... sauf la largeur des colonne dans ce tuto.

    A tout hasard, je remets les objets à créer, qu'on peut utiliser dans n'importe quelle db, si j'ai bien compris... ( ce qui m'arrange bien ;-) ) : dbrech3.zip
    Je pense avoir bien compris ta remarque sur la table ?

    J'attends alors le regard de loufab, peut-être ?
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  16. #16
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonjour Jeannot45, jimbolion,damkre et le forum

    Jeannot45 pour le tutos de Loufab a la "section II.C La requête par le QBE"
    il dit ceci
    Dans le cas d'une application fonctionnant avec un runtime, il est impossible de construire une requête à l'aide du QBE, de même qu'un utilisateur lambda n'a pas souvent la capacité ou l'envie de l'utiliser.
    Ce tutoriel va décrire une solution de substitution totalement générique comme à mon habitude.
    donc il décrit bien son tutos a l'aide
    une solution de substitution
    a la requête
    bon je vais essayer de le refaire pour la énième fois mais en suivant bien le tutos, ce sera encore sans requête donc pas encore bon

    Pascal

  17. #17
    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
    Cher tous,

    Le principe d'un tutoriel consiste à acquérir un principe de fonctionnement, une sorte de guide face à une problématique quelconque. Il ne correspond pas nécessairement à la finalité souhaitée par chacun mais pose les bases de la résolution d'un problème.

    A ce titre, celui de Loufab permet de comprendre comment sans passer par le QBE (outil non disponible par un utilisateur disposant d'un runtime) ou face à un utilisateur lambda comment on peut permettre à celui-ci d'extraire des données dans son système d'informations. De ce point de vue, l'article proposé est excellent. Dans la mise en forme, on peux lui reprocher certaines choses (je ne l'ai pas lu intégralement mais suffisamment pour avoir un œil critique) mais en tout cas il répond parfaitement à l'énoncé du problème et je le trouve plutôt bien fait.

    Donc en ce qui concerne l'affichage, il est possible de modifier les propriétés des colonnes (technique palliative) afin d'afficher les résultats. D'autres solutions restent envisageable à savoir récupérer les propriétés liés à chaque champ de chaque entité afin de définir par code la largeur de chaque colonne de la zone de liste ou créer un sous formulaire en format feuille de données dont la source serait le résultat de la requête filtrée.

    D'autre part l'exemple de Loufab ne met pas en évidence la problématique des relations (clés secondaires) et leurs implications dans d'autres tables mais je pense que l'idée première de celui-ci était d'offrir au lecteur un article abordable par tout le monde et donc orienté débutant.

    Je vous laisse donc adapter le tuto en fonction de mes remarques, et n'hésitez pas si vous avez besoin d'un coup de main...

    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

  18. #18
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonjour a tous

    moi j'arrête la car je ne peux pas faire mieux que le fichier que j'ai joint(2 depuis hier soir) même en y ayant changer les noms comme l'a dit Jeannot45, exactement comme l'autre post
    je ne sais pas ou est la 2ème partie du tutos de Loufab pour voir s'il a donné des modifs pour le 1er

    Pascal
    bon je joints une dernière version pour voir si cela me permet de le continuer où pas car la cbo_champs n'affiche rien
    Pièce jointe 155541

    jimbolion même dans le fichier que tu a joint http://www.developpez.net/forums/d14...e/#post7947422 la cbo_champs ne développe rien
    est ce du a mes références qui serait manquantes?

    Pièce jointe 155542
    Pascal

  19. #19
    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


    A propos de la nouvelle version que tu as postée :
    1. j'ai décelé une erreur sur le type de donnée du champ "nom" de la table tbl_tempLstTbl. Celui-ci doit être de type texte et nom de type NumAuto
    2. il y a toujours la même erreur au niveau de la procédure Après_MAJ de la liste cbo_Table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cbo_table_AfterUpdate()
        Me.cbo_champ.RowSourceType = "Field List"
        Me.cbo_champ.RowSource = Me.cbo_Table
        Me.cbo_champ.Requery
    End Sub
    Il te faut ajouter le type de la source de ta liste déroulante (Liste de champs) et modifier la RowSource de ta liste déroulante comme je te l'avais déjà indiqué le 04/09.
    3. Le nom du champ critère est toujours différent dans le formulaire(txt critère) et dans le code (txt_critere)
    4. A propos de l'option de recherche. Dans ton formulaire, pour ton option "Effectuer dans la recherche courante", tu as utilisé un groupe d'option. Dans le code, l'élément à tester n'est donc pas opt_RechCourante mais Cadre17. Il te serait plus simple de supprimer ce groupe d'options et de créer un autre contrôle indépendant de type bouton radio qui pourrait prendre la valeur 0 (faux) ou -1 (Vrai). Il te faudra ajouter également une ligne sur la procédure Form_Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Open(Cancel As Integer)
    Me.Opt_RechCourante = 0
    ' crée la liste des tables
    If lf_GetTableList() = 0 Then
       MsgBox "Pas de tables dans cette application .", vbInformation + vbOKOnly, "Erreur"
       Cancel = True
    End If
    
    End Sub
    Je te joins ta base modifiée.
    Fichiers attachés Fichiers attachés
    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

  20. #20
    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
    Damkre,

    J'ai donc comme promis revu la partie zone de texte pour afficher en fonction de la propriété des champs l'ajustement des colonnes.

    J'ai donc branché une fonction permettant de récupérer la propriété des champs de la table concerné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
    Function Recupere_Champ(matable)
    Dim DB As DAO.Database
    Dim tb As TableDef
    Set DB = CurrentDb
    Dim lng_chaine As String
    lng_chaine = ""
    '
    Set tb = DB.TableDefs(matable)
     'spécifie le nombre de colonnes en fonction des champs retournés
     Me.lst_resultat.ColumnCount = tb.Fields.Count
     '
     For Each chp In tb.Fields
            'Debug.Print chp.Name, chp.Type, chp.Size
            Select Case chp.Type
            Case 1, 2 ' booleen + byte
                lng_chaine = lng_chaine & "567;"
            Case 4, 6 ' entier long + reel simple
                lng_chaine = lng_chaine & "1134;"
            Case 10 ' texte court
                lng_chaine = lng_chaine & Trim(chp.Size * 0.02 * 567) & ";"
            Case 12 ' texte long = memo
                lng_chaine = lng_chaine & "2835;"
            Case 5 ' monnaie
                lng_chaine = lng_chaine & "1417;"
            Case 8, 7 ' Date + reeldouble
                lng_chaine = lng_chaine & "1134;"
            Case Else ' le reste à 0
                lng_chaine = lng_chaine & "0;"
            End Select
     
     Next chp
     '
     ' applique le calcul de colonne
     Me.lst_resultat.ColumnWidths = lng_chaine
    DB.Close
    Set tb = Nothing
    Set DB = Nothing
    End Function
    Cette fonction reçoit donc en argument le nom de la table, et est appelée sur le bouton <recherche>

    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
    Private Sub cmd_recherche_Click()
    On Error GoTo Erreurs
    
    
        Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
    
        strTable = "[" & Me.cbo_table & "]"         ' recupère le nom de la table
        strField = "[" & Me.cbo_champ & "]"         ' recupère le nom du champ
    
    
               Select Case Me.opt_Recherche
                      Case 1 ' strictement egal
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
                      Case 2 ' commence par
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & "*"""
                      Case 3 ' contient
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"""
                      Case 4 ' fini par
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & """"
                      Case 5 ' ne contient pas
                           strCriteria = "NOT (" & strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"")"
               End Select
    
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE ((" & strCriteria & "));"
        '
        ' Ajustement du nombre de colonnes
        '
        If Nz(Me.cbo_table, "") > "" Then
            Recupere_Champ (Me.cbo_table)
        End If
        '
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
        '
    Exit Sub
    
    Erreurs:
    Select Case err.Number
        Case Else
            MsgBox err.Description, vbCritical, "GestionMaison"
    End Select
    Je te joins le source afin que tu puisses visualiser le rendu... dbrec.zip

    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

Discussions similaires

  1. Conception formulaire de recherche
    Par varik dans le forum IHM
    Réponses: 1
    Dernier message: 27/04/2012, 20h41
  2. [MySQL] Formulaire de recherche PHP + un script d recherche en HTML
    Par Dsphinx dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/11/2005, 19h44
  3. alléger un formulaire de recherche
    Par jarod71 dans le forum Langage
    Réponses: 4
    Dernier message: 28/10/2005, 11h11
  4. Réponses: 3
    Dernier message: 20/10/2005, 12h42
  5. Réponses: 5
    Dernier message: 18/10/2005, 14h09

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