Inserer fichier texte automatique sous excel
kronanberg
-
Gord21 Messages postés 928 Statut Membre -
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+
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+
A voir également:
- Inserer fichier texte automatique sous excel
- Fichier bin - Guide
- Fichier epub - Guide
- Insérer liste déroulante excel - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
6 réponses
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.
@+
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.
@+
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
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
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 !
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 !
Pour convertir tes valeurs en nombre, tu ajoutes :
après ta ligne :
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.
@+
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.
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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)
@+
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
@+
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+
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+
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 +
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 ?
@+