Création d'un (plusieurs) fichier(s) texte avec des données d'un classeur
Bonjour à tous,
Tout d’abord, je n’ai pas une grande connaissance de VBA.
J’ai effectué pas mal de recherche dessus pour produire ce que je fais actuellement, mais j’aimerais le rendre plus efficace.
Je dois injecter un fichier txt au sein d’une plateforme. Ce fichier txt doit contenir trois données (une donnée par ligne). Exemple du contenu du fichier texte (voir pj):
Fichier de base:
- Un classeur Excel avec des données reparties par bloc (plage de cellule). Ex : B5 :C7
Objectif :
- Créer un fichier txt avec les données d’une partie du bloc : Ex : C5 :C7
- Si il y a des données dans plusieurs bloc, faire plusieurs fichiers txt
- Si un bloc ne possède pas de valeur, alors je ne fais rien.
- Récupérer le nom du bloc pour le nom du fichier txt
Actuellement :
- Modification du contenu de la colonne CSU pour correspondre à la syntaxe attendu par la plateforme
- Forcer la suppression des nouvelles feuilles crées
- J’arrive à convertir mon classeur en fichier txt
- J’arrive à récupérer les données d’un bloc et à les écrire dans mon fichier txt
- J’arrive à récupérer le nom du bloc et à sauvegarder mon fichier txt avec le nom du bloc
- Le fichier txt est sauvegardé dans le même dossier que le classeur
- Ruban désactivé
- Taille du classeur prédéfini
Ce que je n’arrive pas :
- Si il y a des données dans plusieurs bloc, faire plusieurs fichiers txt
- Si il y a plusieurs fichiers txt à produire, récupérer le bon nom pour chacun des fichiers txt
- Si un bloc ne possède pas de valeur, alors je ne fais rien.
- Activer l’enregistrement sous pour que les utilisateurs choisissent le dossier de leur choix (actuellement, j’utilise le dossier ou se trouve mon classeur). Proposer une seul fois
- Supprimer le dernier saut de ligne du fichier txt
J’ai commenté mon code un maximum pour que je puisse bien comprendre les étapes que je fais donc dans l’absolu, si vous pouviez commenter le code pour que je comprenne, ça serait cool.
Aussi, j’ai incrémenté les éléments d’une certaines manière, mais je ne sais pas si c’est réellement la manière de faire. A partir du moment où cela fonctionnait, j’étais heureux
En espérant avoir été clair.
Merci par avance pour votre aide.
bonjour,
une proposition
Sub ExporTxt()
'Déclaration des variables qui sera utilisée pour écrire dans le fichier
Dim FileN As String, i As Long, ctr As Long, repertoire As String
With Worksheets("JDD")
'------------MODIFICATION DES CSU RECUPERER SUR SOAPUI------------
'Remplace la cellule qui commence par CSU09 par 09 dans la plage A1:G32
.Range("A1:G32").Replace What:="csu09", Replacement:="09;", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
' choix du répertoire de destination
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Sélection du répertoire"
If .Show = -1 Then ' if OK is pressed
repertoire = .SelectedItems(1)
Else
MsgBox "pas de répertoire sélectionné"
Exit Sub
End If
End With
'création des fichiers texte
For i = 4 To 29 Step 5 ' on parcourt les lignes par bloc de 5
For j = 2 To 6 Step 4 ' on parcourt les colonnes par bloc de 4
If .Cells(i + 1, j + 1) = "" Then Exit For 'pas de données on sort
FileN = repertoire & "\" & .Cells(i, j) & .Cells(i, j + 1) & ".txt" 'nom du fichier
Open FileN For Output As #1
For d = 1 To 3
Print #1, .Cells(i + d, j + 1) 'écriture des données dans le fichier
Next d
Close #1
MsgBox "fichier " & FileN & " créé"
Next j
Next i
End With
' les lignes qui suivent n'ont rien à voir la création des fichiers
'------------SUPPRESSIONS DES FEUILLES DU CLASSEUR NON NECESSAIRE------------
'Chaque tour de boucle, on efface chaque fois une feuille du classeur et Sheets.Count devient chaque fois plus petit.
'Au bout d'un moment, VBA ne trouve plus les feuilles. C'est pour eviter que les créations de feuilles reste dans le classeur.
For ctr = Sheets.Count To 1 Step -1
If Sheets(ctr).Name <> .Name Then
Sheets(ctr).Delete
End If
Next
End Sub
Merci h2so4.
Au top ! Cela fonctionne parfaitement.
Dernière petite chose, h2so4.
Au niveau " MsgBox "fichier " & FileN & " créé" "
Est-ce possible d'avoir dans une seule et même MsgBox les nom des fichiers qui ont été crée ?
Exemple :
Vos fichiers
Ciblage_AJOUT_AZER.txt
Ciblage_RESIL_AZER.txt
Ciblage_AJOUT_TYUI.txt
Ciblage_AJOUT_WXCV.txt
Ciblage_RESIL_WXCV.txt
sont crées
Ainsi ça pourrait être utile pour éviter de cliqué plusieurs fois sur ok.
Merci d'avance pour ton aide.
Je te redonne ton code :
'création des fichiers texte
For i = 4 To 29 Step 5 ' on parcourt les lignes par bloc de 5
For j = 2 To 6 Step 4 ' on parcourt les colonnes par bloc de 4
If .Cells(i + 1, j + 1) = "" Then Exit For 'pas de données on sort
FileN = repertoire & "\" & .Cells(i, j) & .Cells(i, j + 1) & ".txt" 'nom du fichier
Open FileN For Output As #1
For d = 1 To 3
Print #1, .Cells(i + d, j + 1) 'écriture des données dans le fichier
Next d
Close #1
MsgBox "fichier " & FileN & " créé"
Next j
Next i
End With
bonsoir,
'création des fichiers texte
For i = 4 To 29 Step 5 ' on parcourt les lignes par bloc de 5
For j = 2 To 6 Step 4 ' on parcourt les colonnes par bloc de 4
If .Cells(i + 1, j + 1) = "" Then Exit For 'pas de données on sort
FileN = repertoire & "\" & .Cells(i, j) & .Cells(i, j + 1) & ".txt" 'nom du fichier
Open FileN For Output As #1
For d = 1 To 3
Print #1, .Cells(i + d, j + 1) 'écriture des données dans le fichier
Next d
Close #1
FileNs = FileNs & vbCrLf & FileN
Next j
Next i
MsgBox "fichiers " & FileNs & vbCrLf & " créés"
End With