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 :

Création d'un (plusieurs) fichier(s) texte avec des données d'un classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2018
    Messages : 14
    Par défaut 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.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je ne suis pas contre de télécharger les fichiers postés par les demandeurs, je suis assez du genre à faire confiance même dans la vie de tous les jours mais j'ai du mal à supporter et je ne suis pas le seul, la modification de mon espace de travail donc, saches que quand tu postes un fichier, supprimes ou mets en commentaire tous ce qui peut justement faire ces modifs !

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2018
    Messages : 14
    Par défaut
    J'ai bien noté qu'il fallait que je change quelques chose, mais je ne suis pas sur d'avoir vraiment saisie quoi.
    Pour être sûr : Est-ce que ton message disait : poste ton code en plus de tes fichiers ? Cela évitera aux autres de dl mes fichiers (pour les raisons que tu as cité)

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Voici un code à tester :
    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
     
    Sub ExporTxt()
     
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim Cel As Range
        Dim Dossier As String
        Dim FileN As String
        Dim I As Integer
        Dim Chaine As String
     
        'Contient 1 feuille de calcul nommé JDD
        With Worksheets(1)
     
            'modifs des CSU récupérés sur SOAPUI
            Set Plage = .Range("C4:C7, C9:C12, C14:C17, C19:C22, C24:C27, C29:C32, G4:G7, G9:G12, G14:G17, G19:G22, G24:G27, G29:G32")
            Plage.Cells.Replace "csu09", "09;", xlPart
     
            'supressdion des feuille inutiles
                For Each Fe In worksSheets
                    If Fe.Name <> .Name Then Fe.Delete
                Next
     
            'Message pour Sauvegarde le fichier
            If MsgBox("Êtes-vous certain de vouloir créer vos JDDs ?", vbYesNo, "Demande de confirmation") = vbNo Then MsgBox ("Arret de la sauvegarde"): Exit Sub
     
            'Recupere le contenu de la cellule B4 et C4 pour créer le nom du fichier
            FileN = .Range("B4").Value & .Range("C4").Value
     
            With Application.FileDialog(4)
                If .Show = -1 Then Dossier = .SelectedItems(1)
            End With
     
            If Dossier = "" Then MsgBox ("Arret de la sauvegarde"): Exit Sub
     
            Dossier = Dossier & "\"
     
        End With
     
        Open Dossier & FileN & ".txt" For Output As #1
     
            For Each Cel In Plage
     
                I = I + 1
                Chaine = Chaine & Cel.Value & " --- " & Cel.Address(0, 0) & vbCrLf
     
                If I Mod 4 = 0 Then
     
                    Print #1, Chaine
                    Chaine = ""
     
                End If
     
            Next Cel
     
        'Ferme le fichier .txt
        Close #1
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2018
    Messages : 14
    Par défaut
    Merci pour la proposition Theze.

    Cela me crée un seul fichier txt avec tout le contenu. Il devrait en avoir 5.

    Egalement, j'ai une erreur avec cette partie : Objet requis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            'supressdion des feuille inutiles
                For Each Fe In worksSheets
                    If Fe.Name <> .Name Then Fe.Delete
                Next

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Désolé, j'ai juste survolé la demande donc, voici le code modifié :
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    Sub ExporTxt()
     
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim Cel As Range
        Dim Tbl
        Dim Dossier As String
        Dim FileN As String
        Dim I As Integer
        Dim Chaine As String
     
        'Contient 1 feuille de calcul nommé JDD
        With Worksheets(1)
     
            'modifs des CSU récupérés sur SOAPUI
            Set Plage = .Range("C4:C7, C9:C12, C14:C17, C19:C22, C24:C27, C29:C32, G4:G7, G9:G12, G14:G17, G19:G22, G24:G27, G29:G32")
            Plage.Cells.Replace "csu09", "09;", xlPart
     
            'supressdion des feuille inutiles
                For Each Fe In Worksheets
                    If Fe.Name <> .Name Then Fe.Delete
                Next
     
            'Message pour Sauvegarde le fichier
            If MsgBox("Êtes-vous certain de vouloir créer vos JDDs ?", vbYesNo, "Demande de confirmation") = vbNo Then MsgBox ("Arret de la sauvegarde"): Exit Sub
     
            'Recupere le contenu de la cellule B4 et C4 pour créer le nom du fichier
            FileN = .Range("B4").Value & .Range("C4").Value
     
            'ouvre la boite de dialogue pour le choix du dossier d'enregistrement
            With Application.FileDialog(4)
                If .Show = -1 Then Dossier = .SelectedItems(1)
            End With
     
            If Dossier = "" Then MsgBox ("Arret de la sauvegarde"): Exit Sub
     
            Dossier = Dossier & "\"
     
        End With
     
        For Each Cel In Plage
     
            I = I + 1
            'seulement si pas vide
            If Cel.Value <> "" Then Chaine = Chaine & Cel.Value & vbCrLf
     
            If I Mod 4 = 0 Then
     
                'splite dans le tableau
                Tbl = Split(Chaine, vbCrLf)
     
                'seulement si le tableau est plein
                If UBound(Tbl) = 4 Then
     
                    'récupère le titre du tableau
                    FileN = Tbl(0)
     
                    'comme plusieurs tableaux possèdent le même nom, les distingue en ajoutant I au nom
                    If Dir(Dossier & FileN & ".txt") <> "" Then FileN = FileN & I
     
                    'création du fichier
                    Open Dossier & FileN & ".txt" For Output As #1
     
                        Print #1, Chaine
                        Chaine = ""
     
                    Close #1
     
                Else
     
                    Chaine = ""
     
                End If
     
            End If
     
        Next Cel
     
    End Sub
    Egalement, j'ai une erreur avec cette partie : Objet requis
    Oui, j'ai fais une faute de frappe (2 "s" au lieu d'un dans "worksSheets" !)

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

Discussions similaires

  1. Une seule ListView pour plusieurs fichier php qui renvoie des données JSON
    Par max8392 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 22/08/2014, 10h46
  2. Fusion de plusieurs fichiers ascii (text)
    Par laroche1 dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/02/2008, 15h44
  3. Import fichier texte avec des champs variables
    Par joshua12 dans le forum Access
    Réponses: 4
    Dernier message: 26/09/2006, 09h06
  4. Réponses: 7
    Dernier message: 05/06/2006, 21h40

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