toujours avec mes problemes d'importation de données d'un fichier txt

  • Initiateur de la discussion dj.run
  • Date de début
D

dj.run

Guest
Bonjour à tous et à toutes,

J'avais ouvert un premier fil avant ce long week end mais n'ayant pas obtenu, les renseignements voulus, je me permet d'en ouvrir un autre . Je sais c'est pas bien .

voici mon probleme :

je voudrai recuperer des données d'un fichier txt pour les inserer dans ma feuille de calcul . manuellement j'y arrive, mais avec une macro, cela m'importe bien les données mais, il y a un mais elles ne sont pas reconnues en format nombre.

je travaille sur win98 et office97 pro.

le plus surprenant c'est : avec office small busines ça fontionne normalement (sur un autre poste).

de plus quand j'enregistre la macro avec le vbe, les données sont bien reconnues, mais quand je l'execute c'est là que ça fontionne plus .

que dois je faire ??

ci joint le code :

Workbooks.OpenText FileName:="a:\STATFAM.TXT", Origin:=xlWindows, StartRow _
:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1))
Range("A2:A51,B2:B51,C2:D51").Select
Range("C2").Activate
ActiveWindow.ScrollRow = 1
Range("A2:A51,B2:B51,C2:D51,F2:F51").Select
Range("F2").Activate
Selection.Copy
Windows("statfammodl.xls").Activate
ActiveWindow.ScrollRow = 1
Range("B7").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Application.CutCopyMode = False ''on vide le presse papier
Windows("STATFAM.TXT").Activate
ActiveWindow.Close SaveChanges:=False

MsgBox "Vous devez changer de mois puis cliquer sur le bouton Sauvegarde", 64

Range("a1").Select

merci pour votre aide

dj.run
 
M

Mytå

Guest
Bonsoir le forum

Dj.run pour convertir les valeurs en numeriques tu peux ajouter une macro de TI

Sub Nombres()
Dim Plage As Range, Cel As Range
Set Plage = Range("C1", Range("C1").End(xlDown))
For Each Cel In Plage
If IsNumeric(Cel.Value) Then Cel.Value = CDbl(Cel.Value)
Next Cel
End Sub

Mytå
 
B

Baroude

Guest
Bonsoir,

Merci Mytå, je ne me souvenais plus de la fonction CDbl...

dj.run, remplace dans ma macro la ligne
Range("C" & i) = Mid(Enreg, 23, 6)
par
Range("C" & i) = CDbl(Mid(Enreg, 23, 6)) comme ça, Excel reconnaitra le champ en format nombre.

quant à ton fichier texte, quand tu l'ouvres par excel et que tu demandes l'ouverture délimité par les tabulations, ya pas de problème chez moi... en effet à l'affichage, Excel met des petits carrés (c'est le code de la tabulation (?)) mais dans la feuille Excel, ils n'apparaissent plus.

Baroude
 
S

sylvain

Guest
Bonjour,

moi j'ai une solution qui marche très bien en deux temps :
on remonte une ligne dans une cellule xl, elle arrive avec les carrés.
avec les fonctions texte on remet les données en forme.
Puis on fait un copier coller à la suite dans une autre feuille.

Sub flux()
Const ForReading = 1, ForWriting = 2, ForAppending = 3, TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
'effacer la feuille données
Sheets("données").Select
Cells.ClearContents
Range("a1").Select
' à utiliser pour accélérer le travail Application.ScreenUpdating = False
Sheets("une_fiche").Select
'feuille intermédiaire
Set fs = CreateObject("Scripting.FileSystemObject")
'fs.CreateTextFile "test1.txt" 'Crée un fichier
Set f = fs.GetFile(Range("gestion!a5").Value)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
Do
Range("a1").Select
On Error GoTo 125
ActiveCell.Value = ts.ReadLine
'la ligne 20 connait les données remises en forme
Rows("20:20").Copy
'on les ajoute dans la feuille données
Sheets("données").Select
Cells(ActiveCell.Row + 1, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.ScreenUpdating = False
Sheets("une_fiche").Select
Application.CutCopyMode = False
Loop
125
ts.Close
End Sub
 
M

Mytå

Guest
Bonsoir le forum

Une autre alternative dj.run

Option Explicit
Sub recup_fichier()
Dim Enreg As String
Dim ligne As Integer, colonne As Integer
Dim nbr_deb As Byte, nbr_fin As Byte
ligne = 2
On Error Resume Next
Open "c:\Mes Documents\statfam.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, Enreg
nbr_deb = 1
For colonne = 1 To 10
nbr_fin = Application.WorksheetFunction.Find(Chr(9), Enreg, nbr_deb)
Cells(ligne, colonne) = Mid(Enreg, nbr_deb, nbr_fin - nbr_deb)
nbr_deb = nbr_fin + 1
Next colonne
ligne = ligne + 1
Loop
Close #1
Call Nombres
End Sub

Sub Nombres()
Dim Plage As Range, Cel As Range
Set Plage = Range("D2:G2", Range("D2").End(xlDown))
For Each Cel In Plage
If IsNumeric(Cel.Value) Then Cel.Value = CDbl(Cel.Value)
Next Cel
End Sub

Mytå
 
D

dj.run

Guest
Bonjour à toutes et à tous,

juste un petit mot pour vous tenir au courrant,

J'ai pris mon gros chaudron, j'ai ajouté un peu de vos connaissances, j'ai melangé le tout et j'ai fait chauffer (ma matiere grise) et... et...

ça marche !!!

Encore une fois un GRAND MERCI à vous tous .

dj.run

ps: si vous voulez voir le code, je peux vous le faire parvenir .
 

Discussions similaires

  • Question
Microsoft 365 Formules
Réponses
2
Affichages
456

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji