récuperartion des données d'un txt

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

akramenergie

XLDnaute Occasionnel
Bonjour j'ai besoin de votre aide les amis
je suis entrain de déveloper une macro sur excel
lobjectif de cette macro c de récuperer des exigence d'un document txt mais tous dabord il faut saisire les lettre de cette exigence dans la cellule B2 du fichier excel et puis appuiller sur GO--> pour q'il ouvre le fichier txt et faire une lecture par caractere elorsque il rencontre les lettre demander il rammene toute l'exigence cad :[UTINS_001] et inssi de suite jusq'il finisse la lecture de coument

en ce qui concerne l'ouverture de fichier je l'est déja en téte mais ce ke je sais pas faire c surtou la lecture par caractere
NB le fichier en piéce joint explique ce que je veut faire


un petit aide de votre par svp
 

Pièces jointes

Re : récuperartion des données d'un txt

Bonjour

attention ton fichier texte a un nom bizarre : applic.txt.txt

voici la macro en fonction de ce que j'ai compris.
Code:
Private Sub CommandButton1_Click()
    If Range("B2") = "" Then MsgBox "Pas de selection": Exit Sub
    Dim chemin As String, nom As String, ligne As String, fichier As String
    Dim lig As Integer, col As Integer, drapeau As Boolean
    Dim test As String: test = UCase(Range("B2"))
    
    ' Ouverture du fichier Txt
    chemin = ThisWorkbook.Path ' le chemin est celui du classeur sinon le changer et peut etre le mettre dans une cellule
    nom = "applic" ' le nom du fichier, si ce n'est pas toujurs le meme, le mettre dans une cellule
    fichier = chemin & "\" & nom & ".txt"
    Open fichier For Input As #1 ' ouverture du fichier en mode lecture
    ' Boucle jusqu'à la fin du fichier
    col = 3: drapeau = False
    While Not EOF(1)
        col = col + 1
        Line Input #1, ligne ' on lit la ligne entiere sans tenir compte des separateurs
        If InStr(ligne, "[") > 0 Then ' on cherche le caractere de definition de tache
            lig = Val(Mid(ligne, InStr(ligne, "_") + 1, InStr(ligne, "]") - (InStr(ligne, "_") + 1))) ' recupere la ligne pour mettre la tache en face
            drapeau = True ' on peut maintenant ecrire les lignes du fichier
            col = 3 ' on reinitialise les colonnes
            GoTo suite ' on ne prend pas cette ligne
        End If
        If drapeau = True Then Cells(lig + 1, col) = ligne ' on affecte le texte à la ligne et une ligne par colonne
suite:
    Wend
    Close #1
End Sub
 
Re : récuperartion des données d'un txt

bonjour ,
je t eremerci pour ta proposistion mais il ya un probléme j'ai testé la macro et sur le fichier excel elle me récupere des données qui son juste aprés l'exigence que je doit récuperer 😕
normalement si la macro marche coréctement je doit récuperer dans la premiere collone ce ci :

[UTINS_001]
[UTINS_002]
[UTINS_003]
[UTINS_004]

peut tu me dir comment fair svp
 

Pièces jointes

Re : récuperartion des données d'un txt

re:

lignes en rouge à ajouter, mais je suis de moins en moins sur d'avoir compris

Code:
Private Sub CommandButton1_Click()
    If Range("B2") = "" Then MsgBox "Pas de selection": Exit Sub
    Dim chemin As String, nom As String, ligne As String, fichier As String
    Dim lig As Integer, col As Integer, drapeau As Boolean
    Dim test As String: test = UCase(Range("B2"))
    
    ' Ouverture du fichier Txt
   ' chemin = ThisWorkbook.Path ' le chemin est celui du classeur sinon le changer et peut etre le mettre dans une cellule
    'nom = "applic" ' le nom du fichier, si ce n'est pas toujurs le meme, le mettre dans une cellule
    'fichier = chemin & "\" & nom & ".txt"
    fichier = ThisWorkbook.Path & "\applic.txt"
    
    Open fichier For Input As #1 ' ouverture du fichier en mode lecture
    ' Boucle jusqu'à la fin du fichier
    col = 3: drapeau = False
    While Not EOF(1)
        col = col + 1
        Line Input #1, ligne ' on lit la ligne entiere sans tenir compte des separateurs
        If InStr(ligne, "[") > 0 Then ' on cherche le caractere de definition de tache
            lig = Val(Mid(ligne, InStr(ligne, "_") + 1, InStr(ligne, "]") - (InStr(ligne, "_") + 1))) ' recupere la ligne pour mettre la tache en face
            drapeau = True ' on peut maintenant ecrire les lignes du fichier
            col = 3 ' on reinitialise les colonnes
[COLOR="Red"][B]            Cells(lig + 1, 1) = Mid(ligne, InStr(ligne, "[") + 1, InStr(ligne, "]") - (InStr(ligne, "[") + 1))
            cells(lig + 1,3) = left(ligne,instr(ligne,"[") - 1))[/B][/COLOR]
            GoTo suite ' on ne prend pas cette ligne
        End If
        If drapeau = True Then Cells(lig + 1, col) = ligne ' on affecte le texte à la ligne et une ligne par colonne
suite:
    Wend
    Close #1
End Sub

si ce n'est pas cela, envoie plutot un classeur avec le resultat attendu sur la feuille 2 et un fichier txt un peu plus fourni , dans l'exemple que tu donnes, le fichier txt comprend un seul code qui correspond à la selection

Bonne journée
 
Dernière édition:
Re : récuperartion des données d'un txt

merci Wilfried de ton aide
je te joint un dossier .zip ou tu trouvera mon classeur dans la premiere feuil c'est les résulta de la macro que vous m'avais proposer et la second feuil c'est ce que moi je souhait d'avoir (ce qui me dérenge sur la premiere feuil c'est surtout le text ecrie a droit ca je veut pa q'il apareaisse)


Mérci
 

Pièces jointes

Re : récuperartion des données d'un txt

C bon ca marche en faite il fallait mettre en comentaire deux ligne deux code


mais il ya just un truc a ajouté si jamais mes exigence ne contien pas les crocher comment je peut fair ma recherche

cad : dans le . txt au lieu d'avoire [UTSI_001] j 'ai just UTSI_001
est ce que le fait de mettre dans la cellule B2 UTSI la macro va me faire sortire tout mes exigence :
UTSI_001
UTSI_002
UTSI_003
UTSI_004
...
..
ect
 
Re : récuperartion des données d'un txt

re:

controle sur le caractere "_"

instr(ligne,"_")
l'exigence : mid(ligne,instr(ligne,"_")-len(range("B2").value), len(range("B2").value) + 4)

en fonction de la longueur de saisie
if prend position de "_" - la longueur de B2, sur une longueur de B2 + 4
exemple : B2 = INST, longuer 4, la position du "_" dans la ligne est 24
il prend donc 4 + 4 soit 8 caracteres à partir de la : 24 - 4 soit 20eme position de la ligne
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour