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'exécution "3265": Elément non trouvé dans cette collection. [AC-2013]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut Erreur d'exécution "3265": Elément non trouvé dans cette collection.
    Bonjour à tous,

    Déjà, j'annonce la couleur: je ne suis pas très doué en VBA!

    Je cherche à créer un outil qui permet d'ajouter des photos à des Enfants (trombinoscope pour une école) et pour cela, je passe par du vba pour limiter la taille de mes fichiers.
    Grâce notamment à developpez.net j'ai pu écrire / récupérer le code suivant (j'ai lu le tuto de Christophe Warin: http://warin.developpez.com/access/piecejointe/#LV-A) mais il me retourne une erreur d'exécution "3265": Elément non trouvé dans cette collection.

    Si quelqu'un peut m'aider, ça serait top!

    Voici la partie du code attachée à mon bouton, qui ne semble fonctionner jusqu'ici . J'y ajouterai la limitation de taille de la PJ plus tard.
    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
     
    Private Sub Ajoutphoto_Click()
     
    Dim strchemin As String
    Dim oFD As Object
    'Paramètre la fenêtre Ouvrir
    Set oFD = Application.FileDialog(msoFileDialogOpen)
    With oFD
        'Ajoute les filtres pour fichiers textes et tous
        With .Filters
            .Clear
            .Add "Documents", "*.doc; *.png; *.jpg ", 1
            .Add "Tous", "*.*", 2
        End With
        .InitialFileName = ""
        'Interdit la multi sélection
        .AllowMultiSelect = False
        'Affiche la fenêtre et vérifie qu'un fichier a bien été choisi
        If .Show Then
            strchemin = .SelectedItems(1)
            If AjouterFichier(strchemin, Me.N°Enfant) Then
                Me.Form.Requery
            End If
        End If
    End With
     
    End Sub

    Et voici la fonction qui doit permettre de insérer la PJ dans la T_Enfants. Et c'est ici que je bloque:

    oRst2("FileData").LoadFromFile (strchemin)

    La variable strchemin est correctement alimentée, mais oRst2("FileData") est l'élément non trouvé dans cette collection.


    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
    Function AjouterFichier(strchemin As String, inteleve As Integer) As Boolean
     
    Dim oRst As DAO.Recordset2
    Dim oRst2 As DAO.Recordset2
     
    Set oRst = CurrentDb.OpenRecordset("SELECT PhotoEnfant FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
        'Put the parent record into edit mode
        oRst.Edit
     
        'Ouvre un recordset sur les fichiers de l'enfant passé en paramètre
        Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
     
        oRst2.Edit
        oRst2("FileData").LoadFromFile (strchemin)
        oRst2.Update
     
        AjouterFichier = True
     
    oRst.Update
     
    fin:
        Set oRst = Nothing
        Exit Function
     
        Resume fin
     
    End Function
    Merci de votre aide et de vos conseils!

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

    Le champ "FileData" n'est pas dans ta requête qui alimente le Recordset.

    Commence déjà par le mettre dans celle-ci.

    Philippe

  3. #3
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Merci beaucoup pour cette réponse.

    Citation Envoyé par Philippe JOCHMANS Voir le message

    Le champ "FileData" n'est pas dans ta requête qui alimente le Recordset.

    J'ai donc ajouté:
    - un champ PhotoEnfant.FileData dans la requête sur laquelle est basé mon formulaire (je n'avais mis que le champ PhotoEnfant "global)
    - Dans le code, j'ai modifié le contenu du Recordset comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Ouvre un recordset sur les fichiers de l'enfant passé en paramètre
        Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
    Est-ce correct? Mais j'ai toujours la même erreur...

    Merci!

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonsoir,
    il me semble que la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)

  5. #5
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonsoir,
    il me semble que la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)
    Merci, en fait j'avais déjà essayé ça et ça me donne une autre erreur:

    "Erreur d'exécution '3058':

    Un index ou une clé principale ne peut pas contenir une valeur Null."

    Mais maintenant, la macro bloque sur Je ne sais pas ce qui vaut mieux entre les deux erreurs

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonjour,
    Je ne sais pas ce qui vaut mieux entre les deux erreurs
    Si du code provoque une erreur, c'est fort probable que cela plantera plus loin, surtout lors de la mise à jour d'un enregistrement.
    Il faut d'abord corriger la première erreur. Je te conseille donc de poster ton dernier code mis à jour, c'est plus pratique pour les contributeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set oRst = CurrentDb.OpenRecordset("SELECT PhotoEnfant FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
        'Put the parent record into edit mode
        oRst.Edit
     
        'Ouvre un recordset sur les fichiers de l'enfant passé en paramètre
        Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
    Commence par enlever l'un des deux RecordSet (oRst et oRst2 ouvrent le même jeu d'enregistrements, on se demande pour quelle raison).

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
        
       if not oRst2.eof then oRst2.Edit then oRst2.addnew
    
        oRst2("N°Enfant")=inteleve
        oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)
        oRst2.Update
    Dernière modification par Invité ; 07/12/2017 à 11h49.

  8. #8
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Bonjour dysorthographie,
    J'ai essayé ce que tu proposes. J'ai esayé ce que tu proposes, mais j'ai du modifier légèrement pour en pas avoir d'erreur (j'ai remplacé un then par else et ajouté end if). C'est correct?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
            If Not oRst2.EOF Then
            oRst2.Edit
            Else
            oRst2.AddNew
            End If
        oRst2("N°Enfant") = inteleve
        oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)
        oRst2.Update
    Mais j'ai à nouveau l'erreur 3265 sur la ligne: oRst2("N°Enfant") = inteleve

  9. #9
    Invité
    Invité(e)
    Par défaut
    Désolé!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData, [N°Enfant] FROM T_Enfants WHERE [N°Enfant]=" & inteleve)

  10. #10
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Alors j'ai modifié la ligne et j'ai une nouvelle erreur sur la ligne oRst2("N°Enfant") = inteleve:

    "Erreur d'exécution 3164: Le champ ne peut pas être mis à jour"

    Voici mon code actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData, [N°Enfant] FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
            If Not oRst2.EOF Then
            oRst2.Edit
            Else
            oRst2.AddNew
            End If
        oRst2("N°Enfant") = inteleve
        oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)
        oRst2.Update

  11. #11
    Invité
    Invité(e)
    Par défaut
    N°Enfant et un AutoIncrément?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData] FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
            If Not oRst2.EOF Then
            oRst2.Edit
            Else
            oRst2.AddNew
            End If
           oRst2("PhotoEnfant.Filedata").LoadFromFile (strchemin)
        oRst2.Update

  12. #12
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    N°Enfant et un AutoIncrément?
    Oui, c'est un numéro Auto et la clé primaire de ma table principale, qui liste tous les enfants.

    Dans un formulaire "Ajout photo", en mode continu, basé sur une requête, j'affiche tous les enfants qui n'ont pas encore de photo (càd ceux pour qui PhotoEnfant.FileName Est Null.

    Et quand je clique sur le bouton en face d'un enfant, je veux ajouter sa photo et qu'elle vienne s'enregistrer dans la table principale.

    Merci pour tes réponses!

  13. #13
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonjour Joe002 et dysorthographie,
    en combinant tous nos codes on devrait peut-être y arriver (je n'ai pas testé mais je me suis inspiré de ce code : https://www.developpez.net/forums/d1...s-jointes-vba/)
    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
    Function AjouterFichier(strchemin As String, inteleve As Integer) As Boolean
     
    Dim oRst2 As DAO.Recordset2
     
        'Ouvre un recordset sur les fichiers de l'enfant passé en paramètre
        Set oRst2 = CurrentDb.OpenRecordset("SELECT PhotoEnfant.FileData FROM T_Enfants WHERE [N°Enfant]=" & inteleve)
        With orst2.Fields("PhotoEnfant").Value
            .AddNew
            .Fields("Filedata").LoadFromFile (strchemin)
            .Update
        End With 
        AjouterFichier = True
     
    fin:
        Set oRst2 = Nothing
        Exit Function
    Resume fin
     
    End Function

  14. #14
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Décembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2017
    Messages : 22
    Par défaut
    Merci tee, j'ai essayé ton code, mais ça ne fonctionne pas.

    Cette fois j'ai à nouveau l'erreur 3265 sur la ligne With oRst2.Fields("PhotoEnfant").Value

    Désolé de vous faire suer

  15. #15
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Désolé de vous faire suer
    pas de souci ...
    essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With orst2.Fields("PhotoEnfant.FileData")
            orst2.AddNew
            .LoadFromFile (strchemin)
            orst2.Update
        End With

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/09/2010, 17h37
  2. [AC-2003] Err 3265 Eléments non trouvé dans cette collection
    Par Misha dans le forum IHM
    Réponses: 2
    Dernier message: 01/10/2009, 13h40
  3. Réponses: 3
    Dernier message: 02/03/2008, 17h08
  4. bdd : erreur 3265 élément non trouvé dans cette collection
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2006, 09h52

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