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

Macros et VBA Excel Discussion :

Importer données à partir d'un fichier Excel externe non statique pour alimenter un TCD


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut Importer données à partir d'un fichier Excel externe non statique pour alimenter un TCD
    Bonjour à tous,

    En vous remerciant par avance j'ai besoin de vos compétences pour m'aider à mettre en place un VBA dans le cadre professionnel. Je m'explique... A partir d'un fichier Excel mensuel que je recois d'un centre Administratif Externalisé, je dois suivre les note de frais de mes différents employés. Ce que je souhaite réaliser est une macro me permettant de:

    - Choisir le fichier source qui sera amané à bouger sur mon PC (ouvrir une fenêtre et venir choisir le fichier source)
    - Sélectionner la feuille et l'ensemble des données qui vont devoir être intégré (il y a une unique feuille dans ce fichier, le format est identique d'un mois à l'autre: en têtes, ligne de titre... mais le nombre de lignes varie)
    - Copier ces données dans notre feuille DATA en supprimant la première ligne (Titre) et utiliser la deuxième comme en tête.
    - Ajouter une colonne nommé Expense Type 2 juste après la colonne Expense Type en J.
    - Alimenter cette colonne en se basant sur notre table Referentiel en Feuille 2 (Expense Type) afin de retraiter les Types de dépenses avec la colonne Expense Type DATA BASE. Ex: Room Tax devient Hotel. L'objectif est de regrouper certain types de dépenses appartenant au même groupe.
    - Renommer cette plage afin de pouvoir la lier à un TCD qui sera généré sur une autre feuille (TCD). Peut être inserer les données sous forme de tableau... Je ne sais pas quelle solution est la meilleure.

    Remarques:
    Chaque mois la macro doit venir écraser notre DATA avec les nouvelles données (en tête identique moins la ligne de Titre mais nombre de lignes qui varient) et pouvoir faire le lien avec notre TCD.
    Le tableau en feuille 1 correspond aux données telles que je les récupèrent tous les mois. La feuille 2 correspond à mon référentiel mapping pour retraiter mes types de dépenses et la feuille 3 sera utilisée pour afficher notre TCD. Il y a une Macro enregistrée sur le classeur qui peut peut-être aider.Test.xlsx

    Merci d'avance ! J'espère avoir été assez précis et clair dans ma demande. Je vous joint le fichier en question avec un début de code qui ne répond pas parfaitement à mon besoin mais qui pourra peut être vous aider

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    On peut nettement simplifier l'approche :

    • un code qui se limite à ouvrir le fichier mensuel, en supprimer la 1ère ligne et le sauvegarder, toujours sous le même nom
      • soit dans un unique dossier conservé au fil du temps,
      • soit dans un dossier lié à la période où se trouvera une copie du fichier de synthèse par TCD.
    • le fichier de synthèse est lié à ce fichier data, ce qui donne automatiquement un tableau, sur lequel est bâti le TCD : il suffit d'actualiser la liaison et le TCD (actualisations paramétrables sans VBA).

    Cela fait très peu de code, permet de gérer le nombre variable de lignes automatiquement et la formule de ventilation juxtaposée dans le tableau aux données sources se propage automatiquement sur le bon nombre de lignes.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta response.

    Si j'ai bien compris on ouvre le fichier à partir d'un Excel possedant uniquement le code pour notre Macro. Celui-ci nous demande d'ouvrir notre fichier mensuel et le copie dans un répértoire en apportant les modifications de mise en forme. Ceci permettant de créer un lien avec notre TCD puisque le fichier s'enregistrera toujours au même endroit. Reprenez moi si je me trompe

    Mes questions:
    A chaque lancement de Macro le fichier écrasera t'il l'ancien ?
    Comment fera t'il le lien entre ma plage de données et le TCD ? A partir d'un nom sur la plage ?

    Merci d'avance

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Un autre élément Peux tu m'aider pour la première partie du code qui consiste à ouvrir le fichier mensuel et en enregistrer une copie dans un répértoire fixe avec suppression de ligne. Merci beaucoup

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Re

    La liaison se fait sur un onglet d'un classeur : Excel rapatrie automatiquement les lignes remplies pas besoin de définir de plage.

    Une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Ficmois()
    Chemin = "T:\temp\"
    nom = "Data"
    Lefichier = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
     
     If Lefichier <> False Then
        Workbooks.Open Lefichier
        ActiveSheet.Rows(1).EntireRow.Delete
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Chemin & nom
        Application.DisplayAlerts = True
        ActiveWorkbook.Close
     End If
    End Sub
    Il peut être utile d'ajouter des contrôle pour vérifier
    • que le fichier choisi est bien un Excel,
    • et/ou une partie de son nom...

    Chemin et nom de fichier cibles à adapter...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ton travail.

    J'ai une petite requête: Peut on ajouter le format xlsm pour le fichier source ? J'ai éssayé sans réussir. Pour ce qui est des contrôles je ne suis pas assez compétent pour coder ca... Je ne veux pas non plus abuser de ton temps ! Si tu peux m'orienter la dessus je suis preneur sinon ca ira très bien !

    J'ai un blocage sur le code que j'ai modifié pour le chemin. J'ai créé un dossier DATA sur mon bureau il bloque sur la ligne en rouge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub DATA_IMPORT()
    Chemin = "C:\Users\fcany\Desktop\"
    nom = "DATA"
    Lefichier = Application.GetOpenFilename("Excel Files (*.xlsx), (*.xlsx")
     If Lefichier <> False Then
        Workbooks.Open Lefichier
        ActiveSheet.Rows(1).EntireRow.Delete
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Chemin & nom
        Application.DisplayAlerts = True
        ActiveWorkbook.Close
     End If
    End Sub

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Petite précision: Le fichier qui s'enregistre est paramétré en ActiveWorkbook.SaveAs Chemin & nom. Ne serait il pas plus prudent d'enregistrer le fichier choisi dans la fenêtre ? Car si je garde un fichier excel ouvert sur lequel je travail il va me sauvegarder le fichier sur lequel je travail et non celui que j'ai choisi. Merci d'avance

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    RE

    Data est le nom du fichier utilisé par la liaison pour le TCD, ce n'est pas un dossier

    Je ne comprends pas pourquoi tu veux un xlsm : ce n'est pas un simple fichier de data exporté ?

    Quand on enregistre Activeworkbook c'est forcément celui qui vient d'être ouvert puisque le code enchaîne sans que l'utilisateur ne change de classeur...

    As-tu testé ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci pour tes précisions. En effet le xlsm ne me sert à rien ... J'ai testé cela bloque sur mon fichier source. Il supprime la première ligne de mon fichier source et plante a ce niveau:

    ActiveWorkbook.SaveAs Chemin & nom

    Voici mon code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DATA_IMPORT()
    Chemin = "C:\Users\fcany\Desktop\DATA\"
    nom = "DATA"
    Lefichier = Application.GetOpenFilename("Excel Files (*.xlsx), (*.xlsx")
    If Lefichier <> False Then
    Workbooks.Open Lefichier
    ActiveSheet.Rows(1).EntireRow.Delete
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Chemin & nom
    Application.DisplayAlerts = True
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Close
    End If
    End Sub

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Re

    Mets temporairement la ligne displayalert=false en commentaire afin de voir ton problème : soit dossier incorrect, soit fichier date ouvert, ...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Ca fonctionne avec le displayalert=false en commentaire

  12. #12
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Re

    Soit tu as changé quelque chose, soit tu as à répondre à une question : cette ligne sert juste à éviter de confirmer qu'on écrase le fichier précédent.

    Si cela plantait c'est qu'il y avait un autre problème...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Bonjour Chris !

    J'espere que tu vas bien. J'ai tésté plusieurs fois le code qui fonctionne mais bug requirement sur la même ligne. Si je ferme tout et que je recommence cela fonctionne mais la répétition de la Macro finit toujours par me planter. As tu une piste ? J'ai tenté des choses mais mon problème persiste.

    Merci d'avance

  14. #14
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    Le refreshAll entre la sauvegarde et la fermeture interpelle !

    Tu travailles sur de données brutes donc à quoi cela sert ?

    Il faudrait que tu précises quel ton processus : fichiers ouverts, dans quel ordre, où est placé le code...

    Car j'ai l'impression qu'on n'est pas dans le même schéma qu'exposé au départ...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. Importer des données à partir d'un fichier excel fermé
    Par yassinefeki dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/06/2019, 10h54
  2. Importer des données à partir d'un fichier excel fermé
    Par maniveaudelaye dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/05/2014, 10h36
  3. [XL-2007] Importer des données à partir d'un fichier excel
    Par aminee1666 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2011, 19h05
  4. Récupérer des données à partir d'un fichier EXCEL
    Par cati_78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/04/2009, 20h21
  5. Réponses: 5
    Dernier message: 17/06/2008, 17h05

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