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 :

Code VBA excel conversion d'un répértoire txt en plusieurs tableaux xls et leurs sauvegardes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Par défaut Code VBA excel conversion d'un répértoire txt en plusieurs tableaux xls et leurs sauvegardes
    Bonjour,

    Cette discussion est très intéressante. Merci pour vos contributions !
    Une petite question : si le séparateur du .txt est un espace et non une virgule, je suppose qu'il faut modifier la ligne "separateur = Chr(9)".
    J'ai donc indiqué "Chr(32)". Le problème étant que le nombre d'espace est de 2, et dans un certain cas plusieurs espaces. Sachant qu'il n'y a pas de cellules vides.
    Comment indiquer que le séparateur est d'un espace ou plus ?

    Merci par avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il se peut que ton fichier ait des champs à longueur fixes.
    Ex: le 1er champ comporte un maximum de 10 caractères et il est écrit "Allô"
    Il y aura donc 6 espaces vides pour compléter.
    Et le 2e commencera après, au 11e caractère.

    Si c'est ton cas, il faudrait que tu trouves le "pattern" et ensuite ouvrir ton ou tes fichiers en Random après avoir créer un Type d'enregistrement.

    Pas certain que mon explication soit claire...

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    salut
    je vois que l'on parle de pattern j' en conclu donc qu'il y a utilisation des expressions régulière (régula expression)

    perso je vois ca simplement en 2 étape
    étape 1

    1. patern"[( ){?}
    2. exécution de la fonction "replace "



    étape 2

    1. puis ouverture avec exel
    2. texttocolumn avec pour séparateur les espaces
    3. sauve en xls ou xlsm a partir de 2007 si souhaité



    le tout dans une boucle sur dir(chemin du dossier )
    des exemples ont déjà été produit dans le forum
    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    je dirais même mieux le transformer directement en CSV puis enregistrer en xl...

    voila une fonction qui transforme un teste en format csv d'un seul coup
    comme tu peux le constater les espaces sont irrégulier dans le texte parfois 1 ,parfois 2, parfois 3 ,etc....
    a toi d'adapter la fonction en récupérant le texte du fichier avec open for output par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     Dim txt As String, Txt2 As String
        txt = "robert     toto   titi tete" & vbCrLf & "henry  toto riri fifi       loulou"
        MsgBox transform_txt_to_XL(txt)
    End Sub
    Function transform_txt_to_XL(txt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(\ + )": texte = .Replace(txt, " "): End With
    transform_txt_to_XL = Replace(texte, " ", ";")
    End Function
    j'ai tout dis
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Salut Patrick,

    Tant qu'on ne saura pas d'où provient son fichier (ou encore le voir en partie), on ne peut le dire avec certitude.
    Les espaces pourraient aussi prendre la place d'un champ vide

    ex:

    champ1...champ2...champ3
    champ1.................champ3

    Si les 3 champs doivent être dans leurs colonnes respectives, il faut déterminer la longueur de chacun de ceux-ci auparavant...
    On peut alors les lire caractère par caractère ou utiliser Random comme mode d'ouverture avec un Type d'enregistrement (selon ce que j'appelle le "pattern").

    C'est du moins comment je conçois le problème...

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Re
    Re salut parmi
    Ben en fait j ai repondu selon la demande qui etait claire
    Apres effectivement si certains espaces doivent etre un
    Champ alors il lui sera impossible d automatiser cela car une chose est sur :,''exel ou vba ne devine pas''

    de la même Maniere si un champs. Contient plusieurs chaines séparé par un espace:la encore excel ne devine pas

    Au mieux on peut determiner le nombre d espace minimum ou maximum qui separe les champs on pourra jamais faire mieux
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/12/2011, 15h51
  2. Code VBA après conversion 2003->97
    Par madchemiker dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/05/2007, 16h15
  3. [VBA EXCEL] export vers un fihcier txt
    Par jarod_bx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2006, 20h27
  4. [VBA Excel] conversion d'une chaine en numérique
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/12/2005, 17h56
  5. [VBA][EXCEL]Conversion d'une chaine en single
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/11/2005, 17h28

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