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 :

Comment copier les données d'un fichier en lecture


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment copier les données d'un fichier en lecture
    J'ai créé une macro dans un fichier excel (appelé résultat.xls)
    Avant de démarrer la macro dans "résultat.xls", il faut récupérer les données sortant d'une application industrielle au format excel. Ces données dont dans un fichier en lecture.
    Le nom de ce fichier n'est jamais le même, mais suit la règle suivante: code alphanumérique à 6 chiffres_XAQ_code numérique à 8 chiffres
    (exemple:ABC123_XAQ_00011008--> contient toujours les 3 mêmes lettres XAQ)
    Aujourd'hui je copie manuellement les données du fichier *XAQ* en lecture vers mon fichier "résultat.xls".
    Je souhaite copier les données de ce fichier *XAQ* en lecture via une macro vers mon fichier "résultat.xls", en évitant si possible une étape intermédiaire: l'enregistrement du fichier *XAQ*.
    En effet, le fichier *XAQ* est généré par différents utilisateurs et je crains que tous ne l'enregistrent pas sous le même nom.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu!!
    bonjour



    ca risque d'etre dur si le fichier est enregistré différement par plusieurs utilisateurs tu risque de te retrouver avec plusieurs fichiers
    donc difficile de savoir le bon


    il faudrait dabors que l'enregistrement soit toujour identique meme par des utilisateur differents

    apres le reste serai facile


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 121
    Points
    121
    Par défaut
    Bonjour isa77, Bonjour patricktoulon,

    Ou alors il faut savoir comment déterminer à coup sûr par la macro le nom du fichier à traiter. S'agit-il du seul fichier *XAQ* dans un dossier particulier ?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    rebonjour


    oui il y a des solution pour ca aussi


    par les api on pourais acceder au propriété des fichiers et ne choisir que celui qui a la plus recente mise a jour


    mais enfin la on specule .je n'ai pas encore vu le code originale

    donc on va atendre le code qui enregistre le fichier en question
    en partant de la on poura faire le chemin en arriere

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour les réponses.
    En fait je n'ai pas encore écrit le code pour enregistrer et pour copier les donnés vers mon fichier "résultat.xls".
    Il faudrait donc que je crée une macro pour enregistrer le fichier toujours au même endroit et avec le même nom.
    L'idéal, c'est d'enregistrer le fichier dans "mes documents". Le souci que je rencontre c'est que le chemin vers mes documents dépend de l'Id de l'utilisateur et a la structure:

    C:\Documents and Settings\abc123\Mes documents

    où l'Id de l'utilisateur = abc123
    peut-on remplacer cet id par un code générique: exemple * ?

    Ensuite effectivement, cela est plus simple.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    il serait temp de t y metre

    voila un exemple qui enregistre la feuille 1 dans un autre classeur qui s'appelera toto.xls dans les document de l'utilisateur de la session


    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
     
     
    Sub enregistrer_sous()
    Dim chemin As String
    Application.DisplayAlerts = False 'pour ne pas avoir a repondre oui
    Sheets("Feuil1").Copy'ici on copie la feuille
    'l'expression ""application.username"" donne le nom de l'utilisateur actuel
    'donc le chemin complet donnera ca
    chemin = "C:\Users\" & Application.UserName & "\Mes Documents\toto.xls"
     
    '"maintenant on enregistre sous"
     ActiveWorkbook.SaveAs Filename:=chemin, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
        ActiveWindow.Close' ici le classeur est fermer apres avoir été enregistré
    'donc le classeur d'origine reviens 
    End Sub

    voila qui te donne un bon debut


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Patrick ce que tu proposes ne pourra pas fonctionner parce que là tu copies la feuille du classeur qui contient la macro et non du classeur créé par l'application industrielle qui lui ne pourra pas contenir la macro.

    Isa quelques questions :
    • ce classeur "...XAQ..." créé par l'appli est-il ouvert ou est-il enregistré quelque part ?
    • s'il est ouvert, il est ouvert dans la même instance excel que le classeur "résultat" ?
    • tu veux copier les données les unes à la suite des autres dans le classeur "résultat" ou à chaque fois sur une nouvelle feuille ?
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour fring

    j'ignorais qu'il y avais des macros dans le sheets(1)

    et meme si c'est le cas dans la faq il y a une macro qui suprimme touts les modules et macro d'un fichier qui fonctionne tres bien

    donc apres avoir copier dans un nouveau classeur suprimer les macro dans le "active workbook"

    et enregistrer je ne vois pas ou est le probleme


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Patrick...
    Qui a dit que la feuille 1 contenait des macros ?
    Ensuite que vient faire ici la macro pour supprimer les modules ?

    Tu n'as visiblement pas compris ma remarque. Relis la question initiale d'Isa et ensuite répond à ces deux questions : ta macro "enregistrer_sous" se trouve dans quel classeur et enregistre la feuille "Feuil1" de quel classeur ?
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonjour fring et le forum


    oui je sais c'etait juste un exemple

    bon reprenons du debut


    en premier tu prend des données dans un application externe et tu les retranscris dans un classeur nommé "truc_xaq_machinchose"
    ton soucis c'est que ce fichier est genérer par plusieur utilisateurs
    donc la le premier probleme c'est qu'il va faloir faire une macro identique pour tous

    ensuite tu recupere ces données pour les retranscrire une nouvelle fois mais dans un fichier "resultat.xls" pour ca la base est simple
    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
     
      Sub recupere_pour_le_resultat()
    Dim nom1, nom2, chemin, titre As String
    chemin = "C:\Users\patrick\Desktop\"' a adapter a ton cas 
    nom1 = "resultat.xls"
    nom2 = "1256_XAQ_10112010.xls"  'ici c'est un exemple
    titre = chemin & nom2 'concatenation du nom complet 
     
        Workbooks.Open titre
        Range("A1:B13").Select 'selectionne les parties a copier
        Selection.Copy  'copie
        Windows(nom2).Close'ferme le classeur"1256_XAQ_10112010.xls" 
       [a1].Select 'selection de la premiere celule de destination
        ActiveSheet.Paste 'colle
    End Sub

    ca n'est qu'un exemple


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai avancé avec les réponses de Patrick et en les adaptant à mon cas (voir code ci-dessous).
    Grâce à la macro "enregistrer_sous", j'arrive à enregistrer le fichier sortant de l'application industrielle (fichier appelé ABC123_XAQ_00012087.xls) et à l'enregistrer dans mes documents, je peux ensuite copier dans mon fichier "résultat.xls" et faire fonctionner ma macro initiale (appelé "macro_résultat").

    Tout cela fonctionne très bien à condition de pointer sur le bon fichier avant de lancer la macro "enregistrer_sous", sinon c'est le fichier "résultat.xls" qui est enregistré sous "XAQ.xls"

    Le pb qui reste à résoudre, c'est de pointer sur le bon fichier ABC123_XAQ_00012087.xls avant de lancer la macro "enregistrer_sous".
    J'ai essayé de rendre actif ce classeur en utilisant des caractères génériques (*_XAQ_*.xls) mais cela ne fonctionne pas et je ne sais pas comment faire.
    Peut-on utiliser des caractère génériques pour sélectionner un fichier?



    Ce fichier en sortie d'une application industrielle se trouve à une adresse connue de l'application: "http://www.xyz/"
    le nom du fichier est composé des éléments suivants:
    ABC123 = username de l'utilisateur
    _XAQ_: on retrouve ce sigle dans tous les fichiers générés
    00012087: un n° aléatoire automatique dont je ne comprends pas la logique
    Le chemin complet du fichier est donc "http://www.xyz/ABC123_XAQ_00012087.xls"

    Réponses aux questions de Fring: ce fichier peut être ouvert par les utilisateurs en lecture (d'où ma question initiale). Il est ouvert dans ce cas dans une autre instance excel. Je veux copier toutes les données du fichier *XAQ* dans mon fichier "résultat.xls"/ sheet "Tableau XAQ".

    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
    28
    29
    30
    31
    32
    33
    34
     
    Sub enregistrer_sous()
    'proposée par PatrickToulon et adaptée à mon cas
    Dim chemin As String
     
    'pour ne pas avoir à repondre oui lorsqu'on enregistre un fichier XAQ qui existe déjà et qu'il faut remplacer
    Application.DisplayAlerts = False
     
    Windows("ABC123_XAQ_00012087.xls").Activate
     
    'l'expression "application.username" donne le nom de l'utilisateur actuel, donc le chemin complet donne:
    chemin = "C:\Documents and Settings\" & Application.username & "\Mes Documents\XAQ.xls"
     
    'enregistre le fichier en sortie de l'appli indus dans mes document avec le nom XAQ.xls"
     
     ActiveWorkbook.SaveAs Filename:=chemin, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
     
     
    ' Copie la feuille XAQ dans résultat.xls
     
     Windows("XAQ.xls").Activate
        Cells.Select
        Selection.Copy
        Windows("résultat.xls").Activate
        Sheets("Tableau XAQ").Select
        Cells.Select
        ActiveSheet.Paste
     
    'ferme le classeur XAQ apres avoir été enregistré
    Windows("XAQ.xls").Activate
    ActiveWindow.Close
     
    End Sub
    J'ai créé également un code me permettant d'ouvrir (à la place de l'utilisateur) directement dans l'appli indus le fichier recherché mais cela ne fonctionne que si je connais le nom du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ouvre_fichier()
     
        Workbooks.Open Filename:= _
          "http://www.xyz/ABC123_XAQ_00012087.xls"
        ActiveWindow.Visible = False
        Windows("ABC123_XAQ_00012087.xls").Visible = True
     
    End Sub

Discussions similaires

  1. comment copier les donnés d'une table vers un fichier exel
    Par 21247692 dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/01/2009, 14h30
  2. Réponses: 12
    Dernier message: 09/06/2008, 17h54
  3. Réponses: 1
    Dernier message: 05/12/2006, 10h40
  4. [Excel] Comment afficher les données d'un fichier Excel (PHP)
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/05/2006, 15h01
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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