Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Ouverture, modification et enregistrement

  • Initiateur de la discussion Initiateur de la discussion RALLY
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R

RALLY

Guest
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 modification par un modérateur:
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+
 
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

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
 
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
 
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
 
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
 
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
 
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
 
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:
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
 
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
 
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
 
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 ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
Réponses
1
Affichages
2 K
Fredoux
F
Réponses
8
Affichages
1 K
L
Réponses
10
Affichages
1 K
L
M
Réponses
3
Affichages
2 K
M
M
Réponses
3
Affichages
781
Manolo59330
M
E
Réponses
0
Affichages
699
E
N
Réponses
2
Affichages
2 K
nikoalas
N
C
Réponses
0
Affichages
2 K
clorion
C
Z
Réponses
1
Affichages
20 K
ze_mechant
Z
D
Réponses
4
Affichages
3 K
De passage
D
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…