Extraire et mettre en forme un fichier texte en vba sous excel

[Résolu]
Signaler
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008
-
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008
-
Bonjour étant un nouvelle entrant dans le monde de la programation je cherche de l'aide...
mon pb est le suivant je n'arrive pas a mettre en forme le fichier texte ci dessous, il faut juste que j'arrive a afficher le mot qui vient aprés create_ dans une colonne et tout ses compteurs associees (commençant par pm dans une autre( chaque pm dans une cellule))

exemple de fichier:
=================================================================
53    Create_E1Ttp                              ACTIVE     900  3
=================================================================
E1Ttp                           3    pmEs
                                     pmSes
                                     pmUas
=================================================================
54    Create_PlugInUnit                         ACTIVE     900  1
=================================================================
PlugInUnit                      1    pmProcessorLoad
=================================================================
55    Create_TdmTermGrp                         ACTIVE     900  3
=================================================================
TdmTermGrp                      3    pmNrOfTdmTermsBusy
                                     pmNrOfTdmTermsRej
                                     pmNrOfTdmTermsReq

le pb est que lorsque je fais l'importation de mon fichier excel me garde la mise en forme actuelle!!!
j'ai essayé plusieurs codes mais sa ne donne rien .
Quelqu'un aurait-il une piste ???
merci.

30 réponses

Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Salut !!!


j'utilise finalement le code suivant


Sub Afficher()


Dim mot As String
Dim chaine As String
mot = "Create_"




Open "C:\Documents and Settings\ediaahm\Desktop\Counter_Analyser\log1.txt" For Input As 1
Line Input #1, chaine
Do While EOF(1)


chaine = Mid(mot, 8, 10)




Range("A1").Select = chaine


Loop


End Sub


mais il ne fonctionne pas .
ce que je voudrais sa serais d'afficher tous les mots aprés "Create_" dans une seule colonne ainsi que tous les mots de mon fichier commençant par pm dans une autre.


mais j'ai toujours des erreurs!!!


merci de votre aide.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
re;

tiens, c'est cadeau, ça fait plaisir, testé et approuvé :

Option Explicit

Private Sub Form_Load()
    Dim sContenu        As String
    Dim sStringSearch   As String
    Dim ff              As Integer
    Dim lPlacement      As Long
    Dim lFin            As Long
    Dim lIndex          As Long
    Dim sValues()       As String
    
ff = FreeFile: lIndex = -1
sStringSearch = "Create_"

Open "C:\Documents and
Settings\ediaahm\Desktop\Counter_Analyser\log1.txt" For Input As #ff
    sContenu = Input$(LOF(ff), #ff)
Close #ff

Do
lPlacement = InStr(lPlacement + 1, sContenu, sStringSearch)
If lPlacement > 0 Then
    lFin = InStr(lPlacement + 1, sContenu, " ")
    lIndex = lIndex + 1
    ReDim Preserve sValues(lIndex)
    sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - lPlacement +
Len(sStringSearch))
Else
    Exit Do
End If
Loop

For lIndex = LBound(sValues) To UBound(sValues)
    MsgBox sValues(lIndex)
Next lIndex
Erase sValues
End Sub

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
j'ai quasiment fait tout ton dev, essaie plusieurs possibilité, c'est cherchant que l'on s'améliore.

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

suffit de lire ton fichier texte, et de placer contenu dans une variable.
ensuite, à coup de instr, tu récupères tes valeurs

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Salut mortalino et merci de ton conseil
j'ai utilisé la fonction suivante :
Sub Nomdufichier()

Dim NomFichier

NomFichier = Application.GetOpenFilename

If VarType(NomFichier) = vbBoolean Then MsgBox "Action annulée" _

Else MsgBox "Fichier sélectionné : " & NomFichier

End Sub

 mais je n'arrive toujours pas à extraire les informations désiré?
et pour le "instr" sa signifie instruction ?
Merci de ton aide .
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
3
Bonjour,
tu peu essayé avec
Dim T
Dim Txt as string 'ton texte
T=Split(Txt,"Create_",-1)

dans le tableau T tu va avoir
T(1) = "Create_"
et dans T(2) tu va avoir la suite
for i=1 to len(T(2)
   if mid(T(2)="" then exit for
next i
LeNomQueTuCherche = left(T(2),i-1)
Si j'ai bien compris...
A+
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Merci beaucoup !!!
Je vais maintenant à partir de ce que tu m'a donné afficher sa directement dans une feuille excel avec les pm associés je te tiendrais informé de la suite.

Merci!!!!
Ps: j'ai beuacoup de chemin à faire pour devenir un as de la prog!!!!!
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Salut !!!
j'ai réussi a afficher les valeurs dans la colonne A de la feuillle excel (parce que les valeurs doivent s'afficher dans une feuille excel et non pas une msgbox , j'avais mal formulé mon pb désolé)
par contre je n'arrive toujours pas a afficher les mots commençant par pm.... qui leurs sont associés (les pm devront quant à eux se trouver dans la colonne B)


j'ai testé plusieurs boucle a l'intérieur de la premeière boucle mais sa ne donne rien???
comment dois-je faire????


voici mon code (ou plutôt ton code !!! ):


Option Explicit




Private Sub Form_Load()
    Dim sContenu        As String
    Dim sStringSearch   As String
    Dim ff              As Integer
    Dim lPlacement      As Long
    Dim lFin            As Long
    Dim lIndex          As Long
    Dim sValues()       As String
    Dim vara As Long, varb
    ff FreeFile: lIndex -1
sStringSearch = "Create_"


Open "C:\Documents and Settings\ediaahm\Desktop\Counter_Analyser\log.txt" For Input As #ff
    sContenu = Input$(LOF(ff), #ff)
Close #ff
vara = 1
varb = 2


'cleanning of the [AFFICH_log] sheet
Sheets("Sheet2").Cells.ClearContents
Sheets("Sheet2").Activate




Do
lPlacement = InStr(lPlacement + 1, sContenu, sStringSearch)
If lPlacement > 0 Then
    lFin = InStr(lPlacement + 1, sContenu, " ")
    lIndex = lIndex + 1
    ReDim Preserve sValues(lIndex)
    sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - lPlacement + Len(sStringSearch))
Else
    Exit Do
End If
Loop


For lIndex = LBound(sValues) To UBound(sValues)
    'MsgBox sValues(lIndex)
   
    ActiveSheet.Cells(varb, 1) = sValues(lIndex)
    varb = varb + 1
    ActiveSheet.Columns.AutoFit
   
Next lIndex
Erase sValues
End Sub
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
re,

je te l'ai fait en Fonction, ce sera plus simple d'utilisation, regarde surtout la sub exemple, la Function ne doit ^pas être modifée :

Option Explicit

Private Function ExtractDatas(ByVal sStringSearch As String, sValues() As String) As Boolean
    Dim sContenu        As String
    Dim ff              As Integer
    Dim lPlacement      As Long
    Dim lFin            As Long
    Dim lIndex          As Long
    
ff = FreeFile: lIndex = -1

Open "C:\Documents and
Settings\ediaahm\Desktop\Counter_Analyser\log1.txt" For Input As #ff
    sContenu = Input$(LOF(ff), #ff)
Close #ff

Do
lPlacement = InStr(lPlacement + 1, sContenu, sStringSearch)
If lPlacement > 0 Then
    lFin = InStr(lPlacement + 1, sContenu, " ")
    If InStr(lPlacement + 1, sContenu, vbCrLf) < lFin
Then lFin = InStr(lPlacement + 1, sContenu,
vbCrLf)
    If lFin = 0 Then lFin = Len(sContenu)
    lIndex = lIndex + 1
    ReDim Preserve sValues(lIndex)
    sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - (lPlacement
+ Len(sStringSearch)))
Else
    Exit Do
End If
Loop
ExtractDatas = True
End Function

Sub test()
    Dim myValues1() As String, myValues2() As String, lIndex As Long
    Dim i As Integer
    
If ExtractDatas("Create_", myValues1) Then
    For lIndex = LBound(myValues1) To UBound(myValues1)
    i = i + 1
        Cells(i, 1).Value = myValues1(lIndex)
    Next lIndex
    Erase myValues1
End If
i = 0

If ExtractDatas("pm", myValues2) Then
    For lIndex = LBound(myValues2) To UBound(myValues2)
    i = i + 1
        Cells(i, 2).Value = myValues2(lIndex)
    Next lIndex
    Erase myValues2
End If

End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Encore merci mortalino !!!mais le pb est que pour la colonne B je dois avoir le pm devant chaque mot et puis je dois pouvoir associer chaque mot aprés "Create_" avec les pm qui lui sont associés par contre je dois garder le mot pm deavnt chaque conteur de la colonne B ex:


voici un exemple de la mise en forme final les etoile !!!!!)




Colonne A                  Colonne B
*******************************************
E1Ttp                        pmEs
                                  pmSes
                                  pmUas
******************************************
PlugInUnit                   pmProcessorLoad
*********************************************
TdmTermGrp              pmNrOfTdmTermsBusy
                                   pmNrOfTdmTermsRej
                                   pmNrOfTdmTermsReq


**************************************
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
dans la fontion, cahnge
sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - (lPlacement + Len(sStringSearch)))

pour
If sStringSearch = "pm" then
    sValues(lIndex) = Mid$(sContenu, lPlacement, lFin - (lPlacement + Len(sStringSearch)))
else
    sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - (lPlacement + Len(sStringSearch)))
end if

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

salut j'ai rajouter la fonction mais il y a les deux derniers caractères pour les expressions de la colonne b qui ne s'affichent plus ?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
If sStringSearch = "pm" then
   


sValues(lIndex) = 
Mid
$(sContenu, lPlacement
, lFin - (lPlacement +
Len
(sStringSearch)))
else
   


sValues(lIndex) = 
Mid
$(sContenu, lPlacement +
Len
(sStringSearch), lFin - (lPlacement+

Len



(sStringSearch))
)
end if




enlève ce qui a en rouge
@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

salut j'ai fais ce que tu m'a dit mais j'ai toujours le meme pb ?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
lol, tu m'étonnes, suis pas encore réveillé, j'ai fait une boulette.
Enlève ce qui a en rouge mais sur la ligne AVANT le Else.
Ce qui a après en fait, il ne faut rien enlever

Pff.. je suis mauvais

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

OKIIIII!!!!!!!
sa marche c vraiment gentil!!!!
ilne me reste plus qu'a mettre sa en forme je te tiens au courant @++
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Sinon est-ce que tu pourrais m'expliquer globalement comment le programme fonctionne???
d'aprés ce que j'ai vu il sélectionne les mots par rapports à leurs taille
est-ce vrai ???
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
je t'ai mis qques comm :

Private Function ExtractDatas(ByVal sStringSearch As String, sValues() As String) As Boolean
    Dim sContenu        As String
    Dim ff              As Integer
    Dim lPlacement      As Long
    Dim lFin            As Long
    Dim lIndex          As Long
    
' freefile donne un
numéro d'acces libre pour fichier :
ff = FreeFile: lIndex = -1

'ouverture du fichier, récupération des données, puis fermeture
:
Open "C:\Documents
and Settings\ediaahm\Desktop\Counter_Analyser\log1.txt" For Input As #ff
    sContenu = Input$(LOF(ff), #ff)
Close #ff

' Do fait une boucle
:
Do
lPlacement récupére la position du mot recherché :
lPlacement = InStr(lPlacement + 1, sContenu, sStringSearch)
If lPlacement > 0 Then
'
la fin est récupéré par l'espace qui vient après la
recherche..
    lFin = InStr(lPlacement + 1, sContenu, " ")

'.. ou par le saut de ligne :
    If InStr(lPlacement + 1, sContenu, vbCrLf) < lFin Then
lFin = InStr(lPlacement + 1, sContenu, vbCrLf)

' le dernier
caaract n'est ni l'un ni 'autre. Donc c'est le dernier carac du fichier
:
    If lFin = 0 Then lFin = Len(sContenu)
    lIndex = lIndex + 1
    ReDim Preserve sValues(lIndex)

' si pmtatatiti
est à partir du caractère 10, _
lplacement vaut 10, lFin vaut 20, et fdonc 20 - 10 =>
10 _
Mid extrait donc
la valeur avec ces paramètres

    If sStringSearch = "pm" then
        sValues(lIndex) = Mid$(sContenu, lPlacement, lFin - lPlacement)
    else
        sValues(lIndex) = Mid$(sContenu, lPlacement + Len(sStringSearch), lFin - (lPlacement
+ Len(sStringSearch)))
    end if
Else
    Exit Do
End If
Loop
ExtractDatas = True
End Function

Sub test()
    Dim myValues1() As String, myValues2() As String, lIndex As Long
    Dim i As Integer
    
If ExtractDatas("Create_", myValues1) Then
    For lIndex = LBound(myValues1) To UBound(myValues1)
    i = i + 1
        Cells(i, 1).Value = myValues1(lIndex)
    Next lIndex
    Erase myValues1
End If
i = 0

If ExtractDatas("pm", myValues2) Then
    For lIndex = LBound(myValues2) To UBound(myValues2)
    i = i + 1
        Cells(i, 2).Value = myValues2(lIndex)
    Next lIndex
    Erase myValues2
End If

End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Merci c cool est bon week end!!!!
Messages postés
25
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2008

Juste une derniere question je voudrais faire une boucle dans la prmeière boucle de la   fonction test pour avoir la cellule A1 remplit ensuite la cellule B1 à BX remplit je saute une ligne puis la cellule "An" remplit ensuite la "Bn" qui se remplit jusqu'a "Bx"

pour avoir les donnees formatés de cette façon :

Colonne A                  Colonne B
*******************************************
E1Ttp                          pmEs
                               pmSes
                               pmUas
******************************************
PlugInUnit                     pmProcessorLoad
*********************************************
TdmTermGrp                     pmNrOfTdmTermsBusy
                               pmNrOfTdmTermsRej
                               pmNrOfTdmTermsReq
Merci