Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1603 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer un fichier texte dans Excel avec bouton

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Importer un fichier texte dans Excel avec bouton

n°1324959
biglio
Posté le 14-03-2006 à 12:11:36  profilanswer
 

bonjour
voila je voudrais importer un fichier texte via un bouton dans excel
avec la commande "activesheet.querytable.add".
le hic c est que mon fichier n est jamais au meme endroit
il porte toujours le meme nom mais pas le meme repertoire.
j ai reussi a faire afficher dans une cellule en texte l emplacement exacte
du fichier mais il m est impossible de l integrer dans la commande querytable !!!!
voila ma commande qui marche :
 
 
      With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;D:\AAClientsDAO\D5122.Machine Montage Gaines\nomenclature.txt", _
        Destination:=Range("A1" ))
        .Name = "nomenclature_12"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .Refresh BackgroundQuery:=False
    End With
End Sub
 
je voudrais donc que le texte suivant se "genere" en automatique (ce texte se met deja en automatique dans une cellule avant de lancer la commande querytable):  
D:\AAClientsDAO\D5122.Machine Montage Gaines\nomenclature.txt
 
grace a cette commande :  
 
Range("L5" ).Select
    ActiveCell.FormulaR1C1 = "=CELL(""nomfichier"", R[-4]C[-11])"
    Range("L6" ).Select
Range("L6" ).Select
    ActiveCell.FormulaR1C1 = "=REPLACE(R5C12, SEARCH(""["",R5C12), 35, ""nomenclature.txt"" )"
Selection.Copy
Range("L7" ).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    Columns("L:L" ).Select
    Application.CutCopyMode = False
 
MERCI A VOUS
 

mood
Publicité
Posté le 14-03-2006 à 12:11:36  profilanswer
 

n°1325348
juju2k
Posté le 14-03-2006 à 18:56:21  profilanswer
 

Bonjour,
 
tu peux très bien donner l'emplacement de ton fichier (et son nom) depuis une variable.
Voilà comment je procéderai :
 

Dim Repertoire As String
Dim Fichier As String
Dim Chaine As String
 
    ' Le répertoire est dans "A1"
    Repertoire = Cells(1, 1).Value
     
    ' S'il n'y a pas l'anti-slash à la fin, on le rajoute
    If Right(Repertoire, 1) <> "\" Then Repertoire = Repertoire & "\"
     
    ' Nom du fichier (s'il ne change vraiment pas, on peut le laisser dans la macro...
    Fichier = "nomenclature.txt"
     
    ' On créé la chaine qui servira à renseigner la QueryTable
    Chaine = "TEXT;" & Repertoire & Fichier
     
    With ActiveSheet.QueryTables.Add(Connection:= _
        Chaine _
        , Destination:=Range("A1" ))
        .Name = Fichier
 
        ' ...Paramères...
         
    End With


 
Encore que, pour le répertoire, tu devrais plutôt utiliser une InputBox, pour faire simple.
 
edit : ortho


Message édité par juju2k le 14-03-2006 à 18:57:13
n°1325366
biglio
Posté le 14-03-2006 à 19:09:24  profilanswer
 

merci a toi je vais vite tester ca des demain !!!
pour l input box j y ai pense mais je ne sais pa comment
faire........je debute ...je debute.....
 
merci a toi d'avance si tu peux m aider de nouveau
pour l inputbox ;)

n°1325395
juju2k
Posté le 14-03-2006 à 19:33:26  profilanswer
 

Tu peux faire comme cela :
 
 


Dim Repertoire As String
 
    Repertoire = InputBox("Saisissez l'emplacement du fichier : ", "Répertoire" )


Remarque : il n'y a aucune vérification. Attention si l'utilisateur ne rentre rien... ;)

n°1325594
biglio
Posté le 15-03-2006 à 02:49:26  profilanswer
 

thanks  :D

n°1326604
biglio
Posté le 16-03-2006 à 12:32:59  profilanswer
 

petite question de nouveau........vu que j ai mis la fonction inputbox  :D  
j ai introduit dans ma macro une boucle pour gerer
une erreur sur le nom de fichier (erreur de frappe uniquement sur le nom et pas le chemin)
ca marche mais le pb que j ai c est le suivant  
si je fais annuler au lieu de ok ben ca me dit que j ai une erreur
et donc je tourne en rond, car si j ai une erreur ca me redemande le nom
du fichier.....
le plus simple est de faire terminer la marco et la relancer
mais vu que j ai vu le bug .......je veux le regler maintenant :):)
 
merci encore
(j ai un peu contourne le truc en mettant une boite de choix dans le cas d une erreur
mais il faut choisir de recommencer ou pas.......c est bien mais ca m ennerve
de ne pas savoir comment gerer le choix annuler dans un "inputbox"  :pt1cable: )


Message édité par biglio le 16-03-2006 à 12:35:08
n°1326926
juju2k
Posté le 16-03-2006 à 19:30:32  profilanswer
 

Lorsque l'utilisateur clique sur "Annuler", l'InputBox retourne une chaine vide. Tu pourrais utiliser cette information dans ta boucle...

n°1326975
biglio
Posté le 16-03-2006 à 20:53:38  profilanswer
 

oui j ai vu ca !!!
mais le pb c est que si je met cette condition,
quand l utilisateur va entrer un texte vide ca  
fera l equivalent de annuler....pas top ;)
 
mais la boite de choix que j ai mise est pas si mal ....
meme si j aimerai passer par un autre moyen ;)

n°1330294
biglio
Posté le 22-03-2006 à 15:55:43  profilanswer
 

bonjour
voila mon nouveau petit pb !!!
je souhaite recuperer la valeur d une cellule dans une feuille differente (feuil2)
de la feuille en cours (feuil1).
le seul moyen que j ai trouve est le suivant :
 
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 22/03/2006 par ..
'
Dim cellule_a_controler As String
Dim a As String
Dim b As String
Dim resultat As String
 
 
 
Sheets("feuil2" ).Select
cellule_a_controler = Range("A2" ).Value
 
 
Sheets(feuil1).Select
 
If cellule_a_controler = "pas ok" Then
Range("A1" ) = 2
Range("A2" ) = cellule_a_controler
Else
Range("A1" ) = 1
Range("A2" ) = cellule_a_controler
End If
 
 
 
'
End Sub
 
 
n est il pas possible en travaillant dans la "feuil1" de recuperer les valeurs de la "feuil2"
sans aller dans la feuil2 ??? cela pour gagner du temps car je dois
comparer 2 tableaux de 800 lignes (un tableau dans la "feuil1" et un dans la "feuil2" )
je regarde chaques lignes du tableau de la "feuil2" si elles existent dans le tableau de la "feuil1",
si oui je mets alors les donnees de la "feuil2" celluleX dans la "feuil1" celluleY
 
merci d'avance


Message édité par biglio le 22-03-2006 à 16:11:49
n°1330557
juju2k
Posté le 22-03-2006 à 21:07:23  profilanswer
 

Tu n'es pas obligé de sélectionner la feuille : contente-toi de préciser à quelle feuille appartient ton Range. Exemple :

Worksheets("Feuil2" ).Cells(2, 1).Value


 
;)

mood
Publicité
Posté le 22-03-2006 à 21:07:23  profilanswer
 

n°1330714
biglio
Posté le 23-03-2006 à 00:24:42  profilanswer
 

arghhh j ai teste ca mais ....ca a pas marche..........
je reteste ca demain ;) peut etre pas la syntaxe exacte...........
merci

n°1330779
biglio
Posté le 23-03-2006 à 09:40:38  profilanswer
 

bon je viens de tester ca mais helas ca ne marche pas .......
je merdouille dans la syntaxe je pense ou alors c est pas possible
car le pb c est que je veux faire evoluer en auto la cellule !!!!
donc comme cela :
 
Dim cellule_a_controler
Dim a As String
Dim b
 
a = "feuil2"
b = Array(2, 1)   -> j ai essaye avec b = "2, 1" marche pas non plus....
 
cellule_a_controler = Worksheets("feuil2" ).Cells(b).Value   -> si je mets "a" a la place de feuil2 ca marche pas....
 
 
If cellule_a_controler = "2" Then
Range("A1" ) = 2
Range("A2" ) = cellule_a_controler
Else
Range("A1" ) = 1
Range("A2" ) = cellule_a_controler
End If
 
End Sub
 
 
merci a vous pour vos conseils ;)

n°1331274
juju2k
Posté le 23-03-2006 à 18:59:42  profilanswer
 

Cells(b).Value


 
Tu dois donner les coordonnées de la cellule en dur (impossible par String ou dans un tableau).
Ce que tu peux faire, par contre, c'est ça :

Dim Valeur As String
Dim Ligne As Integer
Dim Colonne As Integer
 
    Ligne = 2
    Colonne = 1
    Valeur = Cells(Ligne, Colonne).Value


 
edit : place ton code dans les balises Fixed (bouton "Fixe" quand tu fais ton message), c'est plus clair pour tout le monde ;)


Message édité par juju2k le 23-03-2006 à 19:02:06
n°1331442
biglio
Posté le 24-03-2006 à 00:52:12  profilanswer
 

ok pour les balises je vais regarder ca ;)
 
par contre pour la methode avec ligne et colonne je crois que j ai teste et .....marche pas
en fait si je parametre pas worksheets ca marche avec range et en parametrant la cellule....
je dois gueuniller de temps en temps avec la syntaxe ;)
donc la tout a l air de bien marcher  :D  
merci a toi pour tes conseils !!!
avec un peu de temps ca viens doucement ce vba :pt1cable:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer un fichier texte dans Excel avec bouton

 

Sujets relatifs
Problème pour écrire dans un fichiertexte stocker en pic
Fichier CHM & VB6importer un .ai
Mémoriser partie d'un nom de fichier après dirExcel macro vb urgent
Excel facture vs liste deroulantefichier .dll du type jeu
Variable dans un fichier txtSous win98 j'aimerai lancer un fichier.exe à partir d' un fichier.bat
Plus de sujets relatifs à : Importer un fichier texte dans Excel avec bouton


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR