OVH Cloud OVH Cloud

Communication Excel/VB

5 réponses
Avatar
PM
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un classeur
.xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le nom du
classeur pour que VB puisse agir dessus, ça je ne sais pas. Comment VB
reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick

5 réponses

Avatar
Géo
PM a écrit:
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un classeur
.xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le nom du
classeur pour que VB puisse agir dessus, ça je ne sais pas. Comment VB
reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick






tu pourrais passer le nom du classeur en argument a ton soft :

C:>monprogramme c:mon_fichierexcel.xls

et tu recuperes le nom du classeur avec l'argument "command"


FAQ: http://faq.vb.free.fr/index.php?question


Géo
Avatar
PM
Merci Géo !

Serais-tu assez bon pour me préciser la syntaxe ? L'aide sur Shell est
totalement déficiente...

Je fais Shell ("c:MonProjetVB.exe"). J'ouvre ainsi le projet VB. OK. Mais
les arguments ?

Les arguments dont a besoin MonProjetVB sont
le nom du fichier Excel
le nom de la routine à lancer dans VB ; dans ce cas, j'ai placé mon code
dans une routine accessible par
Form1.isoler_ligne_click

Je doute qu'il suffise de faire :

Shell ("c:MonProjetVB.exe c:MonClasseur.xls Form1.isoler_ligne_click")
à savoir simplement séparer par des blancs

Ou bien est-ce que je récupère les portions voulues de cett ligne par un
truc du genre
nom = left(command,n) etc ?

avec derrière un embranchement du genre Select case sur right(command,
nn) ?

Je me suis lancé dans un truc pas simple, car je lis sur les forums qu'il
n'y a pas moyen de protéger efficacement du code Excel...

A+ et encore merci de têtre arrêté sur ma question...




"Géo" a écrit dans le message de news:

PM a écrit:
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un
classeur .xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le nom
du classeur pour que VB puisse agir dessus, ça je ne sais pas. Comment VB
reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick






tu pourrais passer le nom du classeur en argument a ton soft :

C:>monprogramme c:mon_fichierexcel.xls

et tu recuperes le nom du classeur avec l'argument "command"


FAQ: http://faq.vb.free.fr/index.php?question


Géo



Avatar
ng
Salut,

L'automation excel est faite pour ca (en early ou late binding) :

Dim oObject As Object
Set oObject = CreateObject("Excel.Application")
'//...
Set oObject = Nothing

Tu trouveras plus d'aide sur les groupes dédiés au vba (*.vba) ou à excel :
news:microsoft.public.fr.excel

Il faudra préciser ce que tu veux faire exactement.

Tu peux aussi regarder sur google groups ou essayer de trouver intuitivement
en ajoutant une référence à excel dans ton projet et en fouillant dans
l'explorateur d'objet (F2).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un
classeur .xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le
nom du classeur pour que VB puisse agir dessus, ça je ne sais pas.
Comment VB reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick


Avatar
PM
Voilà, j'ai fini par trouver !

Référence du langage Visual Basic

Command, fonction
Retourne la partie argument de la ligne de commande utilisée pour lancer
Visual Basic ou un programme exécutable développé avec Visual Basic.

Public Function Command() As StringRemarques
Pour les applications développées avec Visual Basic et compilées en un
fichier .exe, la fonction Command retourne tout argument apparaissant après
le nom de l'application sur la ligne de commande, comme dans cet exemple :

MyApp cmdlineargsExemple
Cet exemple utilise la fonction Command pour retourner les arguments de la
ligne de commande dans un objet contenant un tableau.

Function GetCommandLineArgs() As String()
' Declare variables.
Dim separators As String = " "
Dim commands As String = Microsoft.VisualBasic.Command()
Dim args() As String = commands.Split(separators.ToCharArray)
Return args
End Function


Donc tu avais raison, mais c'était un peu allusif, ta réponse...
Du coup, j'ai une autre question : Quand je vais appeller VB de nombreuses
fois (avec Shell et ce qui figure ci-dessus), vais-je ouvrir à chaque fois
une nouvelle instance de mon programme VB ? (auquel cas je dois prévoir de
fermer après l'appel...)




"Géo" a écrit dans le message de news:

PM a écrit:
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un
classeur .xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le nom
du classeur pour que VB puisse agir dessus, ça je ne sais pas. Comment VB
reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick






tu pourrais passer le nom du classeur en argument a ton soft :

C:>monprogramme c:mon_fichierexcel.xls

et tu recuperes le nom du classeur avec l'argument "command"


FAQ: http://faq.vb.free.fr/index.php?question


Géo



Avatar
RENAUD Eric
Voici _du code que j'utilise pour exporter les données d'un MSFlexgrid vers
Excel. Il te suffit de remplcer la partie données issues du MSFlex grid par
les tiennes et cela devrait suffire. Ne pas oublier d'ajouter le complément
Microsoft Excel.

Private Sub cmdXL_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Integer
Set xlApp = CreateObject("Excel.Application") ' New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets("Feuil1")
xlApp.Visible = False '
xlApp.DisplayAlerts = False
xlSheet.Name = Me.txtRef.Text
Destination = LireINI("Destination", "Repertoire")

For i = 1 To Form1.MSFlexGrid1.Rows - 1
With Form1.MSFlexGrid1
.Row = i
.Col = 0
Ref = .Text
.Col = 1
Niveau = .Text
.Col = 2
QAss = .Text
.Col = 3
Section = .Text
.Col = 4
Stock = .Text
.Col = 5
CMM = .Text
.Col = 6
Kanban = .Text
.Col = 7
QteAss = .Text
.Col = 8
Designation = .Text

' Ecrire dans les cellules d'Excel
xlSheet.Cells(i + 1, 1) = Ref
xlSheet.Cells(i + 1, 2) = Niveau
xlSheet.Cells(i + 1, 3) = Section
xlSheet.Cells(i + 1, 4) = QAss
xlSheet.Cells(i + 1, 5) = Stock
xlSheet.Cells(i + 1, 6) = CMM
xlSheet.Cells(i + 1, 7) = Kanban
xlSheet.Cells(i + 1, 8) = QteAss
xlSheet.Cells(i + 1, 9) = Designation
End With
Next i
' Ecrire des titres dans les cellules d'Excel
xlSheet.Cells(1, 1).Value = "Référence"
xlSheet.Cells(1, 2).Value = "Niveau"
xlSheet.Cells(1, 3).Value = "Section"
xlSheet.Cells(1, 4).Value = "Qté/Ass."
xlSheet.Cells(1, 5).Value = "Seuil permanent"
xlSheet.Cells(1, 6).Value = "CMM"
xlSheet.Cells(1, 7).Value = "Kanban"
xlSheet.Cells(1, 8).Value = "Qté Kanban"
xlSheet.Cells(1, 9).Value = "Désignation"
xlSheet.Cells.Select
With xlApp.Selection.Font
.Name = "Arial"
.Size = 8
End With
xlSheet.Range("A1:I1").Select
With xlApp.Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
xlApp.Selection.Borders(xlDiagonalDown).LineStyle = xlNone
xlApp.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With xlApp.Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With xlApp.Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With xlApp.Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With xlApp.Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With xlApp.Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
xlApp.Selection.Font.Bold = True
xlSheet.Columns("A:I").Select
xlSheet.Columns("A:I").EntireColumn.AutoFit
xlSheet.Range("A1").Select
xlSheet.Cells.Select
With xlApp.Selection
.HorizontalAlignment = xlCenter
End With
xlSheet.Cells(1, 1).Select
xlBook.SaveAs Destination & "" & Me.txtRef.Text & "_" & Format(Date,
"dd-mm-yy") & ".xls"

xlBook.Saved = True
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
With Form1.MSFlexGrid1
.Row = 1
.Col = 0
End With
Me.cmdXL.Enabled = False
End Sub
"PM" a écrit dans le message de
news:%
Bonjour !

Je cherche à faire exécuter dans un programme VB des actions sur un


classeur
.xls.

J'appelle VB à partir de XL par shell, mais comment faire passer le nom du
classeur pour que VB puisse agir dessus, ça je ne sais pas. Comment VB
reçoit-il une ligne de commande ?

Et oui, assez débutant hein ?
Grand merci aux experts chevronnés qui passeront par ici !

Patrick