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 :

Import .XLS sans chemin source


Sujet :

VBA Access

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Import .XLS sans chemin source
    Bonjour tout le monde,

    ça fait longtemps que je ne suis pas passé sur le forum et j'aimerais vous poser une question parce que là , je ne vois pas le bout du tunnel.

    Alors dans le cadre d'un projet, j'ai eu accès à ACCESS pour pouvoir manipuler 5 à 6 fichiers excels de 300 000 lignes environ.

    Ces fichiers me sont envoyés par l'informatique et peuvent donc être enregistré n'importe où et vu que je ne serais pas le seul à utiliser cette base.

    Le problème est que mes collègues n'ont qu'une version lecture de Access (Crise Oblige) et donc ils n'ont pas accès à toutes les fonctionnalités de Access et in fine ils ne peuvent pas importer des fichiers excels sous le menu "Données externes"

    J'ai essayé :
    - De mettre un ruban (ça n'a pas marché)
    - DoCmd.Transfert truc machin bidule non plus vu que le chemin source n'est pas figée pareil pour les Macros Access et plein d'autres truc mais rien à marché.

    J'aimerais donc savoir si y'a un code qui permetrais de lancer une importations avec tous les choix possibles ou justes lancer la boite de dialogue d'importation (voir pj)
    Je vous remercie d'avance!!!

    Alors le mieux que j'ai pu faire c'est de copier ce code mais ça ne marche que pour exportation
    Peut être ça peux vous donner des idées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub rechercherdossier()
        Dim Choix As String
        Choix = ChoixDossierFichier(1)
        If Choix <> "" Then MsgBox Choix
    End Sub
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Comment sont-ils envoyés ...
    Comment sont-ils envoyés, c'est peut-être là que résidera la solution! Soit en changeant la manière, soit en proposant un outil de FTP, ou de mailing, ou de ...
    Le choix d'un serveur FTP est, à mon modeste avis, le meilleur. Par exemple, un Task prédéfini qui se chargerait de l'envoi à heures régulières.

  3. #3
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Merci @Dolphy35 je vais essayer de faire ça et je reviens te dire si ça marche.

    @Chrysostome, enfaite le fichier est mis à disposition dans un volume commun, n'étant qu'un simple apprenti dans la boîte... je ne peux pas vraiment changer le mode de fonctionnement d'un autre service mais je vais essayer
    Merci

  5. #5
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Salut,

    Idéalement il serait plus gérable de mettre l'export ds un dossier commun avec la date en nom de fichier.

    Depuis ta base tu demande le jour et tu va cherche le fichier.

    L'inconvénient de laisser l'utilisateur chercher le fichier est qu'il se craque et plante ton import. Je te conseil de tester le fichier avant. Idéalement si tu as une structure type cherche une clé ou autre permettant de faire un test avant de lancer la procédure d'import. L'avantage de demander de sélectionner le fichier te permet de ne rien changer ds l'organisation. Il y a des personnes qui peuvent être perturbées pour pas grand chose, même si tu démontre que ça va les aider.

    @+

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Merci Dolphy35

    Enfaite le problème c'est qu'il y a 5-6 fichiers excels de 300 000 lignes chacun. Donc rien que pour la vitesse d'éxécution des requête, il faut les traiter un par un sinon ça fait ramer la base (J'ai déjà essayer de faire tout en grouper)

    Je ne sais pas si c'est possible de faire une importation enregistrée avec plusieurs fichiers sauf si je met les différentes importations à la suite dans une macro

    Mais vu que le nombre de fichier n'est pas toujours le même, ca va pas poser un problème dans l'éxécution de la macro!

    C'est pour ca que je souhaitais laisser à l'utilisiteur le choix du dossier

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Pour des bases de cette dimension
    Pour des bases de cette dimension, il existe des outils mieux adapté qu'Access!
    Il serait bon de se pencher vers un serveur dédié et aller vers SQL ou ses concurrents. Je crois qu'il faudrait un développeur aguerri.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Je n'y arrive pas
    Oui je sais que access est limité mais c'est dans mon projet que je dois rendre en fin d'année (dans le cadre de mon alternance) et vu que j'ai déjà commencé et que je n'y connais rien dans les autres domaines... je pensais que ça allait être plus simple

    Franchement je n'y arrive pas

    j'ai essayer avec ce 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
    19
    20
    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 "Fichiers Textes", "*.txt", 1
            .Add "Tous", "*.*", 2
        End With
        ' Aucun nom de fichier par défaut
        .InitialFileName = ""
        ' Interdit la multisélection
        .AllowMultiSelect = False
        ' Affiche la fenêtre et vérifie qu'un fichier a bien été choisi
        If .show Then
            MsgBox .SelectedItems(1)
        End If
    End With
    j'ai une erreur voir piece jointe (ERREUR1)

    j'ai réussis à ouvrir le BrowseFolder mais je ne peux pas selectionner de fichier!

    Je suis vraiment nul en VBA
    Images attachées Images attachées  

  9. #9
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Je vois que ça patauge dans ...
    Je comprends mal ton problème. Essaye de mieux l'expliciter. Le bout de programme que tu postes ne peut pas fonctionner. Est-ce que tu veux chercher dans tout le disque dur, un fichier dont on ne sait pas son nom, mais son extension?
    Je vois que ça patauge dans la choucroute. La boîte de dialogue existe et s'appelle CommonDialog. Tu peux la traiter soit en ocx soit en classe ce qui est préférable. Elle reproduit ( à peu près) la boîte de dialogue de Windows, donc avec les filtres d'appel de fichiers (.xls). Bref cherche du côté de cCommondialog. Sinon, continue à questionner. Bon courage.

  10. #10
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Bonjour,

    @moustiq237 : Le code fonctionne bien par contre tu filtre sur des fichiers Textes ou tous.
    Pour ton erreur il faut ajouter le code dans un procédure (Sub) ou fonction (Function). Dans l'exemple ci-dessous je filtre sur les fichiers XLS et XLSX

    Attention il faut bien référencer la Référence : Microsoft Office XX.0 Object Library. Soit XX en fonction de ta version d'access 12 pour 2007 et 14 pour 2010.

    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
    Sub test()
        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 "Fichiers Excel", "*.xls;*.xlsx", 1
            End With
            ' Aucun nom de fichier par défaut
            .InitialFileName = ""
            ' Interdit la multisélection
            .AllowMultiSelect = False
            ' Affiche la fenêtre et vérifie qu'un fichier a bien été choisi
            If .show Then
                MsgBox .SelectedItems(1)
            End If
        End With
    End Sub
    il te suffit d'appeler la procédure d'import du fichier Excel avec en chemin la sélection de la boîte

    @Chrysostome : le problème énumérer est clair et concis et le code encapsulé dans une procédure fonctionne parfaitement, pas besoin de passer par un ocx !
    Je ne sais pas de quel côté est la choucroute

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut MERCIII
    @Dolphy35 : Merci énormément pour ton aide! CA MARCHE! J'ai rajouté la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Sub Command_Click()
    et tout est bien qui finit bien comme de par Hasard!

    Maintenant je vais essayer de l'intégrer dans la procédure d'import!

    Je peux jeter mes boîtes de Doliprane à la poubelle

    Encore Merci et @Chrysotome aussi

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut On s'est pris la tête
    Comme l'intitulé le dit, on s'est vraiment pris la tête pour rien.

    Une Macro permet de faire ça. C'est la Macro "RunMenuCommand - Import attach excel"

    Au cas où quelqu'un aurait besoin de ça!


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

Discussions similaires

  1. Lire une fichier XLS sans excel
    Par petitcoucou31 dans le forum API, COM et SDKs
    Réponses: 10
    Dernier message: 06/10/2008, 15h03
  2. [SQL-SERVER]Importing data from external sources
    Par poosh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2006, 13h25
  3. [ADO.Net][VB.NET/C#]Comment importer .xls dans DataSet ?
    Par smedini dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/01/2006, 15h59
  4. Enregistrer fichier .xls sans macro ni code vb
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/11/2005, 17h48
  5. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07

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