OVH Cloud OVH Cloud

Lecture d'un fichier Excel

2 réponses
Avatar
Stéphane L.
Bonjour,

J'ouvre 1 fichier Excel avec cette méthode :

Dim ds As New DataSet

Dim ma_commande As OleDb.OleDbDataAdapter

Dim ma_connexion As OleDb.OleDbConnection

ma_connexion = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0"
& _

"; data source=" & Me.OpenFileDialog_Importation_MP.FileName & _

"; Extended Properties=Excel 8.0;")

ma_commande = New OleDb.OleDbDataAdapter("Select * from [Feuil1$]",
ma_connexion)

ma_commande.Fill(ds)



Le pb est que le fichier s'ouvre dans Excel.

J'aimerais que cela soit transparent.

Merci d'avance pour votre aide.

--
Cordialement,

Stéphane L

2 réponses

Avatar
Stéphane L.
Ce 1er pb n'est toujours pas réglé que j'en ai déjà 1 autre :)

Le fichier étant volumineux, j'ai pensé faire 1 progressbar.

Mais le temps d'attente se fait surtout sur :

ma_connexion = New OleDb.OleDbConnection...
ma_commande = New OleDb.OleDbDataAdapter...
ma_commande.Fill(ds)

J'ai donc essayé sans succès de mettre la mise à jour de la progressbar dans
1 autre thread :

mon_thread = New Threading.Thread(AddressOf thread_progressbar)

mon_thread.Start()

ma_connexion = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0"
& _

"; data source=" & Me.OpenFileDialog_Importation_MP.FileName & _

"; Extended Properties=Excel 8.0;")

ma_commande = New OleDb.OleDbDataAdapter("Select * from [Feuil1$]",
ma_connexion)

ds = New DataSet

ma_commande.Fill(ds)

mon_thread.Abort()

Avec cette procédure :
Sub thread_progressbar()

Dim compteur_progressbar

Do

Application.DoEvents()

compteur_progressbar = compteur_progressbar + Me.ProgressBar1.Step

If compteur_progressbar > Me.ProgressBar1.Maximum Then

compteur_progressbar = Me.ProgressBar1.Minimum

End If

Loop

End Sub

Mais hélàs, bien sûr, la barre de progression ne se met pas à jour :/

J'ai également essayé de faire le contraire, toujours sans succès :
les 3 lignes de chargement du fichier dans 1 sub thread_lecture_fichier()
et ds le form principal 1 while mon_thread isalive pour mettre à jour la
progressbar
mais là, j'ai fait fin de tâche car il semble que ca ne voulait pas
s'arrêter...

Merci d'avance pour votre aide

"Stéphane L." a écrit dans le message de
news:uWwW%
Bonjour,

J'ouvre 1 fichier Excel avec cette méthode :

Dim ds As New DataSet

Dim ma_commande As OleDb.OleDbDataAdapter

Dim ma_connexion As OleDb.OleDbConnection

ma_connexion = New


OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0"
& _

"; data source=" & Me.OpenFileDialog_Importation_MP.FileName & _

"; Extended Properties=Excel 8.0;")

ma_commande = New OleDb.OleDbDataAdapter("Select * from [Feuil1$]",
ma_connexion)

ma_commande.Fill(ds)



Le pb est que le fichier s'ouvre dans Excel.

J'aimerais que cela soit transparent.

Merci d'avance pour votre aide.

--
Cordialement,

Stéphane L




Avatar
Bil
Je ne sais pas si cela peut t'aider, mais moi j'utilise
un objet Excel qui reste invisible.
(Ajouter une reference Microsoft Excel x Object Library).
Exemple:
(Progres est ma barre de progression sur mon formulaire).

Dim i As Long
Dim NbImp As Long 'Nb de liogne a importer
Dim cnn As ADODB.Connection
Dim Rec As ADODB.Recordset
Dim MonXl As Excel.Application
cnn = New ADODB.Connection
cnn.Mode = ADODB.ConnectModeEnum.adModeReadWrite
'MsgBox("3")
cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:CQNTCGST SaveTraitementCGSTSave.mdb;")
Rec = New ADODB.Recordset
Rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
Rec.LockType = ADODB.LockTypeEnum.adLockOptimistic
'MsgBox("5")
Rec.Open("RECU", cnn,
ADODB.CursorTypeEnum.adOpenDynamic,
ADODB.LockTypeEnum.adLockOptimistic)
MonXl = New Excel.Application
'MsgBox("6")
'MsgBox(Rec.Fields(1).Value)
'Chargement du fichier Excel dans la table RECU
MonXl.Workbooks.Open(Me.TxtChemin.Text)
'MsgBox("7")
'MonXl.Visible = True 'cela rend le fichier excel
visible
'Compte le nb de ligne pour pourcentage
i = 2
Do While MonXl.Cells(i, 6).text <> ""
i = i + 1
Loop
'MsgBox("8")
NbImp = i - 1 - 1 ' car prem lig est le titre
colonne et i+1 dans boucle while
'MsgBox(NbImp)
'Ajout dans la table RECU
Me.Progres.Maximum = NbImp
Me.Progres.Increment(1)
Me.TxtInfo.Visible = True
Me.Refresh()
'MsgBox("9")
i = 2
Do While MonXl.Cells(i, 6).text <> ""
Rec.AddNew()
Rec.Fields("lklo").Value = MonXl.Cells(i,
1).text
Rec.Update()
Me.Progres.Increment(1)
i = i + 1
Loop
Me.TxtInfo.Visible = False
Me.Refresh()
MsgBox("Chargement terminé.",
MsgBoxStyle.Information, "CGST Save")
Me.Progres.Increment(-NbImp)

MonXl.Quit()
Rec.Close()
cnn.Close()
Rec = Nothing
cnn = Nothing
MonXl = Nothing

-----Message d'origine-----
Ce 1er pb n'est toujours pas réglé que j'en ai déjà 1


autre :)

Le fichier étant volumineux, j'ai pensé faire 1


progressbar.

Mais le temps d'attente se fait surtout sur :

ma_connexion = New OleDb.OleDbConnection...
ma_commande = New OleDb.OleDbDataAdapter...
ma_commande.Fill(ds)

J'ai donc essayé sans succès de mettre la mise à jour de


la progressbar dans
1 autre thread :

mon_thread = New Threading.Thread(AddressOf


thread_progressbar)

mon_thread.Start()

ma_connexion = New OleDb.OleDbConnection


("provider=Microsoft.Jet.OLEDB.4.0"
& _

"; data source=" &


Me.OpenFileDialog_Importation_MP.FileName & _

"; Extended Properties=Excel 8.0;")

ma_commande = New OleDb.OleDbDataAdapter("Select * from


[Feuil1$]",
ma_connexion)

ds = New DataSet

ma_commande.Fill(ds)

mon_thread.Abort()

Avec cette procédure :
Sub thread_progressbar()

Dim compteur_progressbar

Do

Application.DoEvents()

compteur_progressbar = compteur_progressbar +


Me.ProgressBar1.Step

If compteur_progressbar > Me.ProgressBar1.Maximum Then

compteur_progressbar = Me.ProgressBar1.Minimum

End If

Loop

End Sub

Mais hélàs, bien sûr, la barre de progression ne se met


pas à jour :/

J'ai également essayé de faire le contraire, toujours


sans succès :
les 3 lignes de chargement du fichier dans 1 sub


thread_lecture_fichier()
et ds le form principal 1 while mon_thread isalive pour


mettre à jour la
progressbar
mais là, j'ai fait fin de tâche car il semble que ca ne


voulait pas
s'arrêter...

Merci d'avance pour votre aide

"Stéphane L." a écrit dans le message de
news:uWwW%
Bonjour,

J'ouvre 1 fichier Excel avec cette méthode :

Dim ds As New DataSet

Dim ma_commande As OleDb.OleDbDataAdapter

Dim ma_connexion As OleDb.OleDbConnection

ma_connexion = New


OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0"
& _

"; data source=" &




Me.OpenFileDialog_Importation_MP.FileName & _

"; Extended Properties=Excel 8.0;")

ma_commande = New OleDb.OleDbDataAdapter("Select *




from [Feuil1$]",
ma_connexion)

ma_commande.Fill(ds)



Le pb est que le fichier s'ouvre dans Excel.

J'aimerais que cela soit transparent.

Merci d'avance pour votre aide.

--
Cordialement,

Stéphane L






.