VB

Résolu
Bonjour,
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

78 réponses

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,
    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+
    1. ok merci pr ton aide je vais tester mtn!! c très gentil de ta part
      1. en fait quand j'ai dit que le fichier doit etre copié c que étant trouvé le mot "ENU" le fichier ne va po etre copié en entier (c a d depuis le début)mais plutot depuis la ligne ou se trouve le mot "ENU".. je donne un exemple le fichier étant de cette forme
        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
        1. Contributeur
          la fin de ce "fragment" c'est la fin du fichier ?
          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.
          1. yeap j'ai ajouté le code pr copier le reste du fichier à la place du texto que tu m'as écrit à moins qu'apparement le code ne marche pas, y'a un débogage.
            pr te clarifier pus le fragment je voulais juste te dire la partie du fichier à copier.
            1. en fait j'ai un autre problème, c'est que quand je copie le texte sur un fichier excel, le copiage ne marche pas comme je l'espérais! il copie le 1èr mot dans la 1ère cellule du fichier excel, le second aussi sans problème, mais dès qu'il arrive au 3ème mot,4ème il commence à copier le reste du fichier dans la mm cellule et ne fait plus de sorte qu'il doit copier chaque mot dans une cellule... à vrai dire ca me tourmente à fond ce genre de truc vu que c'est la 1ère fois que je codifie av le VB....
              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
              1. Contributeur
                J'aprécierais que tu écrive en français si possible.
                Montre les lignes de code que tu a intercallé.
                1. bah en fait j'écris en français, ce que tu as constaté marqué en anglais c'est en fait un exemple du fichier resultat que je dois traiter!! dsl:(
                  repardon si j'abuse de ta gentillesse!!
                  remerci
                  1. Private Sub cmdTextEXCEL_Click()
                    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...
                    1. bon bah ce que je vx mtn: une fonction qui permet de copier ce qu'il ya dans le fichier texte vers un fichier 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
                      1. Contributeur
                        Si c'est pas trop tard...
                        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...
                        1. bah je dis que je sais plus comment te remercier pr ton aide!!!
                          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
                          1. Contributeur
                            de rien, c'était avec plaisir, te reste plus qu'a étudier le code pour le comprendre.
                            A++
                            PS. Je met le poste en résolu. Prochaine fois oublie pas de le faire.
                            1. mettre le poste en resolution??? euuuh je paraitrai idiote quand je te dirai ks q tu voulais dire par ça??
                              1. Contributeur
                                Quand tu est satisfait(e) de la réponse (qu'elle te convient) tu a en haut du topic 2 optionboutons tu clic sur le bouton 'Résolu'
                                A+
                            2. en fait passant vers un autre pb:
                              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
                              1. Contributeur
                                Re..
                                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.

                                1. j'ai déja essayé av cette commande mais ca n'a pas marché!!
                                  autre idée?
                                  1. en fait entre autre j'ai essayé d'integrer cette commande dans le code que tu m'a filé mais ça donne un débogage
                                    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. Bonjour,

                                      Dsl de m'incruster. Juste une petite précision. Mya quand tu dis : "ouvrir un fichier" c'est pour lancer l'application pour visualiser le fichier (ex: le Bloc-Note pour les fichier .txt) ou pour écrire/lire dans un fichier ?

                                      ;o)
                                      • 1
                                      • 2
                                      • 3
                                      • 4