× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 macro excel pour convertir données d'un txtSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
usularrakis
  Posté le 19/01/2010 @ 08:40 
Aller en bas de la page 
Astucien

Bonjour à tous

je dispose d'office 2007

un petit pb pour les macroteurs :

je récupère un fichier .txt qui est une suite de données séparées par des ;

ces données correspondent à une personne tout les 15 ;

mais il n'y a pas de retour à la ligne pour marquer le changement de personne

donc excel importe tout dans les les 20 premières lignes de la colonne A et ensuite pour convertir les données en indiquant le ; comme séparateur ça ne permet pas d'avoir une ligne par personne

si qq'un a une idée ça me dépannerait grandement

merci

Publicité
galopin01
 Posté le 19/01/2010 à 09:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Tu peux me balancer le Fichier texte (en MP si nécessaire.)

A+

gr42
 Posté le 19/01/2010 à 09:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Si je comprends bien , tu te retrouves avec x lignes qui ne peuvent plus être séparées en colonnes en l'absence de marqueurs du type ; et tu ne veux pas ( nombre important de données inscrire régulièrement des ";" aux emplacements.

N'y a t-il pas , des données que tu pourrais remplacer en bloc avec la fonction rechercher / remplacer . Par ex , à la place de 25 rue .. remplacer 2 par ; 2 pour recréer un espace ?

galopin01
 Posté le 19/01/2010 à 09:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Un tout petit bout du fichier txt suffit avec seulement la fin d'une ligne et le début de la ligne suivante...

L'idée étant de scanner le string et de remplacer le caractère inconnu par un retour ligne.

A+

usularrakis
 Posté le 19/01/2010 à 11:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour Galopin

merci pour ton aide

je te prépare le fichier et te donnerai le lien par MP : c'est fait

à bientôt



Modifié par usularrakis le 19/01/2010 12:33
galopin01
 Posté le 19/01/2010 à 15:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Bon j'ai trouvé une manivelle (je ne suis pas un spécialiste de Word)

Ouvrir le fichier text sous Word

Exécuter la macro suivante :

Sub Test()
Selection.Find.ClearFormatting
With Selection.Find
.Text = ";"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Do
For i = 1 To 37
Selection.Find.Execute
Next
Selection = Replace(Selection, ";", Chr(13))
Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
End Sub

Enregistrer au Format Text.

Le fichier peut maintennt être importé dans Excel (délimiteur ; )

Attention : Surveiller la fenêtre Word pendant l'exécution de la macro et interrompre avec Ctrl+Pause quand la macro ne trouve plus rien, car elle continue d'insérer des retour lignes... Supprimer les retour lignes en trop...

Bon c'est que du dépannage hein... Pour une macro mieux ficelée voir du coté de Word... Quoique y doit y avoir moyen d'ouvrir une instance de Word sous. Mais mon problème est que je ne sais pas arrêter la macro en fin de fichier dans Word !

A+

usularrakis
 Posté le 19/01/2010 à 15:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

he he ! le galopin a encore frappé

je m'en vais tester tout ça sur le fichier complet et j'te dis quoi

merci

galopin01
 Posté le 19/01/2010 à 15:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

attention !

Le curseur doit être Avant le premier caractère du fichier au début de la macro parce que sinon il va commencer à compter les ; à partir du point d'insertion !

tu aurais pu également insérer cette ligne au début de la macro pour être sur d'être sur la bonne ligne de départ...

Selection.HomeKey Unit:=wdStory

A+



Modifié par galopin01 le 19/01/2010 16:01
usularrakis
 Posté le 19/01/2010 à 16:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ça marche impec

mais tu as raison faut être vigilant pour arrêter la macro car sinon Word génère des pages blanches puis plante

d'ailleurs, comment on arrête une macro pendant son exécution ?

un très grand merci

Publicité
galopin01
 Posté le 19/01/2010 à 20:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien
usularrakis a écrit :

comment on arrête une macro pendant son exécution ?

Ctrl+Pause !

A+

galopin01
 Posté le 19/01/2010 à 21:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

J'ai réussi à finaliser le truc pour qu'il s'arrête à la fin !

Sub Test()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With Selection.Find
.Text = ";"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Do
For i = 1 To 37
Selection.Find.Execute
Next
If Selection.Text = ";" Then
Selection = Replace(Selection, ";", Chr(13))
Selection.MoveRight Unit:=wdCharacter, Count:=1
Else
End
End If
Loop
End Sub

A+

galopin01
 Posté le 19/01/2010 à 23:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je te sens dubitatif.

Tu le veux directement sous Excel ?

Allez c'est jour de fête.

Tu mets ton fichier texte dans ton répertoire par défaut Excel et tu envoies ça :

Sub test()
Dim texte As String, i As Integer, j As Integer
Dim l As Integer, c As Integer
Open "1.txt" For Input As #1
Input #1, texte
Close #1
l = 1
j = 1
c = 1
i = InStr(texte, ";")
While i > 0
With Worksheets("Feuil1")
.Cells(l, c) = Mid(texte, j, i - j)
End With
j = i + 1
c = c + 1
If c = 38 Then
c = 1
l = l + 1
End If
i = InStr(j, texte, ";")
Wend
End Sub

Si tu le mets pas dans le bon répertoire indiquer le chemin sous la forme :

Open "C:\Excel\Test.txt"

A+

Nota : le fichier texte ne doit pas dépasser 32767 caractères (la démo en faisait 2400 env)

Avec la participation de michdenis
Macro selon db sur microsoft.public.fr.word
avec juste une (toute petite) touche perso !



Modifié par galopin01 le 19/01/2010 23:05
usularrakis
 Posté le 20/01/2010 à 08:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

galopin01 a écrit :
usularrakis a écrit :

comment on arrête une macro pendant son exécution ?

Ctrl+Pause !

A+

M'ENFIN !

bon ceci dit , ta macro modifiée sous word ne s'arrête toujours pas elle s'exécute correctement puis tourne sans fin. le débogage met Next en surbrillance :

Selection.Find.Execute
Next
If Selection.Text = ";" Then

pour la macro sous excel je te remercie d'avoir bossé dessus.

effectivement ça serait plus rapide mais si la limite est de 32000 caractères c'est dommage car j'en ai au minimum 700 000 !

pour info : je l'ai quand même testée sur un fichier réduit à 22 000 caractères et ça plante j'ai le message "erreur de compilation / erreur de syntaxe"

et While i > 0 qui est en rouge dans le VBE

mais la macro sous word et Ctrl+ Pause me conviennent amplement

merci encore pour ton aide et le temps passé dessus

à bientôt

galopin01
 Posté le 20/01/2010 à 09:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ben ça c'est pas ordinaire, car tu penses bien que j'ai testé etretesté tout ça avant de le mettre en ligne...

Je revérifierai ce soir.

usularrakis
 Posté le 20/01/2010 à 11:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

te bile pas Galopin, ce n'est pas gênant pour l'usage que j'en ai (vive le Ctrl+Pause )

de plus, on (gbinform et eriiic, merci à eux aussi) m'a par ailleurs proposé ceci pour excel :

Public Sub ciril_bis()
Dim lig As Long ' ligne
Dim col As Integer ' colonne
Dim art As String ' article lu
Dim cel As String ' valeur cellule
Dim fic As String ' chemin fichier
Dim idx As Long ' index caractère
fic = Application.GetOpenFilename("Textes,*.txt")
Open fic For Input As #1 ' ouvre fichier texte
lig = 3 ' ligne début
Do
Input #1, art ' lecture
idx = 0 ' initiatisation index
While idx < Len(art) ' boucle mongueur article
For col = 1 To 37 ' 37 colonnes
cel = "" ' initiatisation cellule
Do
idx = idx + 1
If Mid(art, idx, 1) = ";" Then Exit Do
cel = cel & Mid(art, idx, 1)
Loop While idx < Len(art)
Cells(lig, col).Value = cel ' valorisation cellule
Next col
lig = lig + 1 ' changement de ligne
Wend
Loop While Not EOF(1)
Close #1
End Sub

je l'ai testée, elle fonctionne

qu'en penses-tu ?

galopin01
 Posté le 21/01/2010 à 11:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Très bien... Mais j'ai retesté les miennes et elles ne produisent pas de bogue.

Tu travailles avec quoi 95, OpenOffice, Multiplan ???

A+



Modifié par galopin01 le 21/01/2010 11:28
usularrakis
 Posté le 21/01/2010 à 12:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

non avec Office 2007 comme indiqué dans mon message initial

et j'ai fait un simple copier coller de ton script dans un module et indiqué le chemin du fichier

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
8 €Jeu de 4 tournevis Stanley Cushion Grip à 8 €
Valable jusqu'au 29 Octobre

Amazon fait une promotion sur le lot de 4 tournevis Stanley Cushion Grip qui passe à 8 € au lieu de 19 €. Lame plaquée chrome anti-corrosion. Manche soft grip pour un confort et un contrôle parfait. Les extrémités sont aimantées.


> Voir l'offre
314,81 €Mini PC MINISFORUM UM300 (Ryzen 3 3300U, 16Go RAM, 512 Go SSD) à 314,81 € avec le code BGSEDK
Valable jusqu'au 27 Octobre

Banggood propose actuellement le mini PC MINISFORUM UM300 à 306,63 € avec le code promo BGSEDK. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 3 3300U avec chip graphique Vega 6, 16 Go de RAM DDR4 et un SSD de 512 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi6, le bluetooth 5.1, 3 ports USB 3.1, un port HDMI 2.0, un DisplayPort, deux ports Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant. Comptez 8,18 € pour l'assurance et la livraison soit un total de 314,81 € livré.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
201,38 €Disque dur externe Western Digital Elements Desktop USB 3.0 12 To à 201,38 € livré
Valable jusqu'au 28 Octobre

Amazon Royaume-Uni propose actuellement le disque dur externe Western Digital Elements Desktop USB 3.0 12 To à 172,99 £. Avec la conversion en euros et la livraison en France, il vous reviendra à  201,38 € livré. On le trouve ailleurs à partir de 250 €. Ce disque dur dispose d'un grande capacité de stockage (12 To) et d'une connectique USB 3.0 qui vous offrira des transferts rapides. Il est compatible USB 2.0. Une très bonne affaire. 

Vous pouvez utiliser votre compte Amazon France sur Amazon UK et il n'y a pas de douane.


> Voir l'offre

Sujets relatifs
macro excel pour convertir données
Excel : macro pour récupérer ttes les données ?
macro excel pour stockage de données
Creation d' une boucle macro dans fichier EXCEL pour impression
Macro pour ouverture d'un fichier Excel
Macro pour créer un Gencode sur Excel - EAN 18
Macro Excel compilations données et export pdf
Macro pour un envoi feuille excel par mail
Macro excel pour enregistrer
EXCEL RECHERCHEV pour autre fichier. Macro?
Plus de sujets relatifs à macro excel pour convertir données d''un txt
 > Tous les forums > Forum Bureautique