Importation texte placé entre des caractères définis

Bonjour le forum

J'utilise une macro qui me récupère dans plusieurs fichiers txt des bouts de données situés sur la même ligne que des textes définis.

Exemple:

Je veux récupérer dans tous les fichiers txt la date de l'essai.

Les fichiers texte se présentent ainsi:

"Date de l'Essai","09/02/2012","3"

La macro récupère :

","09/02/2012","3"

Ensuite je suis obligé de "nettoyer" le résultat avec des bouts de code pour ne retrouver que 09/02/2012.

Celà fonctionne mais cela alourdi pas mal la macro.

Existe il un moyen de récupérer les données situées entre les deux "," tout en conservant le lien avec les textes définis.

Je n'arrive pas à le faire.

Dans le fichier zippé il y a un classeur excel avec la macro dans le module 1 ainsi qu'un des fichiers texte.

Je vous remercie pour toute aide.

6recup-texte.zip (39.96 Ko)

salut

j'ai pas télécharger tes pièces jointes, j'ai placé "Date de l'Essai","09/02/2012","3" en cellule A1 et écrit le code ci-dessous pour extraire la date, ca te va ?

t = Range("a1")
t1 = Mid(Split(t, ",")(1), 2, 10)

MsgBox t1'pour controle

a plus

Bonjour à tous

Bonjour Hervé.

D'abord un grand merci pour l'attention que tu portes à mon problème.

Je commence par rattraper un oubli sur mon premier post.

La macro qui est intégrée au classeur joint ma été aimablement fournie par l'excellent h2s04 dans le post ci-dessous.

https://forum.excel-pratique.com/excel/recuperation-textes-definis-t48677.html

J'espère qu'il me pardonnera de na pas l'avoir cité de suite.

Pour en revenir à mon souci, je pense que le bout de code que tu m'a fourni hervé pourra m'être utile dans la partie "nettoyage de la macro (là où je supprime les caractères inutiles).

En fait il faudrait que ton bout de code puisse être intégré directement dans le code qui récupère les diverses données pour éviter de faire le nettoyage une fois les données inscrites dans la feuille excel.

Voilà ci-dessous le code complet que j'utilise (recherche des données + nettoyage des caractères en trop):

Option Explicit
Sub test()

Dim temps As String
Dim entete
Dim Feuil2 As Object
Dim dernière_colonne As String
Dim Chemin As String
Dim S As String
Dim s1 As String
Dim fichier As String
Dim ligne As String
Dim tablo As String
Dim i As Integer
Dim paramètre As String
Dim contenu_cellule As String
Dim objShell As Object
Dim objFolder As Object
Dim trouvé As Boolean

Dim vTa, vTb, z&

 Application.ScreenUpdating = False

' Résultat feuille avec paramètres et résultats
      Set Feuil2 = Worksheets("Feuil2")

'chemin= emplacement où chercher les fichiers
'Ouvre l'explorateur windows pour rechercher les fichiers
      Chemin = Application.GetOpenFilename("Text Files (*.3R_RESULTAT), *.3R_RESULTAT")
      Chemin = Dir(Chemin & "*.3R_RESULTAT")

      temps = Timer

'Inscrit en entête de colonne les paramètres recherchés
      With Sheets("Feuil2").Select
      entete = Array("Date de l'Essai", "Heure de l'Essai", "Résistance théorique", "Contrôleur", _
      "Pince Testée", "N° de la pince", "pérateur", "Section du câble", "Réglage de la pince", "Force Maxi")
      Range("A1:J1") = entete

' dernière_colonne = dernière colonne utlisée dans Feuil1 en partant de la colonne ZA1
      dernière_colonne = Feuil2.Range("ZA1").End(xlToLeft).Column
      Set objShell = CreateObject("Shell.Application")

' fichier contient le nom du premier fichier correspondant au filtre
      fichier = Dir(Chemin)

' ligne = pointeur de ligne en cours sur Feul1
'ligne = 1 correspond aux entêtes
      ligne = 1

 'tant qu'il y a un fichier
      While fichier <> ""
      trouvé = False
 ' on ouvre le fichier
      Open Chemin & fichier For Input As #1

' on charge le contenu du fichier dans un tablo
      While Not EOF(1)
      Line Input #1, tablo

 ' on parcourt tous les paramètres
      For i = 1 To dernière_colonne

 ' paramètre est le paramètre en cours
      paramètre = Feuil2.Cells(1, i)

 ' on cherche les paramètres dans le tablo
      S = InStr(UCase(tablo), UCase(paramètre))

 ' on a trouvé un paramètre dans le tablo
 ' contenu_cellule est le contenu inscrit dans les cellules de Feuil1
 ' conformément ausx paramètres recherchés (entêtes)
      If S <> 0 Then
      If trouvé = False Then trouvé = True: ligne = ligne + 1
      contenu_cellule = Mid(tablo, S + Len(paramètre))

 ' on met contenu_cellule dans Feuil1 après l'avoir "nettoyé"
      Feuil2.Cells(ligne, i) = Application.WorksheetFunction.Clean(Trim(Replace(Replace(contenu_cellule, "=", ""), ";", "")))
      contenu_cellule = ""
      Exit For
      End If
      Next i
      Wend
      Close 1

 ' on prend le fichier suivant qui correspond au filtre
      fichier = Dir()
      Wend
      Set Feuil2 = Nothing

'Déplacement de la colonne Résistance théorique à côté de Force maxi
      vTa = Array(3)
      vTb = Array(10)
      For z = LBound(vTa) To UBound(vTa)
      Columns(vTa(z)).Cut
      Columns(vTb(z)).Insert Shift:=xlToRight
      Next

'Suppression des caractères en trop
       Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        OtherChar:="""", FieldInfo:=Array(Array(0, 9), Array(3, 4), Array(13, 9)), _
        TrailingMinusNumbers:=True

    Columns("B:B").Select
    Selection.Replace What:=""",""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="4""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Columns("F:F").Select
    Selection.Replace What:="échantillon", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Range("C:C,D:D,E:E,F:F,G:G,I:I").Select
    Range("I1").Activate
    Selection.Replace What:=""",""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="1""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Columns("G:G").Select
    Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

    Columns("H:H").Select
    Selection.Replace What:=""",""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="1""", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Columns("J:J").Select
    Selection.TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="""", FieldInfo:=Array(Array(1, 9), Array(2, 9), Array(3, 2), Array(4, 9), Array(5 _
    , 9), Array(6, 1)), TrailingMinusNumbers:=True
    Selection.TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

'Efface la première ligne
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp

'Tri ascendant de la colonne A avec B (Date / heure)
   Sheets("Feuil2").[A1].Sort Key1:=Sheets("Feuil2").[A1], Order1:=xlAscending, _
       key2:=Sheets("Feuil2").[B1], Order2:=xlAscending, Header:=xlGuess

'Copie le tableau dans la feuille Résultats à la suite des autres
    Range("A1:J" & Range("A65536").End(xlUp).Row).Copy _
    Sheets("Résultats").Range("A65536").End(xlUp)(2)

'Efface les cellules en Feuil2
    Cells.Delete Shift:=xlUp

 End With

'Sélectionne la feuille Résultats
 Sheets("Résultats").Select

 'Quadrillage du tableau actif
    Range("A2").Select
    Selection.CurrentRegion.Select
    With Selection.Borders
    .Weight = xlThin
    End With

'Colore en rouge le résultat qui est < à la valeur théorique
For i = Range("J" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Range("J" & i).Offset(, -1) > Range("J" & i) Then
       Cells(i, 10).Interior.ColorIndex = 3
        End If
    Next

'Colore en orange le résultat qui est = à la valeur théorique
For i = Range("J" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Range("J" & i).Offset(, -1) = Range("J" & i) Then
       Cells(i, 10).Interior.ColorIndex = 45
        End If
    Next

  MsgBox Timer - temps

End Sub

Je vais essayer d'intégrer ton code

Merci encore

Bonne journée à tous

Bonjour à tous

j'ai un peu avancé sur mon problème.

J'ai modifié le "nettoyage" effectué lors de l'importation des données:

Clean(Trim(Replace(Replace(contenu_cellule, "=", ""), ";", "")))

devient:

 Clean(Trim(Replace(contenu_cellule, """,""", " ")))

Du coup toujours avec l'exemple de la date je passe de

"Date de l'Essai","09/02/2012","3"

à

09/02/2012 3"

C'est déjà mieux mais il me reste toujours deux caractères parasites dans toutes les colonne (1" ou 2" ou 3" ou 4")

A suivre!!!

Bonjour le forum

Je reviens à la charge avec mon problème.

quelqu'un a il une idée pour modifier ce bout de code:

 Clean(Trim(Replace(contenu_cellule, """,""", " ")))

Afin que seules les données entre deux "," soit conservées.

Merci

Pas d'idées.

Bonne soirée

Bonjour

J'ai trouvé une solution en rajoutant un bout de code:

Feuil2.Cells(Ligne, i) = Replace((contenu_cellule), """,""", "")
      Cells(Ligne, i) = Left(Cells(Ligne, i), Len(Cells(Ligne, i)) - 2)

Mes données récupérées sont maintenant nettoyées.

Bonne soirée à tous

Rechercher des sujets similaires à "importation texte place entre caracteres definis"