Importer un fichier texte dans Excel avec bouton

Importer un fichier texte dans Excel avec bouton - VB/VBA/VBS - Programmation

Marsh Posté le 14-03-2006 à 12:11:36    

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
 

Reply

Marsh Posté le 14-03-2006 à 12:11:36   

Reply

Marsh Posté le 14-03-2006 à 18:56:21    

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
Reply

Marsh Posté le 14-03-2006 à 19:09:24    

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 ;)

Reply

Marsh Posté le 14-03-2006 à 19:33:26    

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... ;)

Reply

Marsh Posté le 15-03-2006 à 02:49:26    

thanks  :D

Reply

Marsh Posté le 16-03-2006 à 12:32:59    

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
Reply

Marsh Posté le 16-03-2006 à 19:30:32    

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

Reply

Marsh Posté le 16-03-2006 à 20:53:38    

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 ;)

Reply

Marsh Posté le 22-03-2006 à 15:55:43    

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
Reply

Marsh Posté le 22-03-2006 à 21:07:23    

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


 
;)

Reply

Marsh Posté le 22-03-2006 à 21:07:23   

Reply

Marsh Posté le 23-03-2006 à 00:24:42    

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

Reply

Marsh Posté le 23-03-2006 à 09:40:38    

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 ;)

Reply

Marsh Posté le 23-03-2006 à 18:59:42    

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
Reply

Marsh Posté le 24-03-2006 à 00:52:12    

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:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed