OVH Cloud OVH Cloud

Vbs qui pilote Excel

16 réponses
Avatar
sympatix
Bonjour !

Depuis un script VBS, je voudrais, à l'aide d'une boucle, récupérer dans une
variable (A), le texte contenu dans 6 cellules horizontales (dans mon cas,
A2, à F2), de la première feuille (et unique) d'un fichier Excel, et refaire
ça à chaque fois pour les 6 cellules en dessous (donc, A3 à F3, puis A4 à
F4, etc...), j'usqu'à la fin du fichier Excel.

(Mon but est en fait d'importer séparément dans un fichier texte, chaque
ligne à la fois, pour pouvoir les traiter individuellement par la suite).

Pour l'instant tout ce que je sais faire, c'est ouvrir le fichier Excel (je
sais, c'est peu..., mais je ne suis pas trop familiarisé avec EXcel
Application)

----------------
Fichier = "F:\toto.xls"
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
oXL.Workbooks.Open Fichier
----------------

Merci d'avance
Cordialement
Sympatix

10 réponses

1 2
Avatar
Alain CROS
Bonjour.

Peut être ça ?

Set oXL = WScript.CreateObject("EXCEL.application")
With oXL
.Workbooks.Open "F:toto.xls"
.ActiveWorkbook.SaveAs "F:toto.txt" , 20
.DisplayAlerts = False
.Quit
End With
Set oXL = Nothing
MsgBox "F:toto.txt sauvegardé"

Alain CROS

"sympatix" a écrit dans le message de news:
Bonjour !

Depuis un script VBS, je voudrais, à l'aide d'une boucle, récupérer dans une
variable (A), le texte contenu dans 6 cellules horizontales (dans mon cas,
A2, à F2), de la première feuille (et unique) d'un fichier Excel, et refaire
ça à chaque fois pour les 6 cellules en dessous (donc, A3 à F3, puis A4 à
F4, etc...), j'usqu'à la fin du fichier Excel.

(Mon but est en fait d'importer séparément dans un fichier texte, chaque
ligne à la fois, pour pouvoir les traiter individuellement par la suite).

Pour l'instant tout ce que je sais faire, c'est ouvrir le fichier Excel (je
sais, c'est peu..., mais je ne suis pas trop familiarisé avec EXcel
Application)

----------------
Fichier = "F:toto.xls"
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
oXL.Workbooks.Open Fichier
----------------

Merci d'avance
Cordialement
Sympatix














Avatar
sympatix
Peut être ça ?

Set oXL = WScript.CreateObject("EXCEL.application")
With oXL
.Workbooks.Open "F:toto.xls"
.ActiveWorkbook.SaveAs "F:toto.txt" , 20
.DisplayAlerts = False
.Quit
End With
Set oXL = Nothing
MsgBox "F:toto.txt sauvegardé"


Bonjour !

Non, celà ne me convient pas malheureusement...
le problème, c'est je dois délimiter chaque ligne importée, pour qu'elle
fasse partie d'un champ (pour un PDA, en fait)...
il faut donc impérativement que je puisse traiter chaque ligne au fur et à
mesure de l'importation.
(en effet, le pda reconnait chaque champ par un ". Or, en important tout le
fichier en une fois, que ce soit par ta méthode, ou directement sous Excel,
je n'ai pas les " aux bons endroits, et c'est un gros foullis ! )

Merci quand même !
Si tu as d'autres idées, pour faire ça ligne par ligne, je suis preneur !

Cordialement
Sympatix

Avatar
Stephane D
sympatix wrote:
Bonjour !

Depuis un script VBS, je voudrais, à l'aide d'une boucle, récupérer dans une
variable (A), le texte contenu dans 6 cellules horizontales (dans mon cas,
A2, à F2), de la première feuille (et unique) d'un fichier Excel, et refaire
ça à chaque fois pour les 6 cellules en dessous (donc, A3 à F3, puis A4 à
F4, etc...), j'usqu'à la fin du fichier Excel.


Je t'ai fait suivre par mail un script VBS qui modifie tous les fichiers
Excel de plusieurs sous répertoires. Pour commencer j'ai commencé par
faire une macro sous excel puis adapter en vbscript.

@+ Stephane

Avatar
sympatix
bonjour !

Je t'ai fait suivre par mail un script VBS qui modifie tous les fichiers
Excel de plusieurs sous répertoires. Pour commencer j'ai commencé par
faire une macro sous excel puis adapter en vbscript.


Merci...mais, je n'arrive pas à y trouver mon bonheur (je n'ai aucune
expérience en vb d'Excel...)
(Il me faudrais simplement un truc dans le genre (en bon français ;-)

-----Ce que je voudrais, reste à traduire en script /ON------
For Each Ligne de ma feuille active Excel
Ma_variable = La_valeur_de_la _Ligne_de_la_Feuille_Excel
Blablabal...mes instructions...blablabla
Next
-----Ce que je voudrais, reste à traduire en script /OFF------

(à titre d'infos, je met en copier-coller en dessous, le code que tu m'as
envoyé par mail)
Cordialement
Sympatix

-----------------------------
Dim oFSO
Dim oFolder, oSubFolder, oFIle
Dim oXL

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder oFSO.GetFolder("C:CELYAEasyPHPwwwcovapuserfilesrootAdherents")
Set oXL = WScript.CreateObject("EXCEL.application")

For each oSubFolder In oFolder.SubFolders
For each oFile In oSubFolder.Files
If InStr(LCase(oFile.Name), "restealivrer") > 0 Then
oXL.Workbooks.Open oFile.path
oXL.Visible = True
oXL.screenupdatingúlse
oXL.Sheets(1).Select

oXL.Sheets(1).PageSetup.PrintTitleRows = "$1:$1"
oXL.Sheets(1).PageSetup.PrintTitleColumns = ""
oXL.Sheets(1).PageSetup.PrintArea = ""

oXL.Sheets(1).PageSetup.LeftHeader = ""
oXL.Sheets(1).PageSetup.CenterHeader = ""
oXL.Sheets(1).PageSetup.RightHeader = ""
oXL.Sheets(1).PageSetup.LeftFooter = ""
oXL.Sheets(1).PageSetup.CenterFooter = "Page &P de &N"
oXL.Sheets(1).PageSetup.RightFooter = ""
oXL.Sheets(1).PageSetup.LeftMargin = 40 '42.5 points pour 1,5 cm
oXL.Sheets(1).PageSetup.RightMargin = 40
oXL.Sheets(1).PageSetup.TopMargin = 40
oXL.Sheets(1).PageSetup.BottomMargin = 40
oXL.Sheets(1).PageSetup.HeaderMargin = 14
oXL.Sheets(1).PageSetup.FooterMargin = 14
oXL.Sheets(1).PageSetup.PrintHeadings = False
oXL.Sheets(1).PageSetup.PrintGridlines = False
oXL.Sheets(1).PageSetup.PrintComments = -4142 'xlPrintNoComments
oXL.Sheets(1).PageSetup.PrintQuality = 600
oXL.Sheets(1).PageSetup.CenterHorizontally = False
oXL.Sheets(1).PageSetup.CenterVertically = False
oXL.Sheets(1).PageSetup.Orientation = 2 'xlLandscape
oXL.Sheets(1).PageSetup.Draft = False
oXL.Sheets(1).PageSetup.PaperSize = 9 'xlPaperA4
oXL.Sheets(1).PageSetup.FirstPageNumber = -4105 'xlAutomatic
oXL.Sheets(1).PageSetup.Order = 1 'xlDownThenOver
oXL.Sheets(1).PageSetup.BlackAndWhite = False
oXL.Sheets(1).PageSetup.Zoom = False
oXL.Sheets(1).PageSetup.FitToPagesWide = 1 'Adapter à la largeur d'une
page
oXL.Sheets(1).PageSetup.FitToPagesTall = False
oXL.Sheets(1).PageSetup.PrintErrors = 0 'xlPrintErrorsDisplayed

oXL.cells(1,1).select
oXL.ActiveWorkbook.Save
oXL.ActiveWorkbook.close
End If
Next
Next

oXL.Application.Quit

-----------------------------

Avatar
scraper
Bonjour sympatix
(dans news:)
tu nous disais :

Bonjour !

Non, celà ne me convient pas malheureusement...
le problème, c'est je dois délimiter chaque ligne importée, pour
qu'elle fasse partie d'un champ (pour un PDA, en fait)...
il faut donc impérativement que je puisse traiter chaque ligne au fur
et à mesure de l'importation.


eh bien, si tu fais ce que tu suggère Alain, puis ensuite tu rouvre le
fichier F:Toto.txt en lecture seule avec FSO ?
tu pourras le lire ligne par ligne (et les modifier une par une) avec
fso.ReadLine ??

du genre (à adapter) :


'----
Dim fs, Ligne

Set oFS=oFSO.OpenTextFile("F:Toto.txt" , ForReading, True)
While not oFS.AtEndOfStream
ligne=oFS.ReadLine
'Traitement
Wend

Set oFS=Nothing
Set oFSO=Nothing
'----


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

Avatar
Michel Pierron
Bonjour sympatix;

Dim sDrv, sSce, sTgt, oRec, i
Dim oDb, sDbc, sSql, oTxt, sVal

sDrv = "C:"
sSce = sDrv & "ClasseurDeTest.xls"
sTgt = sDrv & "ClasseurDeTest.Txt"

Set oDb = CreateObject("ADODB.Connection")
sDbc = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
sDbc = sDbc & sSce & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
oDb.Open sDbc

Set oRec = CreateObject("ADODB.RecordSet")
oRec.CursorType = 1
oRec.LockType = 3

' Remplacer "Feuil1" par le nom réel de la feuille
sSql = "SELECT * FROM [Feuil1$]"
oRec.Open sSql, oDb

If Not oRec.EOF Then
oRec.MoveLast
oRec.MoveFirst
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
Set oTxt = fso.CreateTextFile(sTgt, True)
Do While Not oRec.EOF
For i = 0 To oRec.Fields.Count - 1
' Adapter le séparateur ";" selon vos critères
If i Then
sVal = sVal & ";""" & oRec.Fields(i) & """"
Else
sVal = """" & oRec.Fields(i) & """"
End If
Next
oTxt.WriteLine (sVal)
oRec.MoveNext
Loop
End If

oRec.Close
oDb.Close
oTxt.Close

MsgBox "Done !", 64, "Excel Reader"
Wscript.Quit

MP

"sympatix" a écrit dans le message de
news:
Bonjour !

Depuis un script VBS, je voudrais, à l'aide d'une boucle, récupérer dans
une

variable (A), le texte contenu dans 6 cellules horizontales (dans mon cas,
A2, à F2), de la première feuille (et unique) d'un fichier Excel, et
refaire

ça à chaque fois pour les 6 cellules en dessous (donc, A3 à F3, puis A4 à
F4, etc...), j'usqu'à la fin du fichier Excel.

(Mon but est en fait d'importer séparément dans un fichier texte, chaque
ligne à la fois, pour pouvoir les traiter individuellement par la suite).

Pour l'instant tout ce que je sais faire, c'est ouvrir le fichier Excel
(je

sais, c'est peu..., mais je ne suis pas trop familiarisé avec EXcel
Application)

----------------
Fichier = "F:toto.xls"
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
oXL.Workbooks.Open Fichier
----------------

Merci d'avance
Cordialement
Sympatix














Avatar
sympatix
Salut !

eh bien, si tu fais ce que tu suggère Alain, puis ensuite tu rouvre le...


Non, justement, c'est là le hic. Si j'importe d'abord tout le fichier excel
dans un fichier texte, je me retrouve avec plein de délimiteurs de champ là
où il ne faut pas, et je n'ai aucun moyen de traiter ça, même ligne par
ligne, après coup (par quels critères vais-je dire au script que tel champ
commence ici, et ainsi de suite...)
Le seul moyen, à mon avis, est de traiter chaque ligne d'excel, au fur et à
mesure de son importation (vu, que, sous excel, chaque ligne me fait
effectivement un champ, je n'ai plus qu'à nettoyer le code des " supperflux,
et de rajouter un " au début, et un " à la fin de ma ligne, de stocker tout
ça en Forappending dans mon fichier texte, et de refaire
cette manip pour chaque ligne du fichier excel).

Cordialement
Sympatix

"scraper" a écrit dans le message de
news:
Bonjour sympatix
(dans news:)
tu nous disais :

Bonjour !

Non, celà ne me convient pas malheureusement...
le problème, c'est je dois délimiter chaque ligne importée, pour
qu'elle fasse partie d'un champ (pour un PDA, en fait)...
il faut donc impérativement que je puisse traiter chaque ligne au fur
et à mesure de l'importation.


eh bien, si tu fais ce que tu suggère Alain, puis ensuite tu rouvre le
fichier F:Toto.txt en lecture seule avec FSO ?
tu pourras le lire ligne par ligne (et les modifier une par une) avec
fso.ReadLine ??

du genre (à adapter) :


'----
Dim fs, Ligne

Set oFS=oFSO.OpenTextFile("F:Toto.txt" , ForReading, True)
While not oFS.AtEndOfStream
ligne=oFS.ReadLine
'Traitement
Wend

Set oFS=Nothing
Set oFSO=Nothing
'----


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper





Avatar
sympatix
Pour être plus clair, chaque ligne dans excel, est en fait une ligne de
*cellules*, et comme j'ai du texte sur plusieurs lignes par cellules, une
fois qu'on importe la totalité du fichier excel dans une fichier texte, ma
ligne initiale de cellule fait plusiuers lignes de texte, et c'est là le hic
(effectivement, si chaque ligne de cellules restait une seule ligne de texte
une fois importée, ta méthode (et celle d'Alain) serait effectivement
valable.

Cordialement
Sympatix
Avatar
sympatix
bonjour !

Je ne sais pas si c'est moi qui suis difficile, mais ce n'est pas encore ça
!
J'aimerais faire ça avec l'objet Excel.Application, car avec l'objet
ADODB.Connection, j'ai du mal à suivre, et comme je ne comprends pas ce que
je fais, je ne peux pas triturer les code à ma guise, et ça me mets mal à
l'aise !

Je pense que je vais reformuler ma question différement, avec un message
transmis également sur excel.fr

Merci
Cortdialement
Sympatix

"Michel Pierron" a écrit dans le message de
news:
Bonjour sympatix;

Dim sDrv, sSce, sTgt, oRec, i
Dim oDb, sDbc, sSql, oTxt, sVal

sDrv = "C:"
sSce = sDrv & "ClasseurDeTest.xls"
sTgt = sDrv & "ClasseurDeTest.Txt"

Set oDb = CreateObject("ADODB.Connection")
sDbc = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
sDbc = sDbc & sSce & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
oDb.Open sDbc

Set oRec = CreateObject("ADODB.RecordSet")
oRec.CursorType = 1
oRec.LockType = 3

' Remplacer "Feuil1" par le nom réel de la feuille
sSql = "SELECT * FROM [Feuil1$]"
oRec.Open sSql, oDb

If Not oRec.EOF Then
oRec.MoveLast
oRec.MoveFirst
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
Set oTxt = fso.CreateTextFile(sTgt, True)
Do While Not oRec.EOF
For i = 0 To oRec.Fields.Count - 1
' Adapter le séparateur ";" selon vos critères
If i Then
sVal = sVal & ";""" & oRec.Fields(i) & """"
Else
sVal = """" & oRec.Fields(i) & """"
End If
Next
oTxt.WriteLine (sVal)
oRec.MoveNext
Loop
End If

oRec.Close
oDb.Close
oTxt.Close

MsgBox "Done !", 64, "Excel Reader"
Wscript.Quit

MP

"sympatix" a écrit dans le message de
news:
Bonjour !

Depuis un script VBS, je voudrais, à l'aide d'une boucle, récupérer dans
une

variable (A), le texte contenu dans 6 cellules horizontales (dans mon
cas,


A2, à F2), de la première feuille (et unique) d'un fichier Excel, et
refaire

ça à chaque fois pour les 6 cellules en dessous (donc, A3 à F3, puis A4
à


F4, etc...), j'usqu'à la fin du fichier Excel.

(Mon but est en fait d'importer séparément dans un fichier texte, chaque
ligne à la fois, pour pouvoir les traiter individuellement par la
suite).



Pour l'instant tout ce que je sais faire, c'est ouvrir le fichier Excel
(je

sais, c'est peu..., mais je ne suis pas trop familiarisé avec EXcel
Application)

----------------
Fichier = "F:toto.xls"
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
oXL.Workbooks.Open Fichier
----------------

Merci d'avance
Cordialement
Sympatix

















Avatar
Isabelle Prawitz
Bonjour et bonne année !

Par exemple

dim MaCell as range
set MaCell¬tiveSheet.Range("A2")
Do while MaCell.value<>""
'Traitement de ma ligne Excel
set MaCell=MaCell.offset(1,0) 'décalage vers le bas
loop

Pour le traitement sur la ligne, ça dépend ce que tu veux faire (même traitement pour toutes les colonnes ou pas !)
Si le traitement est différent, tu peux avoir :
valMaCell=MaCell.value
'Traitement valMaCell
valMaCell=MaCell.offset(0,1).value 'cellule à droite
'Traitement valMaCell
valMaCell=MaCell.offset(0,2).value 'cellule 2 à droite
'Traitement valMaCell
etc...

A+
Isa

"sympatix" a écrit dans le message de news:
bonjour !

Je t'ai fait suivre par mail un script VBS qui modifie tous les fichiers
Excel de plusieurs sous répertoires. Pour commencer j'ai commencé par
faire une macro sous excel puis adapter en vbscript.


Merci...mais, je n'arrive pas à y trouver mon bonheur (je n'ai aucune
expérience en vb d'Excel...)
(Il me faudrais simplement un truc dans le genre (en bon français ;-)

-----Ce que je voudrais, reste à traduire en script /ON------
For Each Ligne de ma feuille active Excel
Ma_variable = La_valeur_de_la _Ligne_de_la_Feuille_Excel
Blablabal...mes instructions...blablabla
Next
-----Ce que je voudrais, reste à traduire en script /OFF------

(à titre d'infos, je met en copier-coller en dessous, le code que tu m'as
envoyé par mail)
Cordialement
Sympatix

-----------------------------
Dim oFSO
Dim oFolder, oSubFolder, oFIle
Dim oXL

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder > oFSO.GetFolder("C:CELYAEasyPHPwwwcovapuserfilesrootAdherents")
Set oXL = WScript.CreateObject("EXCEL.application")

For each oSubFolder In oFolder.SubFolders
For each oFile In oSubFolder.Files
If InStr(LCase(oFile.Name), "restealivrer") > 0 Then
oXL.Workbooks.Open oFile.path
oXL.Visible = True
oXL.screenupdatingúlse
oXL.Sheets(1).Select

oXL.Sheets(1).PageSetup.PrintTitleRows = "$1:$1"
oXL.Sheets(1).PageSetup.PrintTitleColumns = ""
oXL.Sheets(1).PageSetup.PrintArea = ""

oXL.Sheets(1).PageSetup.LeftHeader = ""
oXL.Sheets(1).PageSetup.CenterHeader = ""
oXL.Sheets(1).PageSetup.RightHeader = ""
oXL.Sheets(1).PageSetup.LeftFooter = ""
oXL.Sheets(1).PageSetup.CenterFooter = "Page &P de &N"
oXL.Sheets(1).PageSetup.RightFooter = ""
oXL.Sheets(1).PageSetup.LeftMargin = 40 '42.5 points pour 1,5 cm
oXL.Sheets(1).PageSetup.RightMargin = 40
oXL.Sheets(1).PageSetup.TopMargin = 40
oXL.Sheets(1).PageSetup.BottomMargin = 40
oXL.Sheets(1).PageSetup.HeaderMargin = 14
oXL.Sheets(1).PageSetup.FooterMargin = 14
oXL.Sheets(1).PageSetup.PrintHeadings = False
oXL.Sheets(1).PageSetup.PrintGridlines = False
oXL.Sheets(1).PageSetup.PrintComments = -4142 'xlPrintNoComments
oXL.Sheets(1).PageSetup.PrintQuality = 600
oXL.Sheets(1).PageSetup.CenterHorizontally = False
oXL.Sheets(1).PageSetup.CenterVertically = False
oXL.Sheets(1).PageSetup.Orientation = 2 'xlLandscape
oXL.Sheets(1).PageSetup.Draft = False
oXL.Sheets(1).PageSetup.PaperSize = 9 'xlPaperA4
oXL.Sheets(1).PageSetup.FirstPageNumber = -4105 'xlAutomatic
oXL.Sheets(1).PageSetup.Order = 1 'xlDownThenOver
oXL.Sheets(1).PageSetup.BlackAndWhite = False
oXL.Sheets(1).PageSetup.Zoom = False
oXL.Sheets(1).PageSetup.FitToPagesWide = 1 'Adapter à la largeur d'une
page
oXL.Sheets(1).PageSetup.FitToPagesTall = False
oXL.Sheets(1).PageSetup.PrintErrors = 0 'xlPrintErrorsDisplayed

oXL.cells(1,1).select
oXL.ActiveWorkbook.Save
oXL.ActiveWorkbook.close
End If
Next
Next

oXL.Application.Quit

-----------------------------







1 2