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 :

Erreur de syntaxe ou bien.. ?


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut Erreur de syntaxe ou bien.. ?
    Bonjour à tous,

    Débutant, je viens de suivre pas à pas ce tuto d'Argyronet.

    Néanmoins, j'ai adapté ses explications aux tables de ma base. Par conséquent, les noms sont différents.

    Si dans le premier contrôle (CmbCodePos), les codes postaux apparaissent bien (et dans l'ordre qui plus est), le contrôle CmbVille reste vide.

    Voici le code que j'ai tapé (ou plutôt copié et modifié)
    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
    Private Sub CmbCodePos_AfterUpdate()
    Dim lngCodepostal   As Long
    Dim SQL             As String
      '' Vérifie que l'on a cliqué sur un code postal pour éviter le NULL
      If Not IsNumeric(Me!CmbCodePos) Then Exit Sub
      '' Affecte la valeur de Codepostal à la variable lngCodepostal
      lngCodepostal = Me!CmbCodePos
      '' Construit la chaîne SQL avec le code postal concerné
      SQL = "SELECT Insee, Commune, Codepos FROM TabVille WHERE Codepos =" & lngCodepostal & " ORDER BY Commune"
      '' Affecte la chaîne SQL à la liste des communes
      CmbVille.RowSource = SQL
      '' Déverrouille la liste des communes
      CmbVille.Enabled = True
      '' Donne le focus la liste des communes
      CmbVille.SetFocus
      '' Déroule la liste des commune
      CmbVille.Dropdown
     
    End Sub
    Aurais-je commis une erreur de syntaxe quelque part ?

    A l'origine, le champ Codepostal (Tab_Codes_postaux) ou Codepos (Tab_Ville) était au format "TEXT" dans les deux tables. Mais ne comprenant pas bien l'instruction "IsNumeric", je les ai remis au format "NUMERIC" Entier long. Ça n'a rien changé.

    S'il n'y a pas d'erreur dans la syntaxe, cela vient peut-être des paramètres des contrôles. Pourtant, je pense avoir suivi les consignes. Peut-être faut-il que je mette une capture d'écran des paramètres ?

    Merci de votre aide

  2. #2
    Membre régulier Avatar de zoopsys
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    Bonjour Coucou17,

    Exécutes ton code pas à pas.
    avec la fenêtre d’exécution (dans le menu affichage) récupère la valeur de ta variable sql (?SQL puis entrée)
    Créer une requête Access et copie le code sql puis exécute ta requête.
    Tu verras si elle te remonte des enregistrements.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Salut Zoopsys,

    Merci pour ta diligence.
    Citation Envoyé par zoopsys Voir le message
    ...Exécutes ton code pas à pas.
    Euhhhh, je suis débutant. Je ne sais pas faire. Si j'ai bien trouvé Pas à pas détaillé dans la fenêtre VBA, F8 provoque un bip mais rien ne se passe.

    Citation Envoyé par zoopsys Voir le message
    ...
    avec la fenêtre d’exécution (dans le menu affichage)...
    C'est la seule chose que j"ai trouvée

    Citation Envoyé par zoopsys Voir le message
    ...
    récupère la valeur de ta variable sql (?SQL puis entrée)
    Créer une requête Access et copie le code sql puis exécute ta requête.
    Tu verras si elle te remonte des enregistrements.
    Désolé, je ne comprends pas ce que je dois faire ni comment. Et comme F8 ne déclenche rien, je n'ai pas dû faire ce qu'il fallait...

  4. #4
    Membre régulier Avatar de zoopsys
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    oups désolé,

    il faut d'abord que tu mettes un point d'arrêt sur ton code, par exemple sur la première ligne Private Sub CmbCodePos_AfterUpdate() :
    tu sélectionnes cette ligne puis F9.

    Retourne sur ton formulaire, une fois que la procédure CmbCodePos_AfterUpdate sera appelée, l’exécution du code va s’arrêter sur la ligne Private Sub CmbCodePos_AfterUpdate().

    Maintenant tu peux appuyer sur F8 pour exécuter ton code ligne par ligne.

    une fois que tu seras arrivé à la ligne "CmbVille.RowSource = SQL"
    tapes dans la fenêtre d’exécution ?SQL puis entrée.

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 073
    Points : 24 695
    Points
    24 695
    Par défaut
    Bonjour,
    Mets cette instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msgbox  Me!CmbCodePos
    avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(Me!CmbCodePos) Then Exit Sub
    Si c'est bien le code qui s'affiche alors vérifie que la requête rammene bien les informations que tu attends avec le QBE, tu l'y retranscris à l'indentique.

    Selectionnes Isnumeric puis fais F1, c'est le premier reflexe que tu dois avoir quand tu ne comprends pas. L'aide est efficace à partir de la version 2000.

    Cordialement,

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Bonjour Loufab et merci de ton aide

    Voilà ce que ça donne chez moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CmbCodePos_AfterUpdate()
    Dim lngCodepostal   As Long
    Dim SQL             As String
    MsgBox Me!CmbCodePos
      '' Vérifie que l'on a cliqué sur un code postal pour éviter le NULL
      If Not IsNumeric(Me!CmbCodePos) Then Exit Sub
    Et voilà le résultat à la sélection du premier code postal : 1000


    Uploaded with ImageShack.us


    Citation Envoyé par loufab Voir le message

    Si c'est bien le code qui s'affiche alors vérifie que la requête rammene bien les informations que tu attends avec le QBE,
    QBE ?????

    Citation Envoyé par loufab Voir le message
    tu l'y retranscris à l'indentique.
    Où ?

    Citation Envoyé par loufab Voir le message
    Selectionnes Isnumeric puis fais F1, c'est le premier reflexe que tu dois avoir quand tu ne comprends pas. L'aide est efficace à partir de la version 2000.
    Ca c'est bon. J'ai compris maintenant même si les explications sont en général très très techniques.

    Pour Zoopsys, pas encore eu le temps d'essayer ta procédure mais je reviens dès que c'est fait.

    Merci de votre aide

  7. #7
    Membre régulier Avatar de zoopsys
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    QBE : Query By Example, en fait c'est le mode graphique pour créer une requête.

    et la valeur 1000 est bien présente dans la colonne Codepos de ta table TabVille ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Cela ne résoud pas ton problème, mais est une aparté importante.

    Le code postal doit être une donnée de type texte et non numérique.

    Le code postal 1000 ne veut rien dire en France, il faut le code postal 01000.

    De plus si tu es amené à gérer des adresses étrangères (anglaises par exemple, il y a des lettres dans le code postal).

    Le test doit se faire sur IsNull ou absence de valeur ("") et non sur IsNumeric pour savoir si un code postal est sélectionné

    Philippe

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous,


    Et comment que cette aparté est importante !!!!!!
    Comme dit dans le 1er post, j'avais à l'origine géré les CP en TEXT. Mais suivant la procédure du tuto qui lui gérait des "NUMERIC" j'avais bien inventé un test IsText mais comme il n'existe pas, j'avais un message d'erreur.
    C'est pourquoi j'avais changé le TEXT en NUMERIC.

    Maintenant que je connais le test IsNull, je vais devoir reconfigurer mes tables en TEXT.

    Seulement voilà, je me trouve confronté à un nouveau problème alors.

    Compte tenu de ce volume de données (38950 communes et 6272 CP), comment remettre (de façon automatique bien sûr) le zéro non significatif devant les CP qui ne comportent que 4 chiffres (et non ceux qui ont déjà 5 chiffres), et ce, dans les deux tables ? Il faut bien sûr que ce soit les tables qui contiennent ces infos car je ne suis pas passé par un formulaire pour créer ces enregistrements (copier-coller par ajout depuis Excel).

    Merci de votre aide

  10. #10
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 116
    Points : 5 242
    Points
    5 242
    Par défaut
    Bonsoir,

    Citation Envoyé par Coucou17 Voir le message
    Compte tenu de ce volume de données (38950 communes et 6272 CP), comment remettre (de façon automatique bien sûr) le zéro non significatif devant les CP qui ne comportent que 4 chiffres (et non ceux qui ont déjà 5 chiffres), et ce, dans les deux tables ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set codetexte=format(codenum,'00000')

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Bonsoir Nico84,
    Citation Envoyé par nico84 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set codetexte=format(codenum,'00000')
    Toujours aussi débutant mais un peu moins de jour en jour, j'ai un petit soucis avec ton instruction.
    J'ai cherché dans l'aide à comprendre les mots et je peux juste faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update Tab_Codes_postaux set codetexte=format(codenum,'00000')
    Par contre je ne comprends pas codetexte et codenum. Donc je ne peux pas la compléter. Où doit-on préciser le champ à modifier ? Et pourquoi on n'utilise pas WHERE ?

    Dernière chose, je ne sais pas que faire de cette instruction car je ne sais pas où la copier et comment l'exécuter.

  12. #12
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 116
    Points : 5 242
    Points
    5 242
    Par défaut
    Il n'y a pas de where car on modifie toute la table

    codetexte et codenum sont à remplacer par les noms de tes champs : celui qui contient le code dans une variable texte et celui qui contient le code dans une variable numérique

    Pour l'endroit, le plus simple est de saisir cette requête dans la liste des requêtes et de l'exécuter une fois pour toutes.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Bonsoir,
    Citation Envoyé par nico84 Voir le message
    codetexte et codenum sont à remplacer par les noms de tes champs : celui qui contient le code dans une variable texte et celui qui contient le code dans une variable numérique
    Si je comprends bien, ça devrait donner ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update Tab_Codes_postaux set Codepostal=format(Codepostal,'00000')
    Citation Envoyé par nico84 Voir le message
    ...le plus simple est de saisir cette requête dans la liste des requêtes...
    ???
    Et plus clairement où faut-il copier cette instruction ?

    Citation Envoyé par nico84 Voir le message
    ...et de l'exécuter une fois pour toutes.
    ???
    Comment faire ?

    Désolé d'être si lourd mais je réalise qu'il y a de sacrés prérequis qui me manquent...

    Merci encore pour l'aide.

Discussions similaires

  1. [AC-2010] Erreur de syntaxe que j'aimerais bien trouver
    Par toumack dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/03/2011, 19h31
  2. [Directives] Page blanche quand erreur de syntaxe
    Par syl2095 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/02/2006, 16h15
  3. erreur de syntaxe en C++
    Par sergepmessa dans le forum C++
    Réponses: 6
    Dernier message: 11/03/2005, 19h15
  4. PHP SQL =>erreur de syntaxe (operateur absent)
    Par snipes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h09
  5. erreur de syntaxe javascript dans ma page
    Par Oluha dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2005, 15h53

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