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 code formulaire de recherche


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2007
    Messages : 355
    Points : 119
    Points
    119
    Par défaut problème code formulaire de recherche
    Bonjour à tous,

    J'utilise le tutoriel de loufab pour construire le formulaire de recherche nouvelle version tout ce passait bien jusqu'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intTypChamp = lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs ...
    Erreur de compilation:
    Instructions et étiquettes incorrectes entre select case et le premier case.

    Si quelqu'un peut a une idée?
    Merci

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    bonjour,
    si on pouvait avoir un petit bout de code en plus (fonction entière si possible) ca nous aiderait un peu.
    sinon au moins le lien vers le tuto de loufab
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2007
    Messages : 355
    Points : 119
    Points
    119
    Par défaut
    Excuse pour le code :
    Private Sub cmd_recherche_Click()
    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
    Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
        Dim intTypChamp As Integer
        Dim intOpeChamp As Integer
     
     
        strTable = Me.cbo_table         ' recupère le nom de la table
        strField = Me.cbo_champ         ' recupère le nom du champ
     
        ' compose le critere de recherche
     
    Select Case Me.opt_Recherche
     
    intTypChamp = lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs ...
    intOpeChamp = Me.opt_Recherche
     
    Select Case intTypChamp
     
           Case dbBoolean                       ' bool
                If intOpeChamp = 1 Then          ' oui
                   strCriteria = strTable & "." & strField & "=-1"
                ElseIf intOpeChamp = 2 Then      ' non
                   strCriteria = strTable & "." & strField & "=0"
                Else
                   strCriteria = strTable & "." & strField & "=Null"
                End If
     
           Case dbByte To dbBinary, dbLongBinary, dbBigInt To dbVarBinary, dbNumeric To dbTimeStamp
           ' traite les numeriques
                strCriteria = Me.txt_critere
                ' traite la virgule si elle existe
                If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Replace(Me.txt_critere, ",", ".", 1)
                ' pour les versions antérieure à la 2000
                'If InStr(1, Me.txt_critere, ",") > 0 Then _
                ' strCriteria = Left(Me.txt_critere, InStr(1, Me.txt_critere, ",") - 1) _
                ' & "." & Right(Me.txt_critere, InStr(1, Me.txt_critere, ","))
     
                If intTypChamp = dbDate And IsDate(Me.txt_critere) Then strCriteria = "#" _
                   & Me.txt_critere & "#"                  ' type champ = date
                ' rajoute les dièses
     
                If Not IsNull(Me.txt_critere) Then
                   Select Case intOpeChamp                    ' numerique, date
                       Case 1 ' =
                            strCriteria = strTable & "." & strField & "=" & strCriteria
     
                       Case 2 ' >=
                            strCriteria = strTable & "." & strField & ">=" & strCriteria
     
                       Case 3 ' <=
                            strCriteria = strTable & "." & strField & "<=" & strCriteria
     
                       Case 4 '<>
                            strCriteria = strTable & "." & strField & "<>" & strCriteria
                   End Select
                End If
     
     
           Case dbText, dbMemo, dbChar                      ' texte
                Select Case intOpeChamp
     
                       Case 5 ' ne contient pas
                           strCriteria = "NOT (" & strTable & "." & strField & " Like ""*" & strCriteria & "*"")"
               End Select
     
     Case Else
                MsgBox "Cas non prévu."
                Exit Sub
       End Select
     
        ' construit la requête sql
        If Me.Opt_RechCourante And Not Len(Me.lst_resultat.RowSource) = 0 Then
       If Not Me.lst_resultat.RowSource Like "*FROM " & strTable & "*" Then
          MsgBox "La recherche précédente ne porte pas sur la même table que la recherche actuelle.", _
                 vbExclamation + vbOKOnly, "Erreur"
          Exit Sub
       End If
       strSql = Left(Me.lst_resultat.RowSource, Len(Me.lst_resultat.RowSource) - 3)
       strSql = strSql & " AND " & strCriteria & "));"
    Else
       ' construit la rq sql
       strSql = "SELECT DISTINCTROW " & strTable & ".*"
       strSql = strSql + " FROM " & strTable
       strSql = strSql + " WHERE ((" & strCriteria & "));"
    End If
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
     
    End Sub
    http://loufab.developpez.com/recursivite

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    Tu as bien copié la fonction lf_GetTypeField dans un module ?

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  5. #5
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2007
    Messages : 355
    Points : 119
    Points
    119
    Par défaut
    Bonjour Domi2

    Code du module:
    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
    ThieBEN

  6. #6
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2007
    Messages : 355
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par Domi2 Voir le message
    Bonjour,

    Tu as bien copié la fonction lf_GetTypeField dans un module ?

    Domi2
    Est ce que le problème viendait d'ici? J'ai refait des tests avec l'aide access il parle de commentaires entre select case et premier case j'ai essayé de retirer des commentaires mais rien n'a changé.
    ThieBEN

  7. #7
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2007
    Messages : 355
    Points : 119
    Points
    119
    Par défaut
    J'ai trouvé ça sur msdn:
    Instructions et étiquettes non valides entre 'Select Case' et la première occurrence de 'Case'

    Une instruction qui n'est pas un commentaire apparaît entre l'instruction ouvrante Select ou Select Case et sa première instruction Case.

    ID d'erreur : BC30058

    Pour corriger cette erreur
    Si l'instruction intermédiaire est un commentaire, faites-la précéder d'un délimiteur de commentaire (' ou REM). Sinon, déplacez ou supprimez l'instruction.

Discussions similaires

  1. [AC-2010] Problème affichage Formulaire de recherche
    Par jbsushi dans le forum Access
    Réponses: 4
    Dernier message: 08/07/2013, 09h05
  2. Problème dans formulaire de recherche
    Par pat17 dans le forum IHM
    Réponses: 9
    Dernier message: 05/12/2011, 15h20
  3. Problème dans formulaire de recherche
    Par pat17 dans le forum IHM
    Réponses: 2
    Dernier message: 30/11/2011, 11h04
  4. [Code] Formulaire de Recherche: Problème de code
    Par Laure041 dans le forum IHM
    Réponses: 9
    Dernier message: 29/04/2008, 17h22
  5. problème de formulaire de recherche
    Par mmanta1 dans le forum IHM
    Réponses: 1
    Dernier message: 18/06/2007, 19h36

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