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 :

Ouverture requete en VBa [AC-2002]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 308
    Par défaut Ouverture requete en VBa
    Bonjour
    J'ai créé ce code pour pouvoir afficher des photos selon un critère donné par une liste déroulante
    J'obtiens une erreur 13 incompatibilité de type sur la 7ème ligne
    Set orst = CurrentDb.QueryDefs("NationActeur")
    NationActeur est le nom de ma requete
    Photo est le champ de la requete ou se trouve le nom de fichier
    voici le code

    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
    Private Sub Nationalité_AfterUpdate()
    Dim fic As String
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
    Dim oDb As DAO.QueryDef
    Dim orst As DAO.Recordset
    Set orst = CurrentDb.QueryDefs("NationActeur")
    With orst
        Do Until .EOF
    fic = orst("Photo")
    oFSO.CopyFile "C:\PhotoActeur\" & fic, "C:\NatioActeur\" & fic
    .MoveNext
     Loop
     End With
    orst.Close
    EDossier = "C:\NatioActeur"
    RepaintPhotos
    End Sub
    Je ne vois pourtant pas d'erreur
    Si quelqu'un peut me guider ....
    Merci

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    peux-tu nous donner le contenu SQL de la requête en question, il est possible que l'incompatibilité de type soit à ce niveau là
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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 éclairé
    Inscrit en
    Mai 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 308
    Par défaut
    Salut
    Merci de ta réponse
    Voici le contenu SQL de la requête NationActeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Acteurs.Photo, Acteurs.Nationalité, Acteurs.PrésencePhoto
    FROM Acteurs
    WHERE (((Acteurs.Nationalité)=Formulaires!PhotoActeurs!Nationalité) And ((Acteurs.PrésencePhoto)=-1));
    Cette requête attaque la table Acteurs
    Les champs photo et nationalité sont du texte
    Le champ Présence Photo est une case à cocher (oui/non)

    Au niveau du form PhotoActeurs, Nationalité est le nom de ma liste déroulante

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Ca serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRst = CurrentDB.OpenRecordset("...")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDB = CurrentDB.QueryDefs("...")
    [Access] Les bases du débogage => ici

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 308
    Par défaut
    Bonsoir
    Sur les conseils de Kloun j'ai modifié mon code que voici

    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
    Private Sub Nationalité_AfterUpdate()
    NationalitéTxt.value = Nationalité.Column(0)
    Dim fic As String
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
    Dim oDb As DAO.QueryDef
    Dim orst As DAO.Recordset
    Set oDb = CurrentDb.QueryDefs("NationActeur")
    Set orst = CurrentDb.OpenRecordset("NationActeur")
    With orst
        Do Until .EOF
    fic = orst("Photo")
    oFSO.CopyFile "C:\PhotoActeur\" & fic, "C:\NatioActeur\" & fic
    .MoveNext
     Loop
     End With
    orst.Close
    EDossier = "C:\NatioActeur"
    RepaintPhotos
    End Sub
    Maintenant j'ai l'erreur trop peu de paramètres , 1 attendu
    J'en conclu que ça vient de la requête NationActeur dont voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Acteurs.Photo, Acteurs.AbscencePhoto, Acteurs.Nationalité
    FROM Acteurs WHERE (((Acteurs.AbscencePhoto)=No) AND ((Acteurs.Nationalité)=[Formulaires]![Photos acteurs]![NationalitéTxt]));
    Je me suis apperçu qu'en enlevant tout ce qui se trouve derrière Acteurs.Nationalité et en remplaçant par "Française" par exemple ça fonctionne

    Donc c'est la récupération de la valeur de NationalitéTxt qui ne marche pas
    Mais je ne vois pas pourquoi .
    Alors j'ai encore besoin de votre aide !!
    Merci d'avance

  6. #6
    Membre éprouvé Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Par défaut Contenu clause Where
    Citation Envoyé par Jean-Luc80 Voir le message
    ((Acteurs.Nationalité)=[Formulaires]![Photos acteurs]![NationalitéTxt]));
    Bonjour.
    Je comprends que le choix d'une valeur dans la liste déroulante Nationalité conditionne la clause where de ta requête NationActeur.
    Si tel est le cas, on devrait retrouver l'appel de cette valeur dans ta requête comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(Acteurs.Nationalité) = " & Me.ListeDéroulante.Column(n) & ";"
    Il pourrait être judicieux de renommer ton contrôle pour qu'il ne porte pas le même nom que le champ de ta table, et de manière générale pour t'y retrouver dans tes contrôles ( tuto incontournable de JP Ambrosino : http://argyronet.developpez.com/office/vba/convention/)

    Concrètement, si je reprends ton dernier code modifié pour adaptation :

    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
    Private Sub Nationalité_AfterUpdate()
     
    Dim fic, StrSQL As String
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
    Dim orst As DAO.Recordset
     
       StrSQL = "SELECT Photo, AbsencePhoto, Nationalité FROM Acteurs " & _
       "WHERE AbscencePhoto = No AND Nationalité = " & Me.Nationalité.Column(0) & ";"
     
    Set orst = CurrentDb.OpenRecordset("StrSQL")
    With orst
        Do Until .EOF
           fic = orst("Photo")
           oFSO.CopyFile "C:\PhotoActeur\" & fic, "C:\NatioActeur\" & fic
           .MoveNext
        Loop
    End With
     
    set Orst = Nothing
    EDossier = "C:\NatioActeur"
    RepaintPhotos
     
    End Sub
    Cordialement.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    NAtionalité étant une chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    StrSQL = "SELECT Photo " & _
              "FROM Acteurs " & _
              "WHERE AbscencePhoto = No " & _
              "AND Nationalité = '" & nz(Me.Nationalité.Column(0), "") & "'"
    [Access] Les bases du débogage => ici

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

Discussions similaires

  1. Executer un requete en VBA
    Par el_quincho dans le forum Access
    Réponses: 1
    Dernier message: 13/03/2006, 16h09
  2. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 12h05
  3. Utilisation d'un résultat de requete dans VBA
    Par marie10 dans le forum Access
    Réponses: 3
    Dernier message: 30/01/2006, 10h29
  4. requete via VBA sur different schema oracle
    Par FO dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2006, 15h40
  5. Réponses: 2
    Dernier message: 24/11/2005, 11h46

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