VB
Résolumya1 Messages postés 352 Statut Membre -
je ss complètement une débutante en VB 6.0 et j'ai une application à réaliser au cours de ma période de stage! le pb que je rencontre mtn est le fait de concrétiser mon algorithme sous VB. je m'explique: la fonction doit me permettre d'extraire un mot d'un fichier(que je dois copier par après en excel cette fonction de copier en excel je l'ai déjà testé et ça marche!) mais moi je vx juste qu'il me copie depuis le mot que je veux: je vous lance mtn mon algorithme dans l'espoir de trouver qq1 qui pourra m'aider à le codifier en VB:
en 1èr lieu j'ouvre le fichier en mode lecture
je déclare des variables : s=chaine de caractère que je dois initialiser par la 1ère chaine du fichier
D=chaine de caractère initialisée tjs par "ENU"(le mot que je cherche dans tous les fichiers)
i= c'est un compteur qui va s'incrémenter
p=de type pointeur qui va pointer sur la 1ère ligne et l'incrémenter a chaque fois qu'il achève la ligne et ne trouvant pas le mot
trouve=une booléenne initialisée à false
je commence la boucle
tant qu'il n'est pas arrivé à la fin du fichier faire:( do while EOF(1)=false)
compare "s" avec "d"
si s==d alors
trouve=true
copier le texte depuis "ENU"
sinon
on incrémente le compteur
on passe à la ligne suivante(à l'aide du pointeur)
fin tant que
SVP j'ai vraiment besoin de votre aide sinon je serai fichue nan mais complètement fichue.
NB: je dois rendre ce projet dans 2jours et il me reste bcp de choses à traiter.. j'ai confiance en vos compétences pr m'aider
Configuration: Windows XP Firefox 2.0.0.6
- VB
- Langage vb - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Vb editor - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Vb inputbox - Astuces et Solutions
78 réponses
- 1
- 2
- 3
- 4
Le problème concerne une débutante en VB6 qui doit extraire un mot précis d’un fichier et l’écrire ensuite dans Excel, en repérant ENU et les mots associés. Des solutions proposées lisent le fichier ligne par ligne, détectent les occurrences commençant par ENU, puis basculent vers Split pour écrire chaque mot dans des cellules Excel. Le code type ouvre le fichier en mode input, lit les lignes, extrait les segments pertinents dans des tableaux TB1 et TB2, puis crée une instance Excel et remplit les cellules. En complément, certains ajustements permettent de choisir le fichier via une boîte de dialogue et d’éviter que tout soit copié sur une seule ligne, tout en prévoyant une gestion des erreurs.
Ton exposé n'est pas vraiment explicite mais j'ai un peu extrapoler et voilà déjà un bout de code pour démarrer.
Sub ChercheENU()
Dim Fich As Integer
Dim s As String
Dim P As Integer, i As Integer
Dim d As String
Dim Trouve As Boolean
'Le fichier doit être ouvert en lecture..
Fich = FreeFile 'N° de fichier libre
'Ca dépend aussi de la façon dont le fichier a été entrer,
'peut nécessité LineInput au lieu de Input.
Open "Chemincomplet\NomFichier.EXT" For Input As #Fich
'Initialise le mot de la recherche
d = "ENU"
P = 1
Do While Not EOF(Fich)
Input #Fich, s
For i = 1 To Len(s) - 2
If Mid(s, i, 3) = d Then
Trouve = True
Exit For
End If
Next i
If Trouve Then
'copier le texte depuis "ENU"...
'j'ai pas compris.
End If
P = P + 1
Loop
End Sub
Note que je n'ai pas su tester n'ayant pas tes fichiers.
tu dit...
A+
Calculation Mode Interfering Transmitter Mixed
Radio Service TV / DVB-T Broadcast
Status considered *
General Data
Program Version 5.2.0
Calculated 29/08/08 14:11
User Name sysadmin
Filename C:\CHIRplus BC 5.0.0\HACA_BC50\DATABASES\TV_WDB\TextFiles\IM_BOUKH674.0_010.txt
Fieldstrength Calculation Settings
Model L&S-VHF/UHF (tuneable)
Receiver Height [m] 10.0
Receiver Polarisation Matched
Rec. Version ITU-R P.526
Diffraction Method Bullington
Tx Mode UHF
Distance factor [dB/km] 0.00000
Diffraction factor 1.00000
Constant [dB] 8.00000
k-Factor (Steady) 1.33333
Calculation macro settings
E_min from TX in use
Calculation macro options
Reference DB TX working DB
Calculate with DB TX info DB
Overrule check not in use
Special status not in use
Reference country MRC
Interf. visible 40
Interf. calculated 40
Interf. considered 40
E_nuisance_min -999.00
Additional TPs not in use
Transm. related TPs not in use
Only marked TX in use
______________________________________________________________________________________________________________
Interf. Transmit. : BOUKHOUALI
Frequency/MHz : 674.000 Chan. : 46
MaxERP kW / dBkW : 3.1623 / 5.000
Longit. / Latit. : 002W34 00 / 34N20 00
Heff Max : 818 Country: MRC
Polarisation : H OS :
Antenna Dir : D Service: DVB-T
Offset : 0 System : C2G
Offsettype : U SFN-ID :
Polarization discr. of -10/-9 dB in use (limited to max -16 dB if both ATD and PD are used !)
Propagation correction of 13.0 dB used for interfered DIGITAL stations
ENU OS TRANSMITTER DIS AZM Z% DIR LONGITUDE LATITUDE E1KW ERP PR IVH ATD f/MHz DF CHA HEFF CTY POL PD SFNID OFF OT S TS PROGRAM REMARKS
84.5 BR MELILLA CANADA HIDUM 111.9 341.3 0 D 002W57 45 35N17 08 39.5 5.0 40 0 0.0 671.25 0 46 797 E H 0 0 N G S
après l'éxecution de l'algo (et trouvant le mot ENU) il ne doit copier que ce fragment:
ENU OS TRANSMITTER DIS AZM Z% DIR LONGITUDE LATITUDE E1KW ERP PR IVH ATD f/MHz DF CHA HEFF CTY POL PD SFNID OFF OT S TS PROGRAM REMARKS
84.5 BR MELILLA CANADA HIDUM 111.9 341.3 0 D 002W57 45 35N17 08 39.5 5.0 40 0 0.0 671.25 0 46 797 E H 0 0 N G S
Si non, y a-t-il un code en fin de ce fragment ?
Mais le code que je t'ai passer trouve bien le code ENU ???
et si oui, l'endroit où j'ai mis..
'copier le texte depuis "ENU"...
'j'ai pas compris.
Tu devrais ajouter du code pour faire ce que tu veux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpr te clarifier pus le fragment je voulais juste te dire la partie du fichier à copier.
bon bah je sais que j'abuse de ta gentillesse mais si t'as une solution à me filer bah je te serai très reconnaissante.. merci pr tt et dsl pr le dérangement!
cordialement
repardon si j'abuse de ta gentillesse!!
remerci
Dim appli As New Application
Dim ligne As String
Dim ligneExcel As Integer
Dim PointVirgule1, PointVirgule2, pointvirgule3, return1, return2 As Integer
Dim Long1, Long2, Long3, long4 As Integer
Dim i As Integer
Dim Data1, Data2, Data3, data4, data5 As String
Dim stFichier As String
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 = "ENU"
Open "G:\stage\TextversEXCEL\rabat2.txt" For Input As #ff
sContenu = Input$(LOF(ff), #ff)
Close #ff
vara = 1
varb = 2
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))
sValues(lIndex) = 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
'Rendre visible EXCEL
appli.Visible = True
'Créer un nouveau classeur EXCEL initialisé à la ligne 1
appli.Workbooks.Add.Activate
ligneExcel = 1
'Rechercher la position des espaces
PointVirgule1 = InStr(2, ligne, " ")
PointVirgule2 = InStr(PointVirgule1 + 1, ligne, " ")
'Affecter les données à la Data1 et à la Data2
Data1 = Mid(ligne, 1, PointVirgule1 - 1)
Data2 = Mid(ligne, PointVirgule1 + 1, (PointVirgule2 - PointVirgule1 - 1))
'Calculer la longueur de la Data3
Long1 = Len(Data1)
Long2 = Len(Data2)
Long3 = Len(ligne) - (Long1 + Long2 + 2)
'Affecter les données à la Data3
Data3 = Mid(ligne, PointVirgule2 + 1, Long3)
'Affecter Data1, Data2 et Data3 dans les cellules de la feuille 1
With ActiveWorkbook.Worksheets("Feuil1")
.Cells(ligneExcel, 1) = Data1
.Cells(ligneExcel, 2) = Data2
.Cells(ligneExcel, 3) = Data3
ligneExcel = ligneExcel + 1
End With
'Loop
Close
end sub
voilà tt le code de la fonction! mtn le pb est dans la copie des données apparaissant sur le fichier texte vers excel...
le code que j'ai mis ne marche plus, auaparavant (c a d avant que je ne le réctifie en ajoutant le code qui permet de trouver l'occurence "ENU") il me copiait ce qui était sur le fichier texte tt en gardant qq pbs de debogage. là il ne fonctionne plus il ne fait qu'ouvrir le fichier excel sans rien mettre dedans....
si tu px encore m'aider dans ça je te serai en pleine gratitude
NB: ce code ne fait qu'une petite partie d'un grand tout(une petite partie de se que je dois effectuer en periode de mon stage) là je ss très anéantie et stressée psq je dois rendre l'application demain matin (enfin cette partie) STP si tu px m'aider mtn :s???
MERCI
Ca met la fin du fichier dans un classeur Excel, seul inconnue, ton fichier.
Mais j'ai testé et fonctionne impec en créant un fichier avec les données que tu donne plus haut.
Je suppose que tu a déjà ajouter la référence Excel ?
sinon, ajoute Microsoft Excel X.X object library.
Private Sub cmdTextEXCEL_Click()
Dim EX As New Application
Dim Book As Workbook
Dim Feuille As Worksheet
Dim i As Integer
Dim ff As Integer
Dim Contenu As String
Dim TB
Dim s As String
Dim P As Integer
Dim d As String
Dim Trouve As Boolean
ff = FreeFile
Open "G:\stage\TextversEXCEL\rabat2.txt" For Input As #ff
Contenu = Input$(LOF(ff), #ff)
Close #ff
'initV
'Contenu = Transfert
d = "ENU"
For i = 1 To Len(Contenu) - 2
If Mid(Contenu, i, 3) = d Then
Trouve = True
Exit For
End If
Next i
If Trouve Then
s = Mid(Contenu, i)
TB = Split(s, " ")
P = UBound(TB)
End If
Set EX = CreateObject("Excel.application")
EX.Visible = True
Set Book = EX.Workbooks.Add
Set Feuille = Book.Sheets(1)
With Feuille
For i = 0 To UBound(TB)
.Cells(1, i + 1) = TB(i)
Next i
End With
End Sub
tu dit...
tu m'as tellement aidé que je ne puis me priver de te redire merci merci merci mille nan des billiards merci pr ton aide..
je n'oublierai jamais ton grand coup de main..
vraiment un grand chapeau pr toi t le meilleur
A++
PS. Je met le poste en résolu. Prochaine fois oublie pas de le faire.
là j'ai codifié une fonction qui permet d'ouvrir un fichier qq soit son extension à l'aide d'une boite de dialogue, g réussi à ouvrir la boite de dialogue et laisser le choix à l'utilisateur de choisir le fichier qu'il veut, mtn le pb est dans l'ouverture du fichier lui il ne s'ouvre pas quand tu clique sur le bouton ouvrir, un coup de main§?
voici le code
Private Sub ouvrir_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & "(*.txt)|*.txt|Batch Files (*.bat)|*.bat|classeur microsoft office excel Files(*.xls)|*.xls"
CommonDialog1.FilterIndex = 2
' ouvrir la boite de dialogue
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Output As #1
'Exit Sub
'Fonction ouvrirunfichier()
Dim strFichier As String
Dim objExcel As New EXCEL.Application
strFichier = "E:\LSMaps_andconfigFiles\Maroc_100m_Ext\dtm"
objText.Documents.Open strFichier
' rendre Word visible
Open stFichier + " " For Input As #1
objText.Visible = True
' fermer le document
'objText.Documents(1).Close
' quitter l'application Word
'objText.Quit
'End Function
ErrHandler:
'appuyer sur le bouton annuler
Exit Sub
End Sub
Open CommonDialog1.FileName For Output As #1 ? = entrer des données
Tu doit mettre
Open CommonDialog1.FileName For input As #1
Mais fonctionnera pas avec tout les fichiers.
le code copie très bien à moins qu'il le fait dans une seule ligne chose que je vx po à vrai dire je vx qu'il me copie chaque mot dans une cellule. j'ai pensé en 1èr lieu de lire tte la ligne et la copier dans la 1ère ligne du fichier excel et quand il trouve la fin de la 1ère ligne il passe à la suivante ainsi de suite mais ca na po marché: px tu m'aider encore§?
voilà le code
do while EOF(ff)=false
While Not atendofline
For i = 0 To UBound(TB)
.Cells(1, i + 1) = TB(i)
Next i
Wend
loop
cela donne un débogage sur .cells(1,i+1)=TB(i) ainsi qu'il ne connait pas le num du fichier!!
:s :(
- 1
- 2
- 3
- 4