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 :

Automatisation d'exportation en fichier texte d'une partie d'un fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut Automatisation d'exportation en fichier texte d'une partie d'un fichier
    Bonjour,

    je voudrais automatiser un certain nombre d'actions relatives à plusieurs fichiers Excel dont le comportement doit être identique.

    Je pars d'un fichier contenu dans le dossier lib.nom1 et qui s'appelle nom1.xls.

    J'ai actuellement 2 problèmes principaux que je n'arrive pas à résoudre :
    1) Je voudrais pouvoir spécifier une sorte de suffixe fixé au départ (par exempel dans une variable texte nomVariante) à tous mes fichiers de sortie, de sorte que le fichier nom2 ouvert par mes soins puisse être enregistré comme nom2_nomVariante, et ainsi de suite pour d'autres fichiers du même genre.
    2) J'aimerais ne pas avoir les boîtes de dialogue me demandant s'il faut enregistrer les modifications au fichier txt créé.

    Voilà 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    'Sélection de la feuille à exporter en fichier texte puis exportation
        Sheets("lib.nom1").Select
        ActiveWorkbook.SaveAs Filename:= _
            "D:\Données\lib.nom1\fichier1_nomVariante.txt" _
            , FileFormat:=xlText, CreateBackup:=False
     
     
    ' *****************************************
    ' ********* Ouverture du 2ème fichier ************
    ' *****************************************
        ChDir _
            "D:\Données\lib.nom2"
        Workbooks.Open Filename:= _
            "D:\Données\lib.nom2\avpf.xls" _
            , UpdateLinks:=3
    ' Sauvegarde
        ActiveWorkbook.Save
    ' Exportation du fichier texte
        Sheets("lib.nom2").Select
        ActiveWorkbook.SaveAs Filename:= _
            "D:\Données\lib.nom2\nom2_nomVariante.txt" _
            , FileFormat:=xlText, CreateBackup:=False
    ' Fermeture du fichier sans sauvegarde
        ActiveWindow.Close
    ' Ouverture du fichier texte pour changer les virgules en points
        ChDir _
            "D:\Données\lib.nom2"
        Workbooks.OpenText Filename:= _
            "D:\Données\lib.nom2\nom2_nomVariante.txt" _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True _
            , Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1) _
            , Array(2, 1))
        Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False
        ActiveWorkbook.Save
        'As Filename:= _
            "D:\Données\lib.nom2\nom2_nomVariante.txt" _
            , FileFormat:=xlText, CreateBackup:=False
    ' Fermeture du fichier texte
        ActiveWindow.Close
    Si quelqu'un a une idée pour m'aider à avancer sur un de ces points, il sera le bienvenu !
    Merci d'avance,

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 88
    Par défaut
    les noms de tes feuilles et fichiers sont indiqués entre guillemets :
    "lib.nom1"
    "D:\Données\lib.nom1\fichier1_nomVariante.txt"

    Excel comprend que ce sont des chaines de caractères invariables. et non des variables : il ne remplacera pas par la valeur de NomVariante

    je te propose quelques corrections : à adapter à tes besoins

    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
    35
    36
    37
     
    Dim Nom1, Path1, Nom2, Path2, NomVariante, NomAUtiliser as string
     
    ' ************************************************
    ' * 1er fichier est supposé ouvert, actif (au premier plan)*
    ' ************************************************
    Nom1 = ActiveWorkbook.name ' recuperer le nom du fichier 1
    nom1 = left (Nom1, len (Nom1)-4) ' enleve l'extension
    path1 = "D:\Données\lib.nom1\" 'c'est un texte fixe
     
    'Sélection de la feuille à exporter en fichier texte
    Sheets("lib.nom1").Select ' c'est un nom fixe = ne selectionnera que la feuille appelée "lib.nom1"
    'si tu as besoin ca peut etre remplacé par la valeur d'une variable
    ' puis exportation
    NomAUtiliser = path1 & Nom1 & "_" & NomVariante & ".txt"
    ActiveWorkbook.SaveAs Filename:= NomAUtiliser, FileFormat:=xlText, CreateBackup:=False
     
    ' *****************************************
    ' ********* Ouverture du 2ème fichier ************
    ' *****************************************
     
    Workbooks.Open Filename:="D:\Données\lib.nom2\avpf.xls", UpdateLinks:=3
    ' Sauvegarde
    ActiveWorkbook.Save
     
    ' Exportation du fichier texte
    Sheets("lib.nom2").Select 'meme remarque
     
    Nom2 = ActiveWorkbook.name ' recuperer le nom du fichier 2
    nom2 = left (Nom2, len (Nom2)-4) ' enleve l'extension
    path2 = "D:\Données\lib.nom2\" 'c'est un texte fixe
     
    NomAUtiliser = path2 & Nom2 & "_" & NomVariante & ".txt"
    ActiveWorkbook.SaveAs Filename:= NomAUtiliser, FileFormat:=xlText, CreateBackup:=False
     
    ' Fermeture du fichier sans sauvegarde
    ActiveWindow.Close
    pour ce qui est de changer les virgules en points, je suppose que cela concerne les données numériques que tu veux mettre en format US. il est possible de paramétrer directement ca dans les options régionales de Windows, avant de lancer ta macro. Sinon ton option de rechercher/remplacer est possible, mais en utilisant le bon nom de fichier (celui indiqué par NomAUtiliser).

    tiens nous au courant

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Bonjour et merci pour cette réponse !
    Je ne voyais pas comment introduire les variables pour les noms, ça m'a bien éclairé.

    J'ai rajouté un petit bout de code pour permettre à un utilisateur de choisir l'extension pour le nom de variante, ainsi que le chemin d'accès au dossier.
    J'ai trouvé l'option permettant d'éviter la boîte Excel qui demande s'il faut enregistrer ou non. Il suffit de rajouter SaveChanges:=False après la commande ActiveWindow.Close

    Voilà ce que ça donne :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    ' Déclaration des variables
        Dim Nom1, Path1, Nom2, Path2, PathGen, Lib As String
        Dim NomVariante, NomOuverture, NomAUtiliser As String
     
     
    ' Nom variante choisi par l'utilisateur
    NomVariante = InputBox$("Choisissez le nom de la variante", "Choix du nom de la variante", "_LT_")
     
    ' Déclaration des variables "fixes" pour les dossiers
    PathGen = InputBox$("Choisissez le dossier où sont contenus les données", "Choix du dossier", "D:\Données\")
    'PathGen = "D:\Données\" 'Texte fixe
    Lib = "maLib"
     
    ' ******************************************************
    ' * 1er fichier supposé ouvert, actif (au premier plan)*
    ' ******************************************************
    Nom1 = ActiveWorkbook.Name ' recupere le nom du fichier 1
    Nom1 = Left(Nom1, Len(Nom1) - 4) ' enleve l'extension
    Path1 = PathGen & Lib & "." & Nom1 & "\"
     
    ' Sélection de la feuille à exporter en fichier texte puis exportation
        Sheets("maLib.nom1").Select
        NomAUtiliser = Path1 & Nom1 & NomVariante & ".txt"
        ActiveWorkbook.SaveAs Filename:=NomAUtiliser, FileFormat:=xlText, CreateBackup:=False
     
     
    ' *****************************************
    ' ******* Ouverture du fichier 2 *******
    ' *****************************************
     
    ' Déclaration des noms des fichiers à traiter
        Nom2 = "nom2"
        Path2 = PathGen & Lib & "." & Nom2 & "\"
     
        NomOuverture = Path2 & Nom2 & ".xls"
        NomAUtiliser = Path2 & Nom2 & NomVariante & ".txt"
     
        ChDir Path2
        Workbooks.Open Filename:=NomOuverture, UpdateLinks:=3
    ' Sauvegarde
        ActiveWorkbook.Save
    ' Exportation du fichier texte
        Sheets("maLib.nom2").Select
        ActiveWorkbook.SaveAs Filename:=NomAUtiliser, FileFormat:=xlText, CreateBackup:=False
    ' Fermeture du fichier sans sauvegarde
        ActiveWindow.Close SaveChanges:=False
    ' Ouverture du fichier texte pour changer les virgules en points
        ChDir Path2
        Workbooks.OpenText Filename:=NomAUtiliser, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True _
            , Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1) _
            , Array(2, 1))
        Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False
        ActiveWorkbook.Save
    ' Fermeture du fichier texte
        ActiveWindow.Close SaveChanges:=False
     
    ' Message avant fermeture
        MsgBox ("Fichiers textes créés, vérifiez les avant de les exporter")
        ActiveWindow.Close SaveChanges:=False
    Ca marche bien comme ça

    Cependant pour être encore plus rigoureux, je pourrais changer le nom des feuilles en mettant des variables puisque j'ai à chaque fois le nom de ma lib et le nom du fichier.

    Enfin en ce qui concerne mon changement de virgules en points, j'ai fait ça car les fichiers texte sont destinés à être exportés sous un logiciel nécessitant des points et non des virgules comme séparateur, mais autrement, je préfère garder mon option régionale avec les virgules.

    Merci encore pour l'aide apportée !

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    J'ai essayé de créer une variable texte comme par exemple
    texte2 = Lib.nom2
    puis de faire Sheets(texte2).Select
    mais ça ne marche pas... comment faire pour rentrer une variable en paramètre pour un onglet ?
    Merci, mon programme commence à ressembler à quelque chose

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Alqualonde,

    si Lib.nom2 est le nom qui doit être donné il faut mettre :

    si vous avez pusieurs feuilles à traiter et que "nom2" doit pouvoir devenir "nom3" etc. il faut passer par une variable qui s'incrément de 1 dans une boucle (exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    num = 1
     
    For i = x to z 'x et z étant des valeurs
     
    texte2 = "Lib.nom" & CStr(num)
    .....
    .....
    num = num + 1
    next i

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Bonjour Jacque_Jean et merci pour cette réponse.
    Toutefois, je ne comprends pas une chose : si je mets texte2 = "Lib.nom2", VBA va-t-il interpréter ma variable Lib en maLib à l'intérieur des guillemets ? (j'ai défini auparavant une variable Lib telle que Lib="maLib")

    En fait je n'ai peut-être pas été très clair sur ce que je voulais faire :

    Admettons que mon fichier Excel comprenne un onglet appelé Toto.Chien
    Je définis les variables suivantes :
    Lib = "Toto"
    Nom2 = "Chien"

    Et je voudrais ensuite sélectionner mon onglet en faisant Sheets(Lib &.& Chien).select mais ça ne semble pas marcher...

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

Discussions similaires

  1. Remplacer une ligne d'un fichier texte par une autre
    Par devalender dans le forum WinDev
    Réponses: 12
    Dernier message: 24/07/2007, 19h51
  2. Insérer une ligne d'un fichier texte dans une table
    Par Atemi76 dans le forum Administration
    Réponses: 1
    Dernier message: 10/07/2007, 17h32
  3. extraire une partie d'un fichier texte
    Par Mydriaze dans le forum Langage
    Réponses: 5
    Dernier message: 15/06/2007, 12h46
  4. Réponses: 4
    Dernier message: 24/11/2006, 17h03
  5. [VB]recherche dans une partie d'un fichier texte
    Par malhivertman1 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/01/2006, 11h56

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