VBA Import txt -> excel

IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010 - 31 août 2010 à 10:31
IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010 - 12 oct. 2010 à 14:03
Bonjour à tous,

J'ai fait beaucoup de recherches sur le forum sur ce thème et cela m'a bien aidé. mais j'avoue être bloqué depuis 3 jours sur un ptit problème...

J'explique ce qe je veux faire : je souhaite crée un bouton sous access dans un formulaire (OK) qui créee un classeur Excel (OK), et une importation d'une fichier TXT que l'on choisi (PAS OK). En gros je réussis à aller chercher les "chemins" du fichier TXT à importer, mais c'est la première ligne de l'import qui bug. (j'ai trouvé le code de l'import en effectuant une macro sous excel.


Voici mon code (j'ai sulrigné en jaune la ligne BUG):

Sub Commande56_Click()
'Déclaration des variables
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim NomXLS As String
Dim chemin As String
Dim fd As FileDialog
Dim Name As String

'Aller chercher le chemin du fichier .txt à importer
MsgBox "Ouvrez le fichier.txt à importer sous Excel"

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Fichiers TEXT", "*.txt"
If .Show = -1 Then
chemin = .SelectedItems(1) ' place le chemin du fichier dans la variable "chemin"
End If
End With

'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 5)
xlApp.SheetsInNewWorkbook = 1
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'On donne un nom au classeur
NomXLS = InputBox("Entrez le nom du nouveau fichier Excel")
ChDir "C:\Users\jean-françois\Desktop\Thermie"
xlBook.SaveAs (NomXLS)
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = "Données brutes"

'Importer dans la feuille "Données brutes" le fichier txt
With Activatesheets.QueryTables.Add(Connection:="TEXT,chemin", Destination:=Range("A1"))
.Name = "Listevaleurthermie"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False.
.PreserveFormatting = True
.RefreshOnFileOpen = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
End With

xlApp.Visible = True
ChDir "C:\Users\jean-françois\Desktop\Thermie"
ActiveWorkbook.SaveAs FileName:=NomXLS, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

End Sub


Merci d'avance de votre aide et vos précieux conseils !

6 réponses

IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010
31 août 2010 à 17:59
Je précise que mon erreur se situe sur la procédure d'importation :

With Activatesheets.QueryTables.Add(Connection:="TEXT,chemin", Destination:=Range("A1"))

L'eeraur qui apparait est la suivante :
Erreur d'éxecution '424'
Objet requis
0
IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010
1 sept. 2010 à 17:27
Je ne comprend pas.. j'ai pourtant réalisé le code avec une macro... donc il est censé fonctionner...

Je pense que c'est pas grand chose.. surement un probleme au niveau de la déclaration de la feuille excel..

J'ai essayé sa aussi :

xlSheet.QueryTables.Add(Connection:="TEXT,chemin", Destination:=Range("A1"))

Mais sa ne fonctionne pas...

Please aidez-moi,

je suis au bout du..clavier :D

Bonne soirée a vous
0
IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010
2 sept. 2010 à 09:34
Bon bah personne a l'air de me répondre, le forum me semblait pourtant dynamique...

Hésitez pas à me dire si j'ai mal présenté mon sujet, ou si quelque chose ne va pas dans mes posts,je les modifierai...

A+
0
lmlmike Messages postés 22 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 4 juin 2016
2 sept. 2010 à 10:25
Salut,

Disons que pour ma part, le problème que tu présente va au delà de mes maigres compétences en VBA (je viens plus pour des questions que pour aider).

La seule chose que je peux te conseiller, c'est de cibler la nature de ton problème :

Récupère la procédure d'importation de ton fichier texte dans un nouveau bouton, dans lequel tu l'isoles, et executes le pour voir si c'est un problème de syntaxe ou lié à la procédure de ton code.

choisi un autre fichier texte avec un autre contenu pour voir si ce n'est pas lié à ton fichier texte, ou aux permissions d'accès a ton fichier (si le classeur à le droit de lecture).

Et enfin, avec mes maigres recherches j'ai trouvé ça :

 textdata = Application.GetOpenFilename("Text Files,*.txt")

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & textdata, Destination:=Range("A1"))



Essayes donc par ce moyen en remplaçant la variable textdata par le nom de variable que tu veux, mais je ne vois que ça, je ne m'y connais pas plus, désolé :-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cleanstate Messages postés 1 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 4 octobre 2010
4 oct. 2010 à 10:37
Il y a au moins trois problèmes dans ta ligne de code:
1) Dans "TEXT,chemin", il faut probablement remplacer le chemin par le vrai chemin comme c:\dossie\dossier\fichier.txt"
2) "Range" n'est pas un objet indépendant valide. Si tu voulais adresser un range dans l'objet courant défini avec "with", il faut écrire ".Range".
3) la feuille active se nomme ActiveSheet, et non "Activatesheets"

Je ne sais pas si ça va marcher avec ces corrections cependant...
0
IDoGeekette Messages postés 7 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 13 octobre 2010
12 oct. 2010 à 14:03
Merci de vos réponses !!

Désolé pour le retard mais le renouvellement de mon contrat a mis du temps.... :S

J'ai bien pris vos suggestions en considération

Le script en tant que tel ne pose plus de probleme c'est à dire qu'aucune erreures n'est déclarées... mais il ne fait rien....il tourne dans le vide....

Voici mon nouveau script :

Sub Import(CheminXLS)
  Dim xl_app As Excel.Application
Dim objexcel As Object, xlSheet As Object
Dim xlSheet2 As Worksheet
Dim Sh As String

With xl_app
'Set objexcel = Appli.Workbooks.Open(c:\projet.xls")
'Set objexcel = workbook.Open("URL")

Set AppExc = CreateObject("Excel.Application")
AppExc.Visible = False
Set objexcel = AppExc.Workbooks.Add(CheminXLS)
Set xlSheet2 = objexcel.Sheets("Données brutes")
Set xlSheet2 = ActiveSheet
End With

'Importer dans la feuille "Données brutes" le fichier txt
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Lientemp.Value, Destination:=xlSheet2.Range("A1"))
        .Name = "ouvrirtxt2"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
End With
    AppExc.Visible = True
End Sub



La je suis carrément bloqué !
Faudrait aussi que je définisse le nom du fichier text en variable...

A bientôt !
0
Rejoignez-nous