Inserer fichier texte automatique sous excel

kronanberg -  
Gord21 Messages postés 928 Statut Membre -
Bonjour,

Voila j'ai réalisé une petite application sous excel à partir d'un fichier texte que j'ai rentré avec l'outil "Données -> A partir du texte". Le problème est qu'en utilisant cela on est obligé de prendre toutes les données !

Je cherche donc à l'aide d'une macro à pouvoir automatiser cela et aussi me permettre de sélectionner les lignes du fichiers qui m'intéresse !!

Par exemple dans mon fichier à chaque début de ligne, j'ai une date et une heure !!
Je voudrai pouvoir rentrer les lignes que je sélectionnerai en rentrant une date de debut et une date de fin !!
Mais je ne sais pas si cela est réalisable en VBA !! Comme je m'y connais pas encore trop en excel et VB je demande une petite aide !!

Si quelqu'un à une solution je suis preneur !!

Merci d'avance pour vos réponses !!

a+
Configuration: Windows Vista / Firefox 3.5.8

6 réponses

  1. Gord21 Messages postés 928 Statut Membre 289
     
    Bonsoir,
    Ca semble réalisable.
    Peux-tu mettre un exemple de ton fichier texte (avec cijoint.fr par exemple) et préciser où tu veux insérer ton texte.
    @+
    0
    1. kronanberg
       
      Salut !

      Voici le fichier texte : http://www.cijoint.fr/cjlink.php?file=cj201003/cij7QHnAj3.txt

      Pour l'instant je veux pouvoir l'insérer dans un feuille excel !! je me debrouillerai après pour adapter !!
      Il faut juste pouvoir définir la première cellule dans laquelle le text va être copier.

      Le but est ensuite d'insérer seulement les lignes (du fichier texte) souhaitées. Dans mon cas la deuxième colonne du fichier text correspond à une heure. Je voudrai pouvoir mettre l'heure du début et l'heure de fin et insérer seulement les lignes comprises entre ces 2 heures.

      Voila, merci pour ta réponse !!

      a +
      0
      1. Gord21 Messages postés 928 Statut Membre 289 > kronanberg
         
        Bonsoir,
        Juste quelques précisions, est-ce que tu veux copier les lignes sélectionnées ou les insérer ?
        Autrement dit, si tu choisis d'importer tes données en C3, est-ce que j'insère des lignes ou est-ce que j'écrase ce qu'il y a sur les lignes suivantes ?
        @+
        0
  2. kronanberg
     
    Bonjour,

    Dsl de répondre un peu tard !! Mais merci pour la réponse !!

    En faite le but est d'insérer les lignes sélectionner en écrasant ce qui est présent sur les lignes suivants !
    Je viens de réussir à faire cette partie à l'aide d'un bouton et d'une macro!
    Mais maintenant mon soucis est que je ne peux pas exploiter toutes les valeurs car certaines ne sont pas considérer comme des nombres et donc mes calcul ne se réalise pas !!

    Si tu as une solution pour convertir du texte en nombre à l'aide d'une macro je suis preneur !!

    Merci encore
    0
    1. Gord21 Messages postés 928 Statut Membre 289
       
      Bonjour,
      Pour ton problème de nombres, il faut que tu remplaces tous les points par des virgules (par macro au moment de ton importation).
      Pour l'insertion c'est bon alors ? Ou veux-tu que je te propose quelque chose ?
      0
  3. kronanberg
     
    Ben voila la macro que j'utilise pour l'insertion

    Sub Bouton2_Clic()

    'Declaration des variables
    Dim pathFichierTxt As String, dateD As Long, heureD As Double, dateF As Long, heureF As Double
    Dim tabLine() As String, iLine As Long, test As Boolean
    Dim myFso As Object, txtFile As Object

    'affectation des variables
    pathFichierTxt = Range("D7").Text
    dateD = CDate(Range("D9"))
    heureD = CDate(Range("D10"))
    dateF = CDate(Range("D11"))
    heureF = CDate(Range("D12"))

    'ouverture du fichier
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set txtFile = myFso.OpenTextFile(pathFichierTxt, 1)

    'Application des fonction a la feuille donnees_brutes
    With ThisWorkbook.Sheets("donnees_brut")
    .Cells.ClearContents 'Efface la feuille
    tabLine = Split(txtFile.ReadLine, vbTab) 'lie la première ligne du tableau
    .Range("A1").Resize(1, UBound(tabLine) + 1).Value = tabLine 'copie la première ligne du tableau

    While Not txtFile.AtEndOfStream 'boucle tant que le fichier n'est pas lue entièrement
    tabLine = Split(txtFile.ReadLine, vbTab) 'sauvegarde une ligne dans tabLine
    On Error Resume Next
    test = CDate(tabLine(0)) >= dateD And CDate(tabLine(1)) >= heureD And CDate(tabLine(0)) <= dateF And CDate(tabLine(1)) <= heureF
    If Err.Number <> 0 Then test = False
    On Error GoTo 0
    If test Then 'si le test est bon
    iLine = iLine + 1 'incremente la ligne
    .Range("A" & (iLine + 1)).Resize(1, UBound(tabLine) + 1).Value = tabLine 'copie la ligne de donnees
    End If
    Wend
    End With

    Set txtFile = Nothing: Set myFso = Nothing

    End Sub

    Par contre je sais pas trop ou je dois modifié le code pour remplacer les points par des virgules !
    Mais même les chiffres qui n'ont pas de virgule je n'arrive pas à faire de calcul avec !!

    Donc si tu a une autre solution qui fonctionne mieux je suis preneur !

    Merci encore !
    0
  4. Gord21 Messages postés 928 Statut Membre 289
     
    Pour convertir tes valeurs en nombre, tu ajoutes :

    For i = 0 To UBound(tabLine)
       Range("A" & (iLine + 1)).Offset(0,i).Value = Range("A" & (iLine + 1)).Offset(0,i).Value
    Next i


    après ta ligne :
    .Range("A" & (iLine + 1)).Resize(1, UBound(tabLine) + 1).Value = tabLine 


    Tu fais de même avec ta ligne 1.
    Si ça ne suffit pas, tu peux mettre Range("A1").Value = Val(Range("A1").Value)

    Sinon, une remarque, tu n'as pas initialisé ta variable iLine.
    @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kronanberg
     
    J'ai rajouté le bout de code mais il ne convertie pas mes valeurs en nombres ? Je ne sais pas d'ou ça peut provenir !

    Est - ce que c'est normal d'affecter chaque case avec la même expression ?

    Range("A" & (iLine + 1)).Offset(0,i).Value = Range("A" & (iLine + 1)).Offset(0,i).Value

    Merci pour la réponse.
    0
    1. Gord21 Messages postés 928 Statut Membre 289
       
      Bonsoir,
      J'avais fait un test d'un nombre écrit avec un point et considéré comme du texte. Au départ, je pensais le convertir à l'aide de la fonction Val, mais je me suis rendu compte que ça fonctionnait en réaffectant à chaque cellule sa propre valeur.
      Je regarde pour autre chose.
      @+
      0
    2. Gord21 Messages postés 928 Statut Membre 289
       
      Bonjour,
      Est-ce que cette commande t'ouvre correctement ton fichier ? (ensuite il n'y a plus qu'à prendre les données que te conviennent)

      Workbooks.OpenText Filename:="C:\Temp\cij7QHnAj3.txt" _
              , Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
              xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
              Comma:=False, Space:=False, Other:=False, DecimalSeparator:=".", _
              TrailingMinusNumbers:=True

      @+
      0
  7. kronanberg
     
    Bonjour,

    Merci pour la réponse ! Je vais l'essayer voir si ça fonctionne !
    Mais sinon j'ai trouvé un autre bout de code qui permet d'insérer les valeurs et de les convertir en nombre !

    Il faut juste remplacer la boucle while de l'ancien code par celle ci :

    While Not txtFile.AtEndOfStream 'boucle tant que le fichier n'est pas lue entierement
    tabLine = Split(txtFile.ReadLine, vbTab) 'sauvegarde une ligne dans tabLine
    On Error Resume Next
    test = CDate(tabLine(0)) >= dateD And CDate(tabLine(1)) >= heureD And CDate(tabLine(0)) <= dateF And CDate(tabLine(1)) <= heureF
    If Err.Number <> 0 Then test = False
    On Error GoTo 0
    If test Then 'si le test est bon
    iLine = iLine + 1
    For itab = LBound(tabLine) To UBound(tabLine)
    If itab > 2 Then
    .Cells(iLine + 1, itab + 1).Value = CDbl(Replace(tabLine(itab), ".", ","))
    Else
    .Cells(iLine + 1, itab + 1).Value = tabLine(itab)
    End If
    Next itab
    End If
    Wend

    Le programme met un peu plus de temps mais ça fonctionne et c le principal !!

    Encore merci de ton aide !

    a+
    0
    1. Gord21 Messages postés 928 Statut Membre 289
       
      Bonjour,
      Ta méthode est plus élégante que la mienne dans le sens où elle ne t'impose pas d'importer toutes les données de ton fichier texte (ce qui peut poser problème si tu asplus de 65236 lignes).

      Bonne continuation.
      @+
      0