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.

16ciblage-ajout-azer.txt (33.00 Octets)

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
Rechercher des sujets similaires à "creation fichier texte donnees classeur"