Excel et fichier text.........la galere

waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 28 nov. 2005 à 20:58
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 - 6 déc. 2005 à 12:33
bonjour a tous,



voici mon probleme: je dispose d'un fichier contenant le suivi journalier d'un automate d'analyse biologique. du type:



E
1-61 61173809
Urine
23/11/05 16:25


COCA
0

OPIA
91



I N 0- 0
61173811
Urine




N
1-12 61173807
Urine
23/11/05 15:34


AMPH
45


BARB
0
BENZO 11005

CANNA
65


COCA
0
EDDP 13117


OPIA
0




je souhaiterai l'exporter sous excel pour avoir qqchose qui ressemble a ça:



Patient / Matrice
/ Date /
coca / opia / amph / barb / benzo
.....

61173809 / urine
/ 23/11/05 / 0
/ 91
/
/ /

61173807 / urine
/ 23/11/05 / 0
/ 0
/ 45 / 0
/ 11005

ect....



il faudrait que lorsque il y a un "I" devant le code patient, celui ne soit pas pris en compte.

rq: les "/" representent les cellules d'excel.

18 réponses

waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
28 nov. 2005 à 20:59
j'ai oublier de preciser:




je pense qu'il faut analyser le fichier ligne par ligne mais je me
casse la tete sur la procedure et sa mise en oeuvre, donc toute aide
est a bienvenue.



merci d'avance
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
29 nov. 2005 à 07:31
Envoi moi ton fichier je regarde et te fais un programme
puis je t'envoi les sources
[mailto:Dhreat01@yahoo.fr FMATRIX07]
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 nov. 2005 à 10:42
Ton pb vient sans doute du faite justment qu'il ne faut pas analysé ton fichier ligne par ligne, mais bloc par bloc !!
Il faut lire un bloc de ligne et les stocker dans un tableau (a toi de trouver une séquence de rupture entre tes blocs : par exemple, l'apparition d'une date en bout de ligne semble indiqué le debut d'un nouveau bloc).
Ensuite il te faudra quelques instructions de traitement de chaine de caractères : Left, Mid, Right, Replace, Split

CR
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 nov. 2005 à 10:44
Au vu des produit recherché, tu travailles pour la société "Tour de France" non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
29 nov. 2005 à 11:27
bonjour,



merci pour vos reponses rapides, je vais faire des essais en analysant
bloc par bloc.... je pense que le bloc du type "E N1-1" ou la date peut
etre un bon delimiteur.



Pour info je bosse dans le diagnostic biologiques (medoc, drogues) mais
je ne bosse pas pour la société "Tour de France".... on n'a pas de test
de detection de l'EPO... pas encore.



a bientot
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
29 nov. 2005 à 12:27
au fait, je suis toujours preneur de vos solutions
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
30 nov. 2005 à 07:32
Si le fichier est comme tu l'as envoyer essai ça

Public Myxlapp As Excel.Application
Private Sub Command1_Click()
Set Myxlapp = Excel.Application
Myxlapp.Visible = True
Myxlapp.DisplayAlerts = True


Workbooks.Open FileName:=Text2 & Text4, Origin:=xlWindows
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
i = ActiveCell.Row
Val1 = 1
Workbooks.OpenText FileName:=Text1 & Text3, Origin:=932, StartRow:=1 _
, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), Array(1, 2), Array(3, 2) _
, Array(12, 2), Array(26, 2), Array(42, 2), Array(61, 2)), TrailingMinusNumbers:=True
Do
Columns("B:B").Select
Range("B" & Val1).Activate
Selection.Find(What:="E", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Val1 = ActiveCell.Row
ValPatient = Range("D" & Val1)
ValMatrice = Range("E" & Val1)
ValDate = Range("F" & Val1)
ValHeure = Range("G" & Val1)
Windows(Text4.Text).Activate
Range("A" & i) = ValPatient
Range("B" & i) = ValMatrice
Range("C" & i) = ValDate
Range("D" & i) = ValHeure
Val1 = Val1 + 2
Windows(Text3.Text).Activate
Do
If Range("B" & Val1) = "" Then
ValAnalyse = Range("C" & Val1)
ValResult = Range("D" & Val1)
End If
Windows(Text4.Text).Activate
Rows("1:1").Select
On Error GoTo AddColumn
Err.Clear
Selection.Find(What:=ValAnalyse, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
GoTo JumpAddColumn
AddColumn:
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ValC1 = ActiveCell.Column
Cells(1, ValC1) = ValAnalyse
Err.Clear
JumpAddColumn:
ValC1 = ActiveCell.Column
Cells(i, ValC1) = ValResult
Val1 = Val1 + 1
Windows(Text3.Text).Activate Loop Until Range("B" & Val1) "" And Range("C" & Val1) ""
i = i + 1
Range("B" & Val1).Activate
Loop Until Range("B" & Val1 + 2) = ""
Windows(Text3.Text).Activate
ActiveWindow.Close
Columns("A:D").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("A:A").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1").Select
ActiveWorkbook.Save
ActiveWorkbook.Close
On Error GoTo Jumping1
Myxlapp.Visible = True
Myxlapp.DisplayAlerts = True
Myxlapp.Quit
Set Myxlapp = Nothing
Jumping1:
End
End Sub
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
30 nov. 2005 à 07:33
ça n'est pas lisible je t'envoi la source
FMATRIX07
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
30 nov. 2005 à 12:43
merci FMatrix07



ta source m'est d'un grand secour....mais pourrais tu la commenter si
tu as le temps car j'aimerai comprendre son fonctionnement.

merci
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
30 nov. 2005 à 13:05
Pas de pb demain je t'envoi ça
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
30 nov. 2005 à 13:12
J'ai parlé trop vite.... y a un petit probleme:



ton code ne prend pas compte des patient ayant un "N" devant.mais ce
que je veux c prendre en compte les patients ayant "E" ou "N" devant
sauf ceux précédés d'un "I".



Dans mon exemple au dessus seul le patient "I N 0- 0 61173811 Urine" ne doit pas etre pris en compte.



j'espere avoir été clair.



merci
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
1 déc. 2005 à 04:49
Bonjour
on change tout ou presque
d'abord
ajoute un module nommé "WriteFile.bas"
colle ceci dedans
Public Function WriteText(FileWrite, ValEntrer)
NomFicSrc = FileWrite
NomFicDesti = "C:\Tempo2.TMP"
'Ouverture des fichiers
NumFicSrc = FreeFile
Open NomFicSrc For Input As NumFicSrc
NumFicDesti = FreeFile
Open NomFicDesti For Output As NumFicDesti
Bcle1 = 0
'Lecture/écriture des fichiers
Do While Not EOF(NumFicSrc)
Line Input #NumFicSrc, msg
If msg <> "" Then Print #NumFicDesti, msg
next1:
Bcle1 = Bcle1 + 1
Loop
'Fermeture des fichiers et ajout de la Valeur d'entrée
Print #NumFicDesti, ValEntrer
Close #NumFicDesti
Close #NumFicSrc
'Changement de nom du fichier Destination
Kill NomFicSrc
Name NomFicDesti As NomFicSrc
End Function

Puis change le command1_Click() par
ceci
Private Sub Command1_Click()
'Declaration du fichier excel
Set Myxlapp = Excel.Application
Myxlapp.Visible = True
Myxlapp.DisplayAlerts = True
'Ouverture du fichier resultatAnalyse
Workbooks.Open FileName:=Text2 & Text4, Origin:=xlWindows
'Recherche derniere ligne pour nouvelle entrée
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
i = ActiveCell.Row
Val1 = 1
'Copy du fichier des entrées d'analyse
FileCopy Text1 & Text3, Text1 & Text3 & 1
'Ajout d'un carractere pour trouver la fin du fichier
WriteText Text1 & Text3 & 1, vbCrLf & "F"
'ouverture du fichier des entrées d'analyse
Workbooks.OpenText FileName:=Text1 & Text3 & 1, Origin:=932, StartRow:=1 _
, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), Array(1, 2), Array(3, 2) _
, Array(12, 2), Array(26, 2), Array(42, 2), Array(61, 2)), TrailingMinusNumbers:=True
'Recherche derniere ligne
Columns("A:A").Select
Range("A" & Val1).Activate
Selection.Find(What:="F", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ValFin = ActiveCell.Row
'Recherche des differents patient
Range("B" & Val1).Activate
Do
'Test si c'est une entrée patient different de "I"
If Range("B" & Val1) <> "" And Range("A" & Val1) <> "I" Then
ValPatient = Range("D" & Val1)
ValMatrice = Range("E" & Val1)
ValDate = Range("F" & Val1)
ValHeure = Range("G" & Val1)
Windows(Text4.Text).Activate
Range("A" & i) = ValPatient
Range("B" & i) = ValMatrice
Range("C" & i) = ValDate
Range("D" & i) = ValHeure
Windows(Text3.Text & 1).Activate
Val1 = Val1 + 2
'Recherche de la type et valeur analyse
Do
If Range("B" & Val1) = "" Then
ValAnalyse = Range("C" & Val1)
ValResult = Range("D" & Val1)
End If
Windows(Text4.Text).Activate
'Recherche position colonne analyse si erreur test abs alors ajout de la colonne
Rows("1:1").Select
On Error GoTo AddColumn
Err.Clear
Selection.Find(What:=ValAnalyse, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
GoTo JumpAddColumn
AddColumn:
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ValC1 = ActiveCell.Column
Cells(1, ValC1) = ValAnalyse
Err.Clear
JumpAddColumn:
'Ajout des valeur d'analyse pour le patient
ValC1 = ActiveCell.Column
Cells(i, ValC1) = ValResult
Windows(Text3.Text & 1).Activate
Val1 = Val1 + 1 Loop Until Range("B" & Val1) "" And Range("C" & Val1) ""
i = i + 1
Else
Val1 = Val1 + 1
End If
Loop Until Val1 >= ValFin
Windows(Text3.Text & 1).Activate
ActiveWindow.Close
'Mise en forme du classeur resultat analyse
Columns("A:D").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("A:A").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1").Select
'Sauvegarde du fichier puis fermeture
ActiveWorkbook.Save
ActiveWorkbook.Close
'Effacer la copie fichier entrée analyse
Kill Text1 & Text3 & 1
'Liberer excel
On Error GoTo Jumping1
Myxlapp.Visible = True
Myxlapp.DisplayAlerts = True
Myxlapp.Quit
Set Myxlapp = Nothing
Jumping1:
End
End Sub
*****************************************
Il y a un seul Bug je n'ai pas trouvé comment resoudre
quand il manque plus d'un type d'analyse dans la classeur ResultAnalyse ça plante
le premier et bien ajouté mais si il y en a un deuxieme malgre le err.clear ça plante

A toi de jouer
0
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
3 déc. 2005 à 19:25
bonsoir,
Je t'ai envoyé plusieurs réponses successives par mail et sur un précédent topic.
Je galère un peu avec ma messagerie. As-tu reçu ces messages ?
Je te remet le lien de ma dernière mouture ici
A +
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 déc. 2005 à 00:01
bonsoir galopin01, g bien recu tes mails et c ok, merci pour ton aide.



sinon Fmatrix07, ton prog ca roule aussi mais g juste un pb: je l'ai
fais sous vb6, excel 11 et windows xp sp2 mais je dois utiliser ce prog
avec un windows nt4 et excel 98 ou 2000.

Or le prog compilé ne fonctionne pas avec cette derniere config.... comment faire pour resoudre ce probleme.



merci
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
5 déc. 2005 à 11:12
Il n'y pas de possiblité que de compiler sous le même OS et pack office
au cas ou tu peux m'envoyer tes fichiers je te ferai la compilation j'ai ce qu'il faut
@+
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
5 déc. 2005 à 23:48
Si tu ne peux m'envoyer tes sources tu peux toujours intergrer ce que t'ai envoyer dans une macro excel en attribuant les variables de chemin et de nom fichier a des cellules de ton classeur puis lance la macro à l'ouverture de ton classeur.

Sinon envoi tes fichiers y pas de pb
@+
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
6 déc. 2005 à 10:42
bojour fmatrix07,



comme tu me l'as demandé, je t'es envoyés la source du prog.



je te remercie beaucoup de ton aide, tu me retire une epine du pied.



@+
0
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
6 déc. 2005 à 12:33
je ne les ai pas recus
0
Rejoignez-nous