Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraction data

11 réponses
Avatar
Boby Lapointe
Bonjour,

Est-il possible de faire une extraction d'un fichier excel via un script vbs ?
Ou alors d'injecter une macro dans excel et d'exécuter cette macro via un
script vbs ?

Merci d'avance de vos réponse.

Bob

10 réponses

1 2
Avatar
MCI (ex do ré Mi chel la si do) [MVP]
'soir !

L'exemple suivant extrait le contenu de la cellule C3 du document
C:TABLEAU.xls

Dim ex, feuille, contenu
Set ex = CreateObject("Excel.Application")
ex.Application.DisplayAlerts = False
ex.Visible = True
Set feuille = ex.Workbooks.Open("C:TABLEAU.xls")
msgbox(ex.ActiveSheet.Cells(3,3).Value)
ex.Quit()


@-salutations
--
Michel Claveau
Avatar
moi
Boby Lapointe wrote:
Bonjour,

Est-il possible de faire une extraction d'un fichier excel via un
script vbs ? Ou alors d'injecter une macro dans excel et d'exécuter
cette macro via un script vbs ?



Pour extraire des données il faut que le script s'exécute sur une
machine contenant Excel puisque ce derniert est scriptable ( objet
Excel.application )

Pour injecter du code dans un classeur existant ( puis
l'exécuterl'exécuter), c'est possible aussi mais c'est assez
"technique".

Qui plus est, l'objet " VBProject.VBComponents"
change un peu selon la version installée ,
si je me souviens bien.


Exemple en VBA ( facilement adaptable en vbs, donc)
pour créer un module et y déclarer les constante Pi et e
puis y définir une fonction ... qui calcule exp(Pi*x)

============================== Set VBC = Nothing
Set VBC =
ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
VBC.Name = "ModuleTest"
Set VBC = Nothing

With
ActiveWorkbook.VBProject.VBComponents("ModuleTest").CodeModule
.InsertLines 1, "Public Const Pi = 3.14159265358979"
.InsertLines 2, "Public Const e = 2.71828182845905"
End With
With ActiveWorkbook.VBProject.VBComponents("ModuleTest").CodeModule

Lideb = .CountOfLines

.InsertLines Lideb + 1, ""
.InsertLines Lideb + 2, "Public Function Machin(Truc as Double) As
Double"
.InsertLines Lideb + 3, " Machin = e^(Pi*Truc)"
.InsertLines Lideb + 4, "End Function"

End With
============================== Pour ce type de choses "avancées,
mieux vaut voir sur l'excellent NG consacré à Excel ...

Bon courage

HB

Avatar
Fred
Dans : news:,
MCI (ex do ré Mi chel la si do) [MVP] disait :
'soir !


Hello,

Set ex = CreateObject("Excel.Application")


À ce propos, le driver ODBC Excel est-il présent sur une machine sans
Excel ?
Pour de l'extraction, cela pourrait alors peut-être être suffisant.

--
Fred


Avatar
moi
Re,

J'ai Oublié :

1. la constante
vbext_ct_StdModule
vaut 1
(connue en VBA mais pas en VBS)

2; pour que l'accès au code soit possible
la bibli VBIDE doit être "chargée"
(interface VBA ; Menu "Outils" Item "Références ...")

Voilà ce que j'utilisais pour charger VBIDE si nécessaire
et/ou pour la décharger ( période des tests)
C'est pour le chargement qu'il faut faire attention au n° de version
Là ( c'est ancien) cela convenait à Excel 97 et 2000.
(versions 5.0 et 5.3)
pour fonctionner avec des versions plus récentes d'excel
( i.e. moins anciennes ;o)
il faut voir ...
... et peut être modifier
les valeurs possibles de "Major" et "minor" ...
====================================================== Sub PourVBIDE()
Dim r
Dim I As Integer
' petite procédure pour ajouter en VBA une référence à la
' bibliothèque Microsoft Visual Basic For Applications Extensibility

For Each r In ThisWorkbook.VBProject.References
If r.GUID = "{0002E157-0000-0000-C000-000000000046}" Then
VBIDEestIci = True
Exit Sub
End If
Next r


For I = 1 To 0 Step -1
On Error GoTo PaslàI
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", Major:=5, Minor:=3
* I
VBIDEestIci = True

Exit Sub
PaslàI:
Err = 0

Next I

Paslà:
MsgBox " La bibliothèque " & vbCr & _
" Microsoft Visual Basic For Applications Extensibility" & vbCr & _
" n'a pas été trouvée et elle est indispensable", , "Désolé !"
VBIDEestIci = False

End Sub

Sub VireVBIDE()

ThisWorkbook.VBProject.References.Remove _
ThisWorkbook.VBProject.References("VBIDE")

End Sub
========================================================

A+

HB
Avatar
MCI (ex do ré Mi chel la si do) [MVP]
Bonjour !

Ma réponse est un peu normande, et elle pose plus de questions qu'elle
n'apporte de "vrais" réponses.

Je ne sais pas si le driver ODBC est présent, en l'absence d'Excel. Ou,
s'il peut être installé indépendamment.
Mais, le driver ODBC tout seul n'est peut-être pas suffisant. Je
m'explique. Je travaille (beaucoup) avec Paradox. Jusqu'à la version 9,
il était fourni avec un driver ODBC. Ce driver ODBC peut également être
acquis directement chez Intersolv.
Or, si l'installation sur une machine qui n'a pas Paradox fonctionne
fort bien, impossible d'accéder aux données Paradox si ce dernier est
absent. En fait, Paradox DOIT être installé, pour que le driver ODBC
puisse fonctionner complètement.

Donc, il arrive qu'un driver ODBC installé ne suffise pas, pour accéder
aux données. Alors, pour Excel, il faudrait vérifier si on peut être
dans la même situation.


Sinon, avec un fichier .xlsx (Excel-2007), il est possible d'accéder au
contenu, avec des outils XML. (plus .ZIP).


Autre solution : il existe une librairie pour Python, pyexcelerator
(joli, le nom, hein ?), qui permet d'accéder aux fichiers .xls (Excel 97
à 2003, et 2007 en option), directement, sans avoir Excel. On peut même
créer des documents Excel à partir de rien.


Ceci étant, le pilotage d'Excel via OLE-automation
("Excel.application"), est plutôt simple, et relativement performant ;
j'ai écrit une classe Python, qui me permet d'envoyer ou lire 58000
lignes sur 3 colonnes (des codes postaux), en moins de deux secondes (en
mémoire).


Sur ce, l'heure de l'apéro approchant à grand pas, je laisse le groupe
(il y a des priorités...)

@+

Michel Claveau

.
Avatar
Fred
"MCI (ex do ré Mi chel la si do) [MVP]"
a écrit dans le message de
news:
Bonjour !

Ma réponse est un peu normande, et elle pose plus de questions qu'elle
n'apporte de "vrais" réponses.

Je ne sais pas si le driver ODBC est présent, en l'absence d'Excel.
Ou, s'il peut être installé indépendamment.


Je n'y avait pas pensé au moment de poster mais j'ai regardé sur un
serveur entre-temps.
Dans les outils d'administration, sources de données ODBC : il y est.
Ceci dit, j'avais installé la visionneuse XL, alors c'est peut-être un
reliquat.
Autre détail, la dll du pilote est la même que pour Access :
ODBCJT32.DLL et cela, cela laisse penser que c'est bien sur toute
machine Windows.

Sinon, avec un fichier .xlsx (Excel-2007), il est possible d'accéder
au contenu, avec des outils XML. (plus .ZIP).


Oui

Autre solution : il existe une librairie pour Python, pyexcelerator
(joli, le nom, hein ?), qui permet d'accéder aux fichiers .xls (Excel
97 à 2003, et 2007 en option), directement, sans avoir Excel. On peut
même créer des documents Excel à partir de rien.


C'est une librairie de ton cru ? Les documents créés le sont dans quelle
version ? Les format sont connus ? (avant les nouveaux formats xml)

Ceci étant, le pilotage d'Excel via OLE-automation
("Excel.application"), est plutôt simple, et relativement performant
;


Oui, je proposais cette alternative justement pour le cas où l'on
n'aurait pas Excel : sur un serveur par exemple ;-)

j'ai écrit une classe Python, qui me permet d'envoyer ou lire 58000
lignes sur 3 colonnes (des codes postaux), en moins de deux secondes
(en mémoire).


Pour une problématique d'exportation de grande quantité de données vers
XL, après avoir testé l'insertion directe dans les cellules, j'ai
finalement opté pour une exportation temporaire en CSV suivi d'une
ouverture avec Excel.
Mais peut-être mon code n'était-il pas très optimum (en late binding)

Sur ce, l'heure de l'apéro approchant à grand pas, je laisse le groupe
(il y a des priorités...)


Tiens, puique tu en parles, je vais aussi me siffler un godet : à la
tienne !

--
Fred


Avatar
Méta-MCI (MVP)
Re !

Non, pyexcelerator n'est pas de moi.

Voir :
http://sourceforge.net/projects/pyexcelerator
http://www.petersblog.org/node/1105

Perso, j'ai juste écrit une classe pour piloter Excel.Application.

Pour les performances de transfert élevées, au lieu d'envoyer cellule
par cellule, on peut envoyer, depuis Python, une liste entière (en gros,
une liste est un tableau), ou, même, une liste de listes. Du coup, un
seul appel permet de transférer la totalité des données.

@+

MCI
Avatar
Boby Lapointe
Merci à tous de vos réponses, j'ai déjà une macro excel qui m'extrait les
data (voir ci-dessous), comment puis-je l'adapter au vb script ?

Sub Extract_Infos()
'
Dim c As Range, Enrgt As String
Const Chemin = "E:Plan_2Doc"
Open Chemin & "Descrip_term.txt" For Output As #1
For Each c In Range("L1", Range("L65536").End(xlUp))
If c = "E90" Then
Enrgt = c.Offset(, 5) & "," & c.Offset(, -3)
Print #1, Enrgt
End If
Next c
Close #1
'
End Sub



Bonjour,

Est-il possible de faire une extraction d'un fichier excel via un script vbs ?
Ou alors d'injecter une macro dans excel et d'exécuter cette macro via un
script vbs ?

Merci d'avance de vos réponse.

Bob


Avatar
Méta-MCI (MVP)
Salut !

Pour lancer une macro, via "Excel.Application" : .Run(nomDeLaMacro)

@-salutations
--
Michel Claveau
Avatar
Boby Lapointe
Bonjour,

Grace à votre aide, en adaptant mon ancienne macro j'ai pu créé un vbscript
qui pilote Excel dont j'extrait selon un critère, les data qui générent mon
fichier txt.
Merci encore de votre aide.

Bob


Salut !

Pour lancer une macro, via "Excel.Application" : .Run(nomDeLaMacro)

@-salutations
--
Michel Claveau




1 2