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 d'execution 3021... Aucun enregistrement...


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Erreur d'execution 3021... Aucun enregistrement...
    Bonsoir,

    Je cherche a savoir comment faire pour que ma formule VBA de exécution d'une requête ACCESS paramétrées, depuis Excel, se rafraichisse tout seule. Pour l'instant l'erreur 3021 s'affiche et je dois choisir la option combobox a la main.

    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
    Sub AlimenterComboPAYS()
     
    Dim cb As ComboBox
    Set cb = ActiveSheet.ComboPays 'on pourrait appeler une autre feuille
     
    'Etape 1:récupération de la liste des pays à partir de BD
      Dim BD As DAO.Database
      Dim RS As DAO.Recordset
      Set BD = OpenDatabase(Range("CheminBD"))  'Overture depuis excel de la BD
      req = "SELECT DISTINCT Pays FROM Factures" 'Generer le code SQL
      Set RS = BD.OpenRecordset(req) 'Exécution de la requête et récupération du résultat dans une RS
      RS.MoveLast: RS.MoveFirst             'Balayage du RS pour compter le nb d'enregistrements
     
    'Etape 2: Alimentation, via une boucle
      cb.Clear
      For I = 1 To RS.RecordCount
          cb.AddItem RS!Pays         'rajouter le pays à la liste de la combobox pour mes 21 pays
          RS.MoveNext
      Next I
     
    End Sub
     
    Sub GénérerVillesComboPAYSP()
    'cette macro sera lance depuis ComboPAYS (quant on ferra une chois combopays)
    'Etape 1:récupération de la liste des villes d'après le pays choisi dans ComboPays
      Dim BD As DAO.Database
      Dim RS As DAO.Recordset
      Dim QDF As DAO.QueryDef
     
      Set BD = OpenDatabase(Range("CheminBD"))               'Overture depuis excel de la BD
      Set QDF = BD.QueryDefs("Req 5")  'Indication de la requête paramétrée utilisée
      NomPays = Range("D4")
     
      QDF.Parameters(0) = NomPays
      Set RS = QDF.OpenRecordset()                          'exécution de QDF et renvoi du résultat dans un RS
      RS.MoveLast: RS.MoveFirst                             'Balayage du RS pour compter le nb d'enregistrements
     
    'Etape 2: Génération d'une variable liste via une boucle du RS
      For I = 1 To RS.RecordCount   '(ici seront 21)
        Liste = Liste & RS!Ville & ","
        RS.MoveNext
      Next I
     
    'Etape 3: Alimenter la zone de validation
      With Range("B6:B16").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=Liste
      End With
     
      Range("D11") = "Liste des Villes raffraîchie le " & Date & " à " & Time
     
    End Sub
    El la requête "Req 5" en ACCESS au cas au

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT Ville, Pays
    FROM Factures
    WHERE Pays=[Quel Pays?]
    J'espère que soit simple de résoudre. Mais pour l'instant je ne trouve rien dans les forums.


    Cordialement,

    Victoria

  2. #2
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello
    pour éviter de me battre avec les paramètres, je préfère générer un texte SQL sans inconnue et ouvrir le recordset avec!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     req = "SELECT DISTINCT Ville, Pays FROM Factures WHERE Pays=" & NomPays & ";"
    Set RS = BD.OpenRecordset(req)
    en espérant avoir aidé

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    L'idéal est d'user d'un QueryDefs avec sa propriété ReturnsRecords d'une part et si il renvoie True d'user d'un RecordSet via un Objet Range qui applique la méthode CopyFromRecordSet d'autre part.

    Pour ce qui est de la clause Where elle sera affectée par un InputBox ou un UserForm ou encore la valeur d'une cellule via un objet Range selon le type de développement que tu as mis en place.

    Argy

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

Discussions similaires

  1. [AC-2003] Erreur 3021 Aucun Enregistrement
    Par aminnio dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/06/2013, 19h16
  2. [AC-2007] erreur d'execution '3021' : aucun enregistrement en cours
    Par gimly90 dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/05/2013, 16h06
  3. Erreur d'execution 3021 : Aucun enregistrement
    Par fisio dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/06/2009, 11h27
  4. [Erreur 3021] aucun enregistrement
    Par osia1 dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/05/2008, 11h40
  5. Erreur " 3021 Aucun enregistrement en cours"
    Par Secco dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/04/2008, 14h46

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