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 :

Insérer des lignes dans une liste de choix [AC-2000]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut Insérer des lignes dans une liste de choix
    Bonjour


    Alors voilà:

    J'ai un formulaire dans lequel j'ai une liste de choix. Dans cette liste je souhaite faire apparaitre les noms de fichiers dans un dossier lembda.

    Actuellement j'ai:

    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
     
    Sub ListFilesInFolder()
     
    Static FSO As FileSystemObject
    Static bNotFirstTime As Boolean
     
    Dim oSourceFolder As Scripting.Folder
    Dim oFile As Scripting.File
    Dim strFolderName As String
     
     
    strFolderName = "C:\Mes_Documents\Fichiers_Input"
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oSourceFolder = FSO.GetFolder(strFolderName)
     
    For Each oFile In oSourceFolder.Files
        If oFile.Name Like "###Menu.xls" Then
            frm_accueil!Liste_Menu.RowSource = oFile.Name 'mon problème est ici
        End If
    Next oFile
     
    End Sub

    J'ai repris du code sur le FAQ Excel pour la recherche des fichiers, je sais qu'il marche car avec une msgbox à l'interieur de mon "If oFile.name..." je pouvais récupérer le nom du fichier voulu. Donc mon problème maintenant est de pouvori affecter le nom du fichier à la liste de choxi "Liste_Menu" qui appartient au formulaire frm_accueil.


    Là est mon problème


    Au passage si vous pensez que ce code peut être améliorer ou des conseils je suis preneur !


    Merci

  2. #2
    Membre habitué Avatar de Brunodm13
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bonsoir,

    Essaye d'alimenter une table (temporaire ?) avec tous les fichiers trouvés dans ton dossier et utilise cette table pour créer la source des données de ta zone de liste.

    Cordialement.

    Bruno

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    On peut faire plus simple en utilisant la fonction VBA : Dir

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par fgiambelluco Voir le message
    Bonjour
    On peut faire plus simple en utilisant la fonction VBA : Dir
    Ah ? !
    Je connais pas cette fonction je vais regarder.


    EDIT: J'ai fais une recherche rapide sur la fonction DIR, en fait elle permet de selectionner les fichiers d'un répertoire. La fonction que j'ai pour le moment marche, à moins que ce soit vraiment plus efficace sinon je pense garder ce que j'ai.

    Saufsi dans la fonction Dir j'ai la possibilité de directement alimenter ma liste de choix avec les noms de mes fichiers.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Brunodm13 Voir le message
    Bonsoir,

    Essaye d'alimenter une table (temporaire ?) avec tous les fichiers trouvés dans ton dossier et utilise cette table pour créer la source des données de ta zone de liste.

    Cordialement.

    Bruno
    J'aime bien l'idée, pour moi la table pourait même être permanante ça gène pas je pense.

    En gros ce serait une requete qui selectionnent les noms des fichiers d'un répertoire données, avec les conditions que je veux (format du nom) et qui les insert dans une table.
    Cette même table servira de source à ma liste de choix...

    L'idée me parait bien. Si tu as une ébauche de code ou un lien quelconque je suis preneur. Je vais regarder de mon coté comment faire une requete sur un répertoire.

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Points : 110
    Points
    110
    Par défaut
    Bonjour, il semble que le code, tu l'aies déjà !

    La suggestion de Brunodm13 consiste juste à le modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Ofile In oSourceFolder.Files
        If Ofile.Name Like "###Menu.xls" Then
            SQL = "INSERT INTO NomtableTemp VALUES (" & Ofile.Name & ");"
            CurrentDb.Execute (SQL)
        End If
    Next Ofile
     
    SQL = "SELECT * FROM NomTableTemp"
    Me.Liste_Menu.RowSource = SQL
    Cordialement

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    OK je comprend mieux l'idée, toutefois comment tu fais pour créer une table temporaire ?

    J'ai ajouté le code précédent à mon module mais j'ai une erreur qui indique que j'ai un opérateur absent ??

    Je recois le message suivant:

    Erreur de syntaxe (opérateur absent) dans l'expression 'nom de mon fichier oFile'.

    Ca vient du fait que j'ai pas créer une table temporaire ? Ou plutôt comment marche une table temporaire ??

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    il ne faut pas oublier aussi dans ce cas de vider au besoin la table.

    sinon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    strFolderName = "C:\Mes_Documents\Fichiers_Input"
    Liste_Menu.RowSource = ""
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oSourceFolder = FSO.GetFolder(strFolderName)
     
    For Each oFile In oSourceFolder.Files
        If oFile.Name Like "###Menu.xls" Then
            Liste_Menu.RowSource = Liste_Menu.RowSource & oFile.Name & ";"
        End If
    Next oFile

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Ouai bonne remarque pour la table !

    Sinon j'ai resolu mon probleme pour l'erreur cité précédemment. En fait il fallait mettre une quote devant le quillemets. J'ai aussi remplacer les "&" par des "+" je sais pas si ça venait de ça mais la requête marche.

    A défaut de savoir créer-manipuler une table temporaire (vous avez encore quelques heures pour me rendre moins bête ) j'ai créer une table sur ma base Access dans laquelle j'insère mes données comme il faut.

    Merci à tous poru votre aide, j'ai ce qu'il me faut pour l'instant, je mettrai résolu après être sûr que je suis bon.

    Si vous pensez que ce que j'ai fait peut être optimiser (notamment avec une table temporaire) je suis preneur.


    Merci

  10. #10
    Membre régulier Avatar de GillesDeVuif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 88
    Points : 110
    Points
    110
    Par défaut
    Bonjour.
    Il n'y a aucune différence technique entre une table permanente et une temporaire : c'est sémantique.
    La temporaire prend cette appellation parce qu'elle sert ponctuellement et qu'à priori tu vas la supprimer une fois son office rempli.
    J'ai oublié les quotes dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO NomtableTemp VALUES ('" & Ofile.Name & "');"
    Il t'appartient de décider de quelle manière tu opères pour la création/suppression de la table, mais la syntaxe ci-dessus nécessite que la table existe.
    Cordialement.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour

    Le fait de travailler sur une table temporaire qu l'on vide (ou supprime), puis que l'on remplit (ou créé) va faire rapidement gonfler la base (suppression logique et pas physique) et il faudra la compacter régulièrement.
    A toute fin utile le code Avec l'instruction DIR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim NomFichier As String
        NomFichier = Dir("C:\MonDossier\*.xls")
        Do Until NomFichier = ""
            MaListe.AddItem NomFichier
            NomFichier = Dir
        Loop

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    @Gilles

    Ok je pensais en fait qu'il s'agissait encore d'autre chose.

    J'ai donc fait le choix d'avoir une table que j'efface puis remplis.

    Mon code marche et tout est ok ! Merci à tous pour votre aide !

  13. #13
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    merci fgiambelluco
    je n'avais pas vu son emploi ainsi.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    @fgiambelluco

    Je vais jeter un coup d'oeil et si j'arrive à remplcaer mon code facilement je prendrai ça ! Effectivement ce sont des considérations à prendre.

    Sinon je viens de voir que j'ai un problème, lors du démarrage de mon application Access la liste de choix n'est pas alimenter.

    Comment dois je faire pour lancer mon code au démarrage de mon application pour que ma liste de choix soit alimenter dés l'ouverture de mon application ?


    Merci


    EDIT: J'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public sub Form_Load
    ListDeourlante
    end sub
    Ca marche bien, si quelqu'un à une idée plus "pro" je suis preneur !

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Comment dois je faire pour lancer mon code au démarrage de mon application pour que ma liste de choix soit alimenter dés l'ouverture de mon application ?
    Le plus simple est d'alimenter la liste à l'ouverture du formulaire

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par fgiambelluco Voir le message
    Re
    Le plus simple est d'alimenter la liste à l'ouverture du formulaire
    Nos messages se sont croisés Effectivement c'est ce que j'ai fait ça marche bien.

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

Discussions similaires

  1. Insérer des lignes dans une matrice
    Par you_go dans le forum Fortran
    Réponses: 2
    Dernier message: 21/08/2009, 12h10
  2. Insérer des lignes dans une table efficacement
    Par newbie82 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/07/2007, 17h01
  3. Insérer des images dans une liste de choix ?
    Par Strix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 04/05/2007, 12h48
  4. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  5. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 12h45

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