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

Access Discussion :

Erreur execution requete en VBA Script


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut Erreur execution requete en VBA Script
    Bonjour,

    Je souhaiterai avoir une courbe à l'année qui me donne le nombre de colis recu (voir feuille DATA, colonne REF OF)

    Cette courbe doit s'arreter si je n'ai pas de chiffre. Exemple je n'ai rien pour Décembre 2024 mais l'année en cours (2025) là aussi, la courbe ne doit afficher que les colis recus en rapport à la date. : Pour 2025; vu l'exemple, la courbe doit s'arreter au mois d'Avril, puisque aucune saisie.

    De plus, j'aimerai avoir un sélecteur qui me permet de choisir l'année. Sachant que l'année provient de la colonne G de la feuille DATA

    Nom : Courbe.png
Affichages : 110
Taille : 106,3 Ko

    Voilà, j'espère que c'est pas trop compliquer pour m'aider.

    J'ai déja posté un meme sujet mais je le reprends ici car j'etais en full Excel. Sauf que maintenant, je suis sous Access pour la base de données et Excel pour le tableau de bord.

    Voici un fichier que l'on m'a déja proposé mais qui est en total Excel
    TEST_GESTION avx.xlsm

    J'utilise : https://laurent-ott.developpez.com/t...-depuis-excel/

    Pour cela, voici mes tests :


    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
    Sub GetYears()
        Dim sql As String
        Dim rs As Object
     
    '---------------------------------------------------------------------------------------------------------------
    '                                           Ouvre une connexion
    '---------------------------------------------------------------------------------------------------------------
    If ADO.Cnn_Initialise(Cnn1, "I:\070_IND\03_Fabrication\09_Muret\500 - ARCHIVES\BDD_LIEBHERR1_V1.5.accdb") = True Then
     
        ' Initialisation du traitement ADO avec transaction:
        ADO.Cnn_Debut AvecTransaction
    '--------------------------------------------------------------------------------------------------------------
     
        'sql = "SELECT DISTINCT Year(DATE_RECEP) FROM OF_GENERAL ORDER BY Year(DATE_RECEP) DESC"
        sql = "SELECT DISTINCT Year(DATE_RECEP) FROM OF_GENERAL;"
        Set rs = ADO.Execute_SQL(Cnn1, sql)
     
    ' Défilement bidirectionnel + verrou à la modification:
    Set rs = New ADODB.Recordset
     
        Do While Not rs.EOF
            years.Add rs.Fields("Year").value
            rs.MoveNext
        Loop
        rs.Close
     
    End If
     
    ' Fin du traitement (avec gestion des erreurs et de la transaction):
    ADO.Cnn_Fin AvecMessage
    'ADO.Cnn_Fin SansMessage
     
     
    End Sub
    J'ai bien dans ma table OF_GENERAL sous ACCESS un champ DATE_RECEP qui est présent.
    Si j'exécute la requete sous ACCESS, elle fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Year(DATE_RECEP) FROM OF_GENERAL;
    Et le code suivant m'affiche bien dans la feuille (feuil1) les années qui existent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADO.Enr_Affiche cnn:=Cnn1, StrTableSource:="", _
               SQLWhere:="SELECT DISTINCT Year(DATE_RECEP) " _
                   & "FROM OF_GENERAL;", _
                        RngDest:=ws.Range("A2")

    Lorsque je lance le code j'ai une erreur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADO.Execute_SQL(Cnn1, sql)
    OK mais ADO.Execute_SQL(Cnn1, sql) me déclenche sous Excel l'erreur suivante : Erreur de compilation Incompatibilité de type


    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 598
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Dans le tuto il est indiqué :

    "La fonction « Execute_SQL » permet d’exécuter une instruction SQL, pour faire une mise à jour, une création, une suppression, sur un enregistrement ou un jeu d’enregistrements."

    êtes-vous sûr que c'est la bonne fonction ?

    Ici :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Year(DATE_RECEP) FROM OF_GENERAL;

    est une requête sélection.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je viens de l'expliquer dans votre fil du forum Excel.
    Pour importer des données, tables et/ou requêtes, d'access) dans Excel, il n'y a pas besoin de passer par le VBA
    On fait cela avec Power Query intégré dans Excel depuis la version 2016. Cela se fait en quelques clics
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Bon au final, j'ai découpé les étapes car j'ai trop d'erreur.

    Aprés de multiple essai, je n'arrive pas à résoudre l'erreur sur la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ' Parcourez les résultats et ajoutez les années à la collection
            Do While Not rs.EOF
                years.Add rs.Fields("Year").value
                rs.MoveNext
            Loop
            rs.Close
    Ca bloque au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    years.Add rs.Fields("Year").value
    J'ai une erreur dexécution '3265'
    Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.


    Dans Access, j'ai testé la requete et elle fonctionne sans souci...

    Voici le code en son entier :


    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
    Sub GetYears()
        Dim SQL_test As String
        Dim rs As ADODB.Recordset
        Dim years As Collection
        Dim Year As Variant
        Dim message As String
        Dim ws As Worksheet
     
        ' Initialisez les objets nécessaires
        Set years = New Collection
        Set ws = ThisWorkbook.Sheets("Feuil1") ' Assurez-vous que le nom de la feuille est correct
        Set rs = New ADODB.Recordset
     
        ' Ouvre une connexion
        If ADO.Cnn_Initialise(Cnn1, "I:\070_IND\03_Fabrication\09_Muret\500 - ARCHIVES\BDD_LIEBHERR1_V1.5.accdb") = True Then
            ' Initialisation du traitement ADO avec transaction:
            ADO.Cnn_Debut AvecTransaction
     
            ' Défilement bidirectionnel + verrou à la modification:
            Set rs = CreateObject("ADODB.Recordset")
     
            ' Définissez la requête SQL
            'SQLWhere = "SELECT DISTINCT Year(DATE_RECEP) FROM OF_GENERAL;"
            SQLWhere = "SELECT DISTINCT FORMAT(DATE_RECEP, 'yyyy') FROM OF_GENERAL ORDER BY FORMAT(DATE_RECEP, 'yyyy') DESC;"
     
     
            ' Ouverture de la table en lecture seule:
            Set rs = New ADODB.Recordset
     
            ' Exécutez la requête SQL
            On Error GoTo ErrorHandler
            rs.Open SQLWhere, Cnn1, adOpenStatic, adLockReadOnly, adCmdText
            On Error GoTo 0
     
            ' Parcourez les résultats et ajoutez les années à la collection
            Do While Not rs.EOF
                years.Add rs.Fields("Year").value
                rs.MoveNext
            Loop
            rs.Close
        End If
     
     
        ' Vérifiez si la collection contient des tâches
        If years.Count > 0 Then
            message = "Années mémorisées :" & vbCrLf
            For Each Year In years
                message = message & Year & vbCrLf
                Listing_taches = Year & vbCrLf
            Next Year
            MsgBox message
        Else
            MsgBox "Aucune Année mémorisée."
        End If
     
        ' Fin du traitement (avec gestion des erreurs et de la transaction):
        ADO.Cnn_Fin AvecMessage
     
        ' Affichez les années dans la feuille
        Dim i As Integer
        For i = 1 To years.Count
            ws.Cells(i, 1).value = years(i)
        Next i
     
        Exit Sub
     
    ErrorHandler:
        MsgBox "Erreur : " & Err.Description
        ADO.Cnn_Fin AvecMessage
    End Sub
    Merci pour votre aide

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 598
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Pour le message d'erreur ça peut venir du nom du champ qui n'est pas précisé dans le sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLWhere = "SELECT DISTINCT FORMAT(DATE_RECEP, 'yyyy') As Year FROM OF_GENERAL ORDER BY FORMAT(DATE_RECEP, 'yyyy') DESC;"
    Cependant year étant un nom réservé, j'utiliserais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLWhere = "SELECT DISTINCT FORMAT(DATE_RECEP, 'yyyy') As YEAR_RECEP FROM OF_GENERAL ORDER BY FORMAT(DATE_RECEP, 'yyyy') DESC;"
    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Merci pour ton retour, opération réussi

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

Discussions similaires

  1. Execution REquete en VBA
    Par Rock01 dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/01/2008, 20h04
  2. Execution requête depuis VBA
    Par Tiresia dans le forum Sybase
    Réponses: 1
    Dernier message: 20/06/2007, 09h00
  3. [WD11] Erreur Exécution requête
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 2
    Dernier message: 06/02/2007, 11h34
  4. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 17h38
  5. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 07h27

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