OVH Cloud OVH Cloud

xls

8 réponses
Avatar
Barsalou
Bonjour

Excusez cette question d'un néophyte, mais j'aimerais savoir comment lire en
VB6 le contenu d'une cellule d'un document Excel.

Merci d'avance

8 réponses

Avatar
Jean-marc
Barsalou wrote:
Bonjour

Excusez cette question d'un néophyte, mais j'aimerais savoir comment
lire en VB6 le contenu d'une cellule d'un document Excel.

Merci d'avance



Hello,

C'est tout simple :-)

Il y a 2 façons possible, selon que tu veuilles faire du
early binding ou du late binding.
Voir à ce sujet :
http://faq.vb.free.fr/index.php?question4

Mais plus concrètement, voici comme faire (en early binding) :

La première chose à faire est d'inclure une référence à Excel
dans ton projet :
Menu Projet, Références, chercher "Microsoft Excel 10.0 Object Library"
(la version peut différer selon ce qui est installé sur la machine,
pas de soucis).

Puis dans le code :

'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
Dim celluleA1 As String
Dim celluleB2 As String

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:toto.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)

celluleA1 = wsExcel.Cells(1, 1)
celluleB2 = wsExcel.Cells(2, 2)


Voila, espérant que cela t'aide :-)


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Barsalou
Exactement ce que je cherchais !
Merci beaucoup.
Avatar
Barsalou
Un problème cependant: pas de Microsoft Excel 10.0 Object Library dans les
références.
La seule chose d'approchant est Microsoft Office 10.0 Object Library.
Est-ce que cela suffit ?
Sinon comment faire ?

Merci encore
Avatar
Daniel AUBRY
Bonjour,

le problème en mettant une référence à Excel :
si tu changes de version ton programme ne fonctionne plus !!

Ci dessous le code que j'utilise avec des versions différentes d'Excel.

Je lis des données dans un classeur protégé, donc ouverture du fichier,
déprotection, récup des infos, fermeture du fichier.

'Récup du chemin "Mes Documents"
CheminDocument = GetSpecialFolder(CSIDL_PERSONAL)

NomFichierCotisation = ""
Dialogue.CancelError = False
Dialogue.DialogTitle = "Sélection d'un fichier de cotisations"
Dialogue.InitDir = CheminDocument
Dialogue.Filter = "Fichiers cotisation (*.xls)|*.xls"
Dialogue.ShowOpen
NomFichierCotisation = Dialogue.FileName

If NomFichierCotisation = "" Then Exit Sub

Screen.MousePointer = vbHourglass

'Création de l'objet Excel
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.DisplayAlerts = False
AppExcel.Application.Visible = False

'Ouverture du fichier
AppExcel.Application.Workbooks.Open NomFichierCotisation

'Déprotection de la feuille
AppExcel.ActiveSheet.Unprotect ("MonMotDePasse")

'Lecture du repère
LigneExcel = 1
ColonneExcel = 1
Repere = Mid(AppExcel.Worksheets(1).Cells(LigneExcel, ColonneExcel).Value,
1, 1)

If Repere <> "A" Then
MsgBox "Ce fichier n'est pas un fichier de cotisations !!", vbCritical,
NomEtVersion
AppExcel.Workbooks.Close
AppExcel.Quit
Set AppExcel = Nothing
Screen.MousePointer = vbArrow
Exit Sub
End If

'Lecture de l'année
AnneeCotisation = Mid(AppExcel.Worksheets(1).Cells(LigneExcel,
ColonneExcel).Value, 3, 4)

'Lecture du titre
Titre = AppExcel.Worksheets(1).Cells(LigneExcel, ColonneExcel + 1).Value

If Len(Titre) < 11 Then
MsgBox "Ce fichier n'est pas un fichier de cotisations !!", vbCritical,
NomEtVersion
AppExcel.Workbooks.Close
AppExcel.Quit
Set AppExcel = Nothing
Screen.MousePointer = vbArrow
Exit Sub
End If

'Lecture d'autres infos dont je te fais grace

'Fermeture du fichier et quitter Excel
AppExcel.Workbooks.Close
AppExcel.Quit
Set AppExcel = Nothing

MsgBox "Mise à jour terminée !!", vbInformation

Screen.MousePointer = vbArrow

Dany


"Barsalou" a écrit dans le message de
news:
Un problème cependant: pas de Microsoft Excel 10.0 Object Library dans les
références.
La seule chose d'approchant est Microsoft Office 10.0 Object Library.
Est-ce que cela suffit ?
Sinon comment faire ?

Merci encore


Avatar
Jean-marc
"Daniel AUBRY" wrote in message
news:45d3f40b$0$25655$
Bonjour,

le problème en mettant une référence à Excel :
si tu changes de version ton programme ne fonctionne plus !!

Ci dessous le code que j'utilise avec des versions différentes d'Excel.



Hello Daniel,

C'est effectivement une bonne solution, c'est celle qui est connue
comme étant "Late Binding".

La FAQ a une petite entrée à ce sujet:
http://faq.vb.free.fr:80/index.php?question4


--
Jean-marc
Avatar
Driss HANIB
Salut Jean Marc..

justement quelle est la meilleure solution ?

Driss

"Jean-marc" a écrit dans le message de
news:er1hhm$phs$
"Daniel AUBRY" wrote in message
news:45d3f40b$0$25655$
> Bonjour,
>
> le problème en mettant une référence à Excel :
> si tu changes de version ton programme ne fonctionne plus !!
>
> Ci dessous le code que j'utilise avec des versions différentes d'Excel.

Hello Daniel,

C'est effectivement une bonne solution, c'est celle qui est connue
comme étant "Late Binding".

La FAQ a une petite entrée à ce sujet:
http://faq.vb.free.fr:80/index.php?question4


--
Jean-marc





Avatar
Jean-marc
Driss HANIB wrote:
Salut Jean Marc..

justement quelle est la meilleure solution ?



Hello Driss,

Je ne peux que répéter ce qui est dit dans la FAQ
http://faq.vb.free.fr:80/index.php?question4

Disons que le eraly binding est plus efficace et plus commode
pendant la conception, alors que le late binding permet
(dans une certaine mesure) d'éviter les conflits de Version.

Quand tu fais:

Dim xl As Excel.Application

Il faut avoir inclut la référence à une version particulière d'Excel,
qui ne sera peut être pas la version installée lors du déploiement sur
la machine cible.

Alors qu'en Late Binding, la question ne se pose pas.

Tu fais juste :
Dim xl As Object
Set xl = CreateObject("Excel.Application")

C'est lors de l'exécution que le programme créera l'objet, en
prenant sur la machine cible la version d'Excel disponible.

Evidemment, c'est beaucoup plus lent, ce qui peut être ou non un
problème: pour certaines applis, les performances ne sont tout
simplement pas importantes.

Disons qu'en règle générale, on essaie de préférer le early binding.
Si l'appli doit être massivement déployée en environnement hétérogène,
on choisira sans doute le Late binding. Si les perfs sont critiques,
on pourra toujours construire des packages de dépoiement distincts, par
version d'Excel, en ayant tout remis en Early binding.

Si tu développes une appli perso (destinée à tourener sur ta machine ou
sur des machines dont tu connais la version d'Excel) => early binding.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Driss HANIB
Ok Jean Marc
je comprends mieux.
je suis pour ma part plus dans le "developpement" d'applis perso ou dans un
contexte de PME où l'archi est à peu près constante
Merc i pour tes conseils toujours éclairés

Driss

"Jean-marc" a écrit dans le message
de news:er25pq$955$
Driss HANIB wrote:
> Salut Jean Marc..
>
> justement quelle est la meilleure solution ?

Hello Driss,

Je ne peux que répéter ce qui est dit dans la FAQ
http://faq.vb.free.fr:80/index.php?question4

Disons que le eraly binding est plus efficace et plus commode
pendant la conception, alors que le late binding permet
(dans une certaine mesure) d'éviter les conflits de Version.

Quand tu fais:

Dim xl As Excel.Application

Il faut avoir inclut la référence à une version particulière d'Excel,
qui ne sera peut être pas la version installée lors du déploiement sur
la machine cible.

Alors qu'en Late Binding, la question ne se pose pas.

Tu fais juste :
Dim xl As Object
Set xl = CreateObject("Excel.Application")

C'est lors de l'exécution que le programme créera l'objet, en
prenant sur la machine cible la version d'Excel disponible.

Evidemment, c'est beaucoup plus lent, ce qui peut être ou non un
problème: pour certaines applis, les performances ne sont tout
simplement pas importantes.

Disons qu'en règle générale, on essaie de préférer le early binding.
Si l'appli doit être massivement déployée en environnement hétérogène,
on choisira sans doute le Late binding. Si les perfs sont critiques,
on pourra toujours construire des packages de dépoiement distincts, par
version d'Excel, en ayant tout remis en Early binding.

Si tu développes une appli perso (destinée à tourener sur ta machine ou
sur des machines dont tu connais la version d'Excel) => early binding.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/