Pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter, inscrivez-vous gratuitement !

 

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 13
    Points
    13

    Par défaut Formulaire : bouton ouvrir fichier dans l'arborescence système

    Bonjour à tous,

    Je cherche à mettre en place un bouton me permettant d'importer n'importe quel fichier de mon arborescence système (du style parcourir). Comme il s'agira d'un fichier excell, je voudrais qu'il soit convertit directement en table Access. Je souhaiterais également que certaines colonnes de cette table soit en format texte.

    Comment puis-je faire cela?

    Merci pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 107
    Points : 18 408
    Points
    18 408

    Par défaut

    Bonjour.

    Peux-tu preciser la version d'Access que tu utilises ?

    Je cherche à mettre en place un bouton
    Bon ca c'est simple, tu prends un bouton et tu l'ajoutes a ton formulaire.

    me permettant d'importer n'importe quel fichier de mon arborescence système (du style parcourir).
    La il faut faire du code pour ouvrir le selecteur de fichier.

    Comme il s'agira d'un fichier excell, je voudrais qu'il soit convertit directement en table Access.
    A priori c'est possible avec les commandes d'import de Access.
    Pas forcement la meilleur idee mais possible.

    Je souhaiterais également que certaines colonnes de cette table soit en format texte.
    Est-ce que tes fichiers vont avoir toujours la meme structure ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 13
    Points
    13

    Par défaut

    Merci pour ta réponse,

    Mon projet à la base est d'automatiser une création de table qui nécéssite en entrée deux fichiers excell bien spécifiques qui seront enregistrés dans le système, ils auront donc toujours le même format.
    J'utilise Access 2013, mais je ne maitrise pas assez le vba pour écrire la code de selection de fichier derrière mon bouton parcourir.

    J'aurai donc besoin d'un peu d'aide pour savoir comment écrire mon et notamment comment spécifier que certaines colonnes de mon fichier importé soient en format texte.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 107
    Points : 18 408
    Points
    18 408

    Par défaut

    Bonjour.

    En fait la solution que je te recommande est la suivante :

    tu crees 2 tables d'importations qui vont avoir la meme structure que tes fichiers Excel.
    Dans ces tables tu vas preciser le type de colonne que tu veux.
    Attention ceci suppose que tes fichiers Excel sont "propres" c-a-d que si tu attends du texte tu as du texte dans la colonne, si tu attends un nombre tu as un nombre.
    Excel permet de metre n'importe quoi dans une meme colonne mais Access ne le tolere pas.

    Apres dans ta procedure d'importation :
    1. Tu vides la table d'importation.
    2. Tu importes tes donnees.
    3. Tu traites eventuellement tes donnees importees.
    4. Tu transferts les donnees importees dans la ou les tables definitives.


    Passer par une table d'importation protege tes donnees de la corruption.
    Tant que tes donnees importees ne sont pas confiormes, tu peux les retravailler ou recommencer l'import autant de fois que necessaire.

    1. Bon pour la selection des fichiers, depuis les dernieres version d'Access cela c'est bien simplifie.

      La commande Application.FileDialog
      https://docs.microsoft.com/en-us/off...ion.filedialog
      permet cela facilement.

      Il y a un exemple dans la page, il suffit de changer les filtres (la c'est pour des fichiers Access).

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
            .Filters.Clear 
            .Filters.Add "Excel Files", "*.xls*" 
            .Filters.Add "All Files", "*.*"
    2. Pour l'importation :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      private sub ImportFichier(prmNomFichier)
         dim db as dao.database:set db=currentdb
         dim SQL as string
       
         '=== Vide la table d'import
         SQL="delete * form tblImport"
         call db.execute(SQL, dbFailOnError)
         '--- Vide la table d'import
       
         call docmd.TransferSpreadsheet(acImport,,"tblImport",prmNomFichier, True) 'Voir l'aide pour les parametres, j'ai mis ce qui me semblait le plus probable
       
         db.close: set db=nothing
      end sub
      j'ai fait une procedure separee pour faciliter la mise au point.
      On peut jsute tester cette partie du code independement de la selection.
    3. Pour le netoyage, je ne connais pas tes donnees donc pas de suggestion.
    4. Pour le transfert dans la table definitive, la solution la plus facile a vivre selon moi est d'avoir 2 requetes.
      1. reqSelectionneDonneesImport: Une requete de selection qui va te donner les donnees a importer.
        Cette requete peut server a faire des substitutions, modification ou tout autre transformation utiles avant le transfert dans les donnees definitives.
      2. reqAjouteDonneesImport: Une requete d'ajout qui va ajouter les donnees de la requete de selection a la table definitive.


      La encore decouper permet de tester les morceaux un a un sans avoir a lancer un traitement complet.

      pour declencher le transfert dans la table definitive en VBA :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
         dim db as dao.database:set db=currentdb
         call db.execute("reqAjouteDonneesImport", dbFailOnError)
         db.close: set db=nothing
      et meme si ce n'est pas indispensable, je te recommande de mettre ce code dans sa proper procedure.

      Quelque chose comme :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      private sub TransfererDonnees()
        'Ici le code
      end if
      Note qu'une fois le transfert termine tu peux vider la table d'import comme au debut du traitement. C'est plus propre mais garder les dernieres donnees traitees peut aider au debuggage donc a toi de juger.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 107
    Points : 18 408
    Points
    18 408

    Par défaut

    Les noms sont indicatifs, tu peux mettre ce qui te parles le plus dans le contexte de ton application.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 107
    Points : 18 408
    Points
    18 408

    Par défaut

    Et si tes donnees dans Excel ne sont pas propres on peut le gerer aussi, c'est juste plus complique.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 13
    Points
    13

    Par défaut

    Merci pour ta méthode, la table se génère correctement.

    Seulement toutes les données sont en format texte, avec quel portion de code peut-on spécifier les colonnes que l'on veut en format nombre?
    De plus, la première ligne de mon fichier excel est composée des titres des colonnes, comment les conserver dans ma table access importée?

    Encore merci pour ton aide précieuse

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    12 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 12 107
    Points : 18 408
    Points
    18 408

    Par défaut

    Bonjour.

    Pour creer ta table initiale, tu peux faire un import manuel.
    Cela va te creer les colonnes avec leur noms.
    Apres tu vides la table et tu modifies les types.

    Pour garder les noms lord d'un import automatique, c'est un des parametres de TransferSpreadSheet.
    Pour les types, il faut utiliser une specification d'importation mais c'est assez tordue et "blackbox" au moment du transfert.

    Ma solution de table intermediaire est plus facile a vivre.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/06/2018, 10h21
  2. [WD-2002] Bouton Ouvrir Fichier NuméroFacture.mdb sur un formulaire Word
    Par vaucluseimmo dans le forum VBA Word
    Réponses: 0
    Dernier message: 27/11/2009, 15h25
  3. [Formulaire] Liste de fichiers dans une listbox
    Par ushiwa.sasuke dans le forum IHM
    Réponses: 26
    Dernier message: 01/11/2006, 12h20
  4. bouton ouvrir fichier
    Par p'tite Sandrine dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h41
  5. [VB.NET] Ouvrir fichier dans appli par double-clic dessus
    Par vynce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2005, 16h43

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