Ouverture, modification et enregistrement

RALLY

XLDnaute Nouveau
Bonjour a tous,

Etant novice dans le domaine des macro, je sollicite votre aide afin de pouvoir effecture des modifications sur plusieurs fichiers.

Mon problème: J'ai un volume considerable de fichiers au format .xyz que je peux ouvrir avec Excel ou Bloc-note, comportant 4 colonnes, séparées par un espace. Toutefois la colonne A dans chaque fichier ne me sert pas. De plus cette colonne me pose problème lors de l'import de ces fichiers dans un logiciel de traitement.

Mon but: Mettre en place une macro, qui me permettra
1 - d'ouvrir les fichiers les uns après les autres avec excel 2007, convertir avec largeur délimité "espace"
2- de supprimer la colonne "A"
3- d'enregistrer le fichier obtenu en .xyz dans un autre repertoire pour ne pas ecraser les fichiers source.

Tous ces fichiers (1900) sont contenus dan un même repertoire. Le but est de pouvoir lancer la conversion, modification et enregistrement en batch, sans avoir besoins d'ouvrir chaque fichier un par un.

En vous remerciant par avance pour votre aide
 
Dernière édition:

Fred0o

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Bonjour RALLY et bienvenue sur le forum

Sans fichier exemple, difficile de viser juste. Cependant, essaie ce code que mon pote Henri (GistreurDeMacros) ma donné. Cela devrait fonctionner pour un fichier, à toi ensuite de créer la boucle adéquate et d'adapter le nom des fichiers ainsi que le chemin.
VB:
Sub Import()
    Workbooks.OpenText Filename:="C:\temp\test.txt", Origin:=xlMSDOS, StartRow _
        :=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:=False _
        , Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array _
        (3, 1), Array(4, 1)), TrailingMinusNumbers:=True
    ActiveWorkbook.SaveAs Filename:="C:\temp\test.xls", FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
End Sub

A+
 

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Effectivement avec un exemple c'est plus parlant.

Toutefois le fichier doit imperativement être enregistré avec l'extension .xyz.

Je sais que cela est possible avec une macro mais perso je ne m'y connais pas dutout. C'est pour cela que je vous demande de l'aide.

merci
 

Pièces jointes

  • Test.xlsx
    162.3 KB · Affichages: 60
  • Test.xlsx
    162.3 KB · Affichages: 71
  • Test.xlsx
    162.3 KB · Affichages: 75

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Je ne sais pas si cela est possible sans lancer excel(??!!)).

Mais pour le traitement sur un fichier, j'ai du adopter le passage par excel, au moins pour convertir les données at voir apparaitre les colonnes. Ensuite j'ai supprimé la première colonne et j'ai enregistré de nouveau.

Maintenant si vous connaissez un moyen différent de le faire sur tous les fichiers, je suis preneur.
Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Re,

En macro :

Code:
Sub test()
Dim DossSource as String, DossDest as String, NomFic as String, FSO, Fic, Fic2, Ligne as String
    DossSource = "C:\temp\aaa\"
    DossDest = "C:\temp\bbb\"
    NomFic = Dir(DossSource & "*.xyz")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Do Until NomFic = ""
        Set Fic = FSO.OpenTextFile(DossSource & NomFic, 1, False, -2)
        Set Fic2 = FSO.CreateTextFile(DossDest & NomFic, True)
        Do Until Fic.AtEndOfStream
            Ligne = Fic.ReadLine
            Fic2.WriteLine Right(Ligne, Len(Ligne) - InStr(1, Ligne, " "))
        Loop
        Fic.Close
        Fic2.Close
        NomFic = Dir
    Loop
    Set Fic = Nothing
    Set Fic2 = Nothing
    Set FSO = Nothing
End Sub

Et oui, on peut l'envisager en VBScript (sans Excel), je ne sais pas si c'est ce que tu veux
 

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Re,

Merci pour votre réponse, mais pourriez vous m'expliquer un peu plus le fonctionnement.
Je ne suis vraiement pas habitué aux scriptes informatiques.

Comment puis-je lancer ce scripte?
Est-ce qu'il prend en compte tous les fichiers contenus dans le dossier?
La première colonne du fichier source est-elle bien supprimée?

merci
 

tototiti2008

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Re,

Merci pour votre réponse, mais pourriez vous m'expliquer un peu plus le fonctionnement.
Je ne suis vraiement pas habitué aux scriptes informatiques.

Le code VBA proposé est à coller dans un module d'un classeur Excel
Dans Excel, Alt+F11
Dans Visual Basic Editor qui est apparu, Menu Insertion - Module
Coller le code proposé

Les variables DossSource et DossDest doivent contenir le chemin des 2 dossiers source et destination, avec un "\" à la fin

Pour exécuter le code, Alt+F8 et choisir la macro test
Exécuter

Est-ce qu'il prend en compte tous les fichiers contenus dans le dossier?
La première colonne du fichier source est-elle bien supprimée?

Oui et Oui
 

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Je viens d'essayer le scrip en changeant les chemins d'accès vers mon dossier source et mon dossier destination.

J'ai l'erreur suivante:

Script C:\.......\Conversion .vbs
Ligne:2
Caract: 16
Erreur: Fin d'instruction attendue
Code: 800A0401
source: Erreur de compilation Microsoft VBScript

Pourriez vous m'aider a déchiffrer?

Merci
 

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Génial,

Vraiement, un grand grand merci. Je viens de suivre votre procédure et cela a l'air de fonctionner. Je récupère bien mes fichiers test dans le dossier spécifié, sans la colonne A.

Sur les 1900 fichiers a traiter, pensez vous qu'il y a moyen de les concatener en des fichiers plus gros, toujours en utilisant le principe d'un scripte? Par exemple 15 a 20 fichiers

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Re,

Oui, la version proposée ne tourne pas telle qu'elle en VBS, c'est du VBA

Pour du VBS, ça pourrait donner ça (à coller dans un fichier texte, changer l'extension en .vbs)

Code:
Dim DossSource, DossDest, NomFic, FSO, Fic, Fic2, Ligne, Doss, F
    DossSource = "C:\temp\aaa\"
    DossDest = "C:\temp\bbb\"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Doss = FSO.GetFolder(DossSource)
    For Each F In Doss.Files
    If LCase(Right(F.Name, 4)) = ".xyz" Then
            Set Fic = FSO.OpenTextFile(DossSource & F.Name, 1, False, -2)
            Set Fic2 = FSO.CreateTextFile(DossDest & F.Name, True)
            Do Until Fic.AtEndOfStream
                Ligne = Fic.ReadLine
                Fic2.WriteLine Right(Ligne, Len(Ligne) - InStr(1, Ligne, " "))
            Loop
            Fic.Close
            Fic2.Close
    End If
    Next
    Set Fic = Nothing
    Set Fic2 = Nothing
    Set FSO = Nothing
Sur les 1900 fichiers a traiter, pensez vous qu'il y a moyen de les concatener en des fichiers plus gros
dans quel ordre ?
Edit : Et sous quel nom de fichier ?
Sur le principe on peut mettre le contenu de 20 fichiers dans un seul sans soucis
 
Dernière édition:

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Les fichiers ont été découpés selon la notation suivante:

aa_bb_04225_cc_dd.xyz
aa_bb_04230_cc_dd.xyz

avec le chiffre entre le b et le c qui change de façon croissante mais pas constante.
(pour faire simple!!)

Le fichier de sortie peut être de la forme : Fichier1, fichier2...fichier20 etc. Chaque fichier doit regrouper les contenues des 95 fichiers par ordre croissant si on prend
(1900/20)
Et ainsi de suite pour fichier2, fichier3 etc.

Si cela n'est pas possible, je ferais le regroupement des 95 fichiers a la mano dans 20 dossiers différents. Puis selon le code que vous m'enverrai, je l'appliquerai dans chaque dossier. Ce sera toujours mieux que de traiter 1900 fichier un a un.

merci
 

tototiti2008

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Re,

Voilà la version VBA adpatée à tester

Code:
Sub ConvXYZ()
Dim DossSource As String, DossDest As String, NomFic As String, FSO, Fic, Fic2, Ligne As String
Dim Tablo() As String, i As Long, j As Long
    DossSource = "C:\temp\aaa\"
    DossDest = "C:\temp\bbb\"
    ReDim Tablo(1 To 1)
    NomFic = Dir(DossSource & "*.xyz")
    Do Until NomFic = ""
        Tablo(UBound(Tablo)) = NomFic
        NomFic = Dir
        ReDim Preserve Tablo(1 To UBound(Tablo) + 1)
    Loop
    If UBound(Tablo) > 1 Then ReDim Preserve Tablo(1 To UBound(Tablo) - 1)
    Call tri(Tablo, 1, UBound(Tablo))
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For i = LBound(Tablo) To UBound(Tablo)
        j = i Mod 95
        Set Fic = FSO.OpenTextFile(DossSource & Tablo(i), 1, False, -2)
        If j = 1 Then Set Fic2 = FSO.CreateTextFile(DossDest & "Fichier" & Format((i \ 95) + 1, "00") & ".xyz", True)
        Do Until Fic.AtEndOfStream
            Ligne = Fic.ReadLine
            Fic2.WriteLine Right(Ligne, Len(Ligne) - InStr(1, Ligne, " "))
        Loop
        Fic.Close
        If j = 0 Or i = UBound(Tablo) Then Fic2.Close
    Next i
    Set Fic = Nothing
    Set Fic2 = Nothing
    Set FSO = Nothing
End Sub

Sub tri(a, gauc, droi) ' Quick sort JB http://boisgontierjacques.free.fr/
   ref = a((gauc + droi) \ 2)
   g = gauc: d = droi
   Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call tri(a, g, droi)
   If gauc < d Then Call tri(a, gauc, d)
End Sub
 

RALLY

XLDnaute Nouveau
Re : Ouverture, modification et enregistrement

Merci encore une fois pour votre reponse. Si je comprends bien, le script regroupe les fichiers du dossier par multiple de 95, afin qu'a la sortie on se retrouve a 20fichiers.

Si dans le dernier dossier, il n'y a que 80 fichiers, est-ce-que le script fonctionnera ou y aura-t-il erreur de compil a cause du multiple de 95?

Pouvez vous me dire l'enchainement du code pour fusion?

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Ouverture, modification et enregistrement

Re,

Si dans le dernier dossier, il n'y a que 80 fichiers, est-ce-que le script fonctionnera ou y aura-t-il erreur de compil a cause du multiple de 95

Tout est dans le même dossier... tu veux dire dans le même groupe ?
Enfin de toutes façons, ça ne plante pas si le nombre de fichiers n'est pas un multiple de 95, le dernier fichier généré sera la compilation des (par exemple) 80 derniers fichiers

Pouvez vous me dire l'enchainement du code pour fusion?

Je n'ai pas compris
Tu veux une explication du code ?
 

Discussions similaires

Réponses
8
Affichages
682

Statistiques des forums

Discussions
312 497
Messages
2 088 995
Membres
104 001
dernier inscrit
dessinbecm