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] Syntaxe avec des guillemets


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Par défaut [VBA] Syntaxe avec des guillemets
    Bonjour,

    Je fais appel à une fonction nommée Combien pour compter le nombre d'enregistrements d'une requête. Cette requête fait appel elle-même à une fonction de regroupement.

    J'ai des soucis pour trouver la syntaxe exacte : bien qu'ayant consulté l'aide en ligne, je finis par ne plus savoir où je vais entre les doubles, voire triples guillemets , les Chr$(34), etc.

    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
    Function CouleurRelance()
        Dim NbEnreg As Long
        Dim sSQL As String
        sSQL = "SELECT tbl_UNITES.CUnite_ID, tbl_UNITES.Unite, tbl_AFFECTATIONS.Affectation, tbl_AGENTS.MAJ, tbl_AGENTS.Sortie, [Nom] & " " & PremMajMotsComp([Prenom]) AS Agent, tbl_GRADES.Grade, tbl_DEMANDES.CDemande_ID, tbl_CATEGORIES.Cat, tbl_CATEGORIES.Duree, tbl_DEMANDES.Formation, tbl_DEMANDES.Relance, DateSerial(Year([Formation]),Month([Formation])+[Duree],Day([Formation])) AS Validite " & _
               "FROM tbl_UNITES INNER JOIN (tbl_GRADES INNER JOIN (tbl_CATEGORIES INNER JOIN ((tbl_AFFECTATIONS INNER JOIN tbl_AGENTS ON tbl_AFFECTATIONS.CAffectation_ID = tbl_AGENTS.CAffectation) INNER JOIN tbl_DEMANDES ON tbl_AGENTS.Matricule_ID = tbl_DEMANDES.Matricule) ON tbl_CATEGORIES.CCategorie_ID = tbl_DEMANDES.CCategorie) ON tbl_GRADES.CGrade_ID = tbl_AGENTS.CGrade) ON tbl_UNITES.CUnite_ID = tbl_AFFECTATIONS.CUnite " & _
               "WHERE (((tbl_AGENTS.MaJ) = DMax("[MAJ]", "tbl_AGENTS")) And ((tbl_AGENTS.Sortie) > Date) And ((tbl_CATEGORIES.Duree) > 0) And ((tbl_DEMANDES.Formation) Is Not Null) And ((tbl_DEMANDES.Relance) Is Null) And ((DateSerial(Year([Formation]), Month([Formation]) + [Duree], Day([Formation]))) < Date)) " & _
               "ORDER BY tbl_UNITES.Unite;"
     
        NbEnreg = Combien("SELECT Count(*) FROM " & sSQL & ";")
     
        If ECF("frm_A_propos") = True Then
            If NbEnreg > 0 Then
                Forms![frm_A_propos]!recRelance.BackColor = 255
            Else
                Forms![frm_A_propos]!recRelance.BackColor = 32768
            End If
        End If
    End Function
     
    Function Combien(strSQL As String) As Long
        Dim oDb As DAO.Database
        Dim oRst As DAO.Recordset
        Set oDb = CurrentDb
        Set oRst = oDb.OpenRecordset(strSQL)
        Combien = oRst.Fields(0).Value
        oRst.Close
        oDb.Close
        Set oRst = Nothing
        Set oDb = Nothing
    End Function
    Je pense que l'erreur est à deux endroits. Tout d'abord ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Nom] & " " & PremMajMotsComp([Prenom])
    puis là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DMax("[MAJ]", "tbl_AGENTS")
    Quelqu'un pour me dépanner ?

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    je n'ai pas tout vérifier mais effectivement il y a au moins ces deux là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DMax(""[MAJ]"", ""tbl_AGENTS"")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Nom] & "" "" & PremMajMotsComp([Prenom])
    comme tu l'avais vu
    mais je te conseil de faire un msgbox ou debug.print de l'expression sSQL avant ainsi tu verras effectivement mieux les erreurs

    ps: ap verif pas vu d'autre...

  3. #3
    Membre Expert Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Par défaut
    Merci de ta réponse Vodiem,

    Effectivement les doubles guillemets tels que tu me les proposes semblent convenir.

    J'ai par contre une erreur d'exécution '3061'
    Trop peu de paramètres. 1 attendu.

    Je pense que l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbEnreg = Combien("SELECT Count(*) FROM " & sSQL & ";")
    est mal interprétée... Peut être l'imbrication de 2 "SELECT" ???

    As-tu une explication ?

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    effectivement dans 'Combien' tu as l'air bien sur de toi.
    si l'imbrication des selects posais pb tu aurais une erreur sur l'exécution du OpenRecordset(strSQL)
    la requete dois fournir au minimum un enregistrement: es ce le cas?
    je te conseil de faire un debug.print sSQL
    mettre un point d'arret
    recopier la valeur du sSQL dans une requete et voir ce que ca donne comme enregistrement.

    remarque que c'est pas impossible comme tu dis que cela vienne de cette synthaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbEnreg = Combien("SELECT Count(*) FROM " & sSQL & ";")
    fait donc plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    critere="SELECT Count(*) FROM " & sSQL & ";"
    NbEnreg = Combien(critere)

  5. #5
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonsoir Gabout,
    Tu utilises une instruction SQL comme source de données utilisée dans ta requête SQL: c'est une sous-requête. Dans le cas où une sous-requête est utilisée dans la source d'une autre requête il faut impérativement (du moins je crois) respecter la syntaxe suivante:
    Code syntaxe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Liste des champ FROM [SELECT Liste des champs FROM Table WHERE Critère ORDER BY Tri]. AS NomAlias;
    La sous-requête est placée entre crochets suivis d'un point puis un nom d'alias. Et il ne faut pas placer un point virgule dans la sous-requête car le point virgule signale la fin de l'instruction!
    si tu as des problèmes à utiliser les double quotes, pourquoi ne pas utiliser un simple quote (même si cela fait un peu américain)?
    Donc, en tenant compte de ces informations, le code dans ton premier post se transforme en ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function CouleurRelance()
        Dim NbEnreg As Long
        Dim sSQL As String
        sSQL = "SELECT tbl_UNITES.CUnite_ID, tbl_UNITES.Unite, tbl_AFFECTATIONS.Affectation, tbl_AGENTS.MAJ, tbl_AGENTS.Sortie, [Nom] & ' ' & PremMajMotsComp([Prenom]) AS Agent, tbl_GRADES.Grade, tbl_DEMANDES.CDemande_ID, tbl_CATEGORIES.Cat, tbl_CATEGORIES.Duree, tbl_DEMANDES.Formation, tbl_DEMANDES.Relance, DateSerial(Year([Formation]),Month([Formation])+[Duree],Day([Formation])) AS Validite " & _
               "FROM tbl_UNITES INNER JOIN (tbl_GRADES INNER JOIN (tbl_CATEGORIES INNER JOIN ((tbl_AFFECTATIONS INNER JOIN tbl_AGENTS ON tbl_AFFECTATIONS.CAffectation_ID = tbl_AGENTS.CAffectation) INNER JOIN tbl_DEMANDES ON tbl_AGENTS.Matricule_ID = tbl_DEMANDES.Matricule) ON tbl_CATEGORIES.CCategorie_ID = tbl_DEMANDES.CCategorie) ON tbl_GRADES.CGrade_ID = tbl_AGENTS.CGrade) ON tbl_UNITES.CUnite_ID = tbl_AFFECTATIONS.CUnite " & _
               "WHERE (((tbl_AGENTS.MaJ) = DMax('[MAJ]', 'tbl_AGENTS')) And ((tbl_AGENTS.Sortie) > Date) And ((tbl_CATEGORIES.Duree) > 0) And ((tbl_DEMANDES.Formation) Is Not Null) And ((tbl_DEMANDES.Relance) Is Null) And ((DateSerial(Year([Formation]), Month([Formation]) + [Duree], Day([Formation]))) < Date)) " & _
               "ORDER BY tbl_UNITES.Unite"
     
        NbEnreg = Combien("SELECT Count(*) FROM [" & sSQL & "]. AS SousReq;")
    Bon courage et @+

  6. #6
    Membre Expert Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Par défaut
    Merci de ta réponse Mahefasoa,

    Mais j'ai une erreur d'exécution '3126'.
    Mise entre crochets non valide du nom [SELECT tbl_UNITES.CUnite_ID, tbl_UNITES.Unite, tbl_AFFECTATIONS.Affectation, tbl_AGENTS.MAJ, tbl_AGENTS.Sortie, [Nom'.


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

Discussions similaires

  1. [CSV] importation CSV avec des guillemets
    Par trash_board dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h08
  2. Problème de syntaxe avec des nombres
    Par baleiney dans le forum Langage
    Réponses: 7
    Dernier message: 09/07/2006, 10h48
  3. [VBA-E]Inserer des guillemets dans un string
    Par repié dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/02/2006, 10h47
  4. Réponses: 9
    Dernier message: 28/10/2005, 11h43
  5. [C#] Prob IndexOf sous Pocket Pc avec des guillemets
    Par freddyboy dans le forum Windows Mobile
    Réponses: 7
    Dernier message: 10/06/2004, 09h57

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