Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e)

à partir de ce fichier texte nommé test

+------------------------------------------------------------------------------+ ----> Deuxième ligne
! Date ! XXXXXXX ! XXXXXXXX ! ! ! ! ----> Troisième ligne
!--------------------------------------------------------------------------------! ----> Quatrième ligne
! 29/03/07 ! 36,000 (14:57)! ! ! ! !
! 30/03/07 ! 33,000 (11:46)! ! ! ! !
! 30/03/07 ! 34,000 (12:24)! ! ! ! !

 

la commande suivante permet d'obtenir ceci sur la sortie standard

 awk -F! ' /~?[0-9]/ {print $0}' test | cut -d\! -f 2,3 | sed s/\!/\\t/g

 

 29/03/07		36,000 (14:57)
30/03/07		33,000 (11:46)
30/03/07		34,000 (12:24)

 

awk -F! ' /~?[0-9]/ {print $0}' test : imprime chaque ligne du fichier test sur stdout si elle commence par un caractère quelconque (!) puis un chiffre

cut -d\! -f 2,3 : sélectionne les champs 2 et 3 de la sortie de awk avec comme délimiteur !

sed s/\!/\\t/g : remplace le ! par une tabulation pour obtenir une sortie des champs séparés par une tabulation

 

en redirigeant la commande vers un fichier texte, on obtient ce que l'on veut.

 

nb: il faut avoir awk, cut et sed d'installé sur son système (cygwin sous windows l'apporte par exemple)

Posté(e) (modifié)

Re-...

 

Bon, il y a la possibilité de faire démarrer la récupération à la 5e ligne mais tu perds les 4 premières...

Si tu ne peux rien changer au fichier d'origine, je ferais une macro du genre :

Sub tri_des_colonnes()

 

ligne = 5

Do Until Range("A" & ligne).Value = ""

 

chaine = Range("A" & ligne).Value

a = Mid(chaine, 3, 8 ) ' je dois ajouter un espace entre 8 et ) sinon ça donne : :P

b = Mid(chaine, 14, 14)

c = Mid(chaine, 37, 8 )

d = Mid(chaine, 48, 14)

e = Mid(chaine, 71, 8 )

f = Mid(chaine, 82, 14)

Range("A" & ligne).Value = a

Range("B" & ligne).Value = b

Range("C" & ligne).Value = c

Range("D" & ligne).Value = d

Range("E" & ligne).Value = e

Range("F" & ligne).Value = f

 

ligne = ligne + 1

Loop

 

End Sub

 

 

c'est peut être un peu lourd mais si tu t'en sers souvent, tu l'enregistres dans ton fichier perso.xls et tu crées un bouton dans la barre d'outils.

à chaque nouveau fichier, tu l'ouvres en choisissant "Largeur délimitée" puis directement "Terminé" et tu cliques sur le bouton et HOP !

4 lignes et 6 belles colonnes... :P

 

Bon, pour que ça marche, j'ai supposé que tes données étaient toutes sur le même format, sinon il faut rajouter une recherche des ! qui permette de définir les bornes des valeurs a à f

 

Tiens nous au courant

Modifié par korentin
Posté(e)

:P

 

Désolé, mais j'ai fait un essai dans Word, et la macro lance le programme de débogage, et sur Excel, elle n'a pas l'air de fonctionner. Peut-être que je ne fais pas ce qu'il faut :P

 

Merci

MAFFORUM

Posté(e) (modifié)

Salut,

Dans Word, ça me parait normal qu'elle ne fonctionne pas, je l'ai faite sous Excel.

Tu as quelle version ? Je ne pense pas que ça joue depuis les changements d'office 97... Moi, j'utilise Office2000 et VB 6.3

 

Pour la faire fonctionner, dans Excel, tu as lancé VB (Alt+F11) puis "Insertion">"Module"

et recopié l'intégralité du texte (en virant le commentaire)? >> je vais éditer mon précédent post pour que tu puisses le recopier tel quel.

 

ensuite tu retournes dans Excel, tu ouvres ton fichier txt et tu lances la macro?

 

Tu dis que ça ne fonctionne pas, quel message obtiens tu?

 

Edit, je viens de réessayer et chez moi, ça fonctionne

Modifié par korentin
Posté(e)

Salut à tous,

 

Pour répondre à Korentin, j'ai Excel 2003 comme version.

 

Pour la faire fonctionner, dans Excel, j'ai lancé puis VB (Alt+F11) puis "Insertion">"Module"

et recopié l'intégralité du texte (en virant le commentaire)?

 

Ensuite je suis retourné dans Excel, j'ai ouvert mon fichier txt en choisissant "Largeur délimitée" puis directement "Terminer". Je me retouve avec tout le contenu du fichier txt dans la cellule A et enfin j'ai lancé la macro?

 

Et là rien ne se passe, même pas une boite de dialogue ou un code d'erreur. J'ai donc essayé de lancer la macro en "pas à pas", la fenêtre VB s'ouvre et tout s'arrête au niveau de la première ligne qui apparait en jaune fluo.

 

Est-ce que je suis bien la bonne procédure ?

 

 

Quant à Greywolf, je suis désolé, mais je n'ai pas bien compris tout ce que tu m'as écrit :P , et je n'ai pas awk, cut et sed d'installés sur mon système.

Mais grand merci pour ta contribution.

 

 

Cordialement.

 

MAFFORUM

Posté(e)

Salut, tu installes sur ton système

gawk: http://heanet.dl.sourceforge.net/sourcefor...awk-3.1.3-2.exe

sed: http://surfnet.dl.sourceforge.net/sourcefo...2/sed-4.1.4.exe

coreutils (qui contient cut): http://kent.dl.sourceforge.net/sourceforge...utils-5.3.0.exe

 

une fois installés, tu ouvres une invite de commande MS-DOS, tu te rends dans le répertoire qui contient ton fichier à transformer et tu tapes:

awk -F! ' /~?[0-9]/ {print $0}' <nom_de_fichier> | cut -d\! -f 2,3 | sed s/\!/\\t/g > fichier.txt

 

tu remplaces évidemment <nom_de_fichier> par le nom de ton fichier à traiter.

Le résultat sous forme de fichier texte tabulé sera dans fichier.txt

 

Si tu as plusieurs fichiers à traiter, une simple boucle en batch devrait le faire.

Posté(e)

Salut,

je ne vois qu'une seule raison, c'est que la macro ne s'exécute pas dans le bon onglet.

en effet, si l'onglet est vide, Range("A" & ligne).Value = "" et donc ça s'arrête.

 

quand tu lances l'exécution, et que tu vois la ligne soulignée en jaune, tu as essayé de faire F8 pour passer à la ligne suivante?

Normalement, la macro doit s'exécuter dans l'onglet actif, vérifie que c'est bien celui de ton document txt.

sinon, tu peux rajouter une ligne "Worksheets("Document.txt").activate" au début de ta macro (sous le titre quand même) dans lequel Document.txt est le nom de ton fichier

Posté(e)

Bonjour à tous,

 

Salut Korentin, je dois surement faire quelque chose pas comme il faut, est-ce qu'il y a possibilité d'nvoyer des fichiers sur le forum ? Cela faciliterait la compréhension.

Quand je fais F8 ça passe d'une ligne à l'autre sans message d'erreur sauf quand j'ai introduit ta dernière modif comme dans le code ci-après.

Voici ce que j'ai mis dans un module :

 

Sub tri_des_colonnes()

 

 

ligne = 5

 

 

Do Until Range("A" & ligne).Value = ""

Worksheets(contrat_ESSAI_1.txt).Activate 'contrat_ESSAI_1.txt étant mon fichier) j'ai essayé avec et sans cette ligne

chaine = Range("A" & ligne).Value

a = Mid(chaine, 3, :P

b = Mid(chaine, 14, 14)

c = Mid(chaine, 37, :P

d = Mid(chaine, 48, 14)

e = Mid(chaine, 71, :P

f = Mid(chaine, 82, 14)

Range("A" & ligne).Value = a

Range("B" & ligne).Value = b

Range("C" & ligne).Value = c

Range("D" & ligne).Value = d

Range("E" & ligne).Value = e

Range("F" & ligne).Value = f

 

ligne = ligne + 1

Loop

 

End Sub

 

Encore merci et à +

Posté(e)

Bonjour,

 

Il me semble que vous cherchez à faire compliqué mais après tout pourquoi-pas!

 

+------------------------------------------------------------------------------+ ---->

Deuxième ligne

! Date ! XXXXXXX ! XXXXXXXX ! ! ! ! ----> Troisième ligne

!--------------------------------------------------------------------------------! ----> Quatrième ligne

! 29/03/07 ! 36,000 (14:57)! ! ! ! !

! 30/03/07 ! 33,000 (11:46)! ! ! ! !

! 30/03/07 ! 34,000 (12:24)! ! ! ! !

 

Il te faut indiquer à Execel que : "!" est un séparateur de champ et "CR" (retour charriot) comme séparateur de ligne.

 

Le 1er "!" est a supprimer pour ne pas créer un champ vide en début de ligne.

 

Ta première ligne ne peut pas fonctionner, soit tu la supprime manuellement, soit tu la remplace par "!!!!!" (5!) mais quel intérêt d'avoir Une ligne vide au dessus de ta ligne de titre ? (donc a supprimer)

 

Ta 2eme ligne doit contenir: Date ! XXXXXXX ! XXXXXXXX ! ! ! ! (pour 6 champs d'entêtes)

 

La ligne en dessous est a supprimer (le soulignement se fera tout seul quand tu figeras les volets.

 

Les autres lignes, no comment (juste supprimer le 1er !).

 

=> Sous Word, importe ton fichier, fais un "chercher" "^P!" et "remplacer par" (ne rien mettre) cela enlèvera les 1er "!".

 

Je ne sais pas comment faire, sinon je t'aurais envoyé un fichier (pour exemple) que j'ai créé pour récupérer les données de "Mother Board Monitor" afin d'en faire un tableau.

 

Cordialement et en espérant t'avoir dépanné.

 

Eventuellement met mois un fichier complet dans le post, voir si je peux te faire une macro.

Rejoindre la conversation

Vous publiez en tant qu’invité. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...