Transfert de données d'un fichier texte a excel [Résolu]

Signaler
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009
-
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009
-
Bonjour tout le monde!!


Je suis débutant en programmation VB Excel et je dois réaliser une procédure que je n'arrive pas a faire.


La situation :


Je possède deux fichiers. Un fichier texte avec des données séparrées par des points virgules ("val1;val2;val3....")et un fichier Excel possédant plusieurs feuilles.
Je voudrais ajouter les données du fichier texte a la fin d'une feuille du Workbook excel.




Voila ce que j'ai fait :


Sub fonction()


Dim Liste As ListBox
Dim stRep
Dim oFSO, oF
Dim g
Dim p() As String
Dim appExcel As Excel.Application
Dim wbExcel As Excel.Workbook
Dim wsExcel As Excel.Worksheet




                Set appExcel = CreateObject("Excel.Application")
                Set wbExcel = appExcel.Workbooks.Open("C:\Documents and Settings\Moi\Bureau\fichier_txt\Monfichier.xls")
                Set wsExcel = wbExcel.Worksheets(1)
               
               
Set oFSO = CreateObject("Scripting.FileSystemObject")
stRep = "C:\Documents and Settings\Moi\Bureau\fichier_txt\\Monfichier.txt"


               


Set f = oFSO.OpenTextFile(stRep, 1)
            i = 0
            While Not f.AtEndOfStream
                g = f.ReadLine
                p() = Split(g, ";")
                r = 1
               
                For Each t In p()
                wsExcel.Cells(i, r) = t
                r = r + 1
                Next
                r = 1
                wbExcel.Close
                appExcel.Quit
  i = i +1
            Wend
           
End sub




J'ai un bug :


'erreur d'execution 1004. 
Erreur définie par l'application ou par l'objet.'      


concernant le


"wsExcel.Cells(i,r) = t"




Si quelqu'un connait la solution a mon probleme et pouvais m'aider ca serait vraiment sympas !
En vous remerciant d'avance.


-xaeris-




 

10 réponses

Messages postés
266
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
30 avril 2009
1
Perso, je crois avoir déjà connu ce genre de prob,

alors je procède toujours ainsi:

ActiveSheet.Range("A1").activate
ActiveCell.Offset(i,r).Select
Selection.Value = t

, je crois que cela marche mieux......

--------------------------------------------------
Toujours + de VB et d'API => APi @ le Loupe
http://apialaloupe.free.fr
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu veux pouvoir écrire les données à la suite, tu ne peux pas mettre une valeur en dur pour i

Essaie plutôt
i = Cells(Rows.Count, "A").End(xlUp).Row + 1
qui te retournera la première ligne vide de la feuille

Et je te conseillerais de donner des noms de variables plus "parlants".
i deviendrait Ligne
r deviendrait Colonne
...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Set wsExcel = wbExcel.Worksheets("SonNom")
ou
Set wsExcel = wbExcel.Worksheets(VariableString)
ou
Set wsExcel = wbExcel.Worksheets("Feuil" & numero)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu initialises i à 0
i = 0La ligne 0 n'existe pas... Soit tu initialises i 1, soit tu mets i i + 1 au début plutôt qu'à la fin de ta boucle.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009

Salut !!
désolé pour le temps de reponse, je ne comptais pas avoir de reponse aussi rapide merci a vous!!!
Mpi , si je met a i = 1, etrangement cela mécreit sur la deuxieme ligne donc g laissé a zéro.

zavier666 ta formule marche trés bien si je n'ai qu'une ligne dans mon fichier texte.
Peux tu m'expliquer la signification de activeSheet.Range("a1").activate et en particulier le Range("a1") ?

merci d'avance !
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
For t = 0 to UBound(p)
    wsExcel.Cells(i, r) = p(t)
...
Next

Mais le i ne doit tout de même pas être à 0... sinon je n'y comprends rien...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009

Rebonjour !!
j'espere que vous avez bien dormi, en ce qui me cncerne la nuit ne m'a pas porté conseil.

j'arrive a ajouter les ligne de tous mes fichiers sauf que elles ne s'ajoute pas a la suite l'une de l'autre mais elle s'écrasent :)

je continue a me demander si le Activesheet.range("a1") ne signifie pas  : " ouvre moi le fichier et positionne toi sur la case a1"
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009

de plus ceci explquerai pourquoi en commencant par i=0 ca marche non ?
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009

héhé c encore moi !

bon la ca commence a marcher, mauis g un soucis ca m'ouvre toujours la meme feuille quelque soit l'index que je mette dans :

Set wsExcel = wbExcel.Worksheets(1)

comment puis je faire pour acceder a la feuille par son nom ( nom de l'onglet en bas )
Messages postés
109
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
22 mai 2009

Super ca commence a bien marcher !!

je vous remercie tous les deux enormement :)

c'était trés gentil a vous de m'aider!

je paufine le code et je le poste sous peu :)

encore merci !!