OVH Cloud OVH Cloud

Pbs de liaison VB6 -> macroExcel et retour

2 réponses
Avatar
jiheme
Bonjour à tous

MAYDAY : Lorsque j'appelle en VB6 la fonction AppelExcel() (code ci dessous)
Excel s'ouvre bien pais le code suivant la ligne "With Excel_Application"
ne fonctionne pas !

Ca doit etre truffé d'erreurs mais je n'arrive pas à les localiser et à
rectifier.....

Si quelqu'un pouvait m'aider .. Merci à tous

Jihème


*********************************************************************************************
Public Function AppelExcel()
' affiche = MsgBox("J'ouvre EXCEL", 0)
Dim Excel_Application As Object
Set Excel_Application = CreateObject("Excel.Application")
Dim Modèle As String
Modèle = "c:\ROCS\EDUCEVAL.xlt"
With Excel_Application
.Visible = True

' .XLWindowState = xlMaximized
Fichieraouvrir = "C:\ROCS\" + NomFic + ".txt"
Workbooks.OpenText FileName:=Fichieraouvrir, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False,
Space:=False, Other:=False, FieldInfo:=Array(1, 1)
Range("A1:A24").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.Close
Sheets("EDUCEVAL").Select
ActiveSheet.Paste
End With
'affiche = MsgBox("Je ferme EXCEL")
End Function
***************************************************************************************

2 réponses

Avatar
michdenis
Bonsoir jiheme,

Dim Excel_Application As Object
'------------------------
Dim Modèle As String

Set Excel_Application = CreateObject("Excel.Application")
Modèle = "c:ROCSEDUCEVAL.xlt"
With Excel_Application
.Visible = True
End With
'------------------------

A ) Bonne nouvelle : Ton code fonctionne très bien

B ) La problématique provient du fait que tu déclares ta variable objet (Excel_Application) à l'intérieur de la
fonction. Ceci signifie que la durée de vie de la variable s'arrête à la fin de la fonction. Naturellement, une variable
objet se supprime d'elle-même et ce, même si on n'insère pas une ligne de code pour libérer l'espace mémoire comme ceci
: Set Excel_Application = Nothing. à la fin de la function.

En fait, Une instance d'excel s'ouvre effectivement mais disparaît aussitôt à la fin de la procédure puisque l'espace
mémoire occupée par l'objet est libéré automatiquement à la fin de ta fonction.

C ) Pour corriger cela, Déclare ta variable dans le haut de ton formulaire au lieu de la déclarer dans ta fonction et
cela devrait résoudre ton problème !

D ) Si tu ne veux éviter d'appliquer la solution décrite précédemment, Corrige ceci :

Lorsque tu ouvres ton classeur, tu ne dois pas oublier que tu veux l'ouvrir à partir de l'instance (je suppose) que
tu as mis en mémoire, pour ce faire modifier ton code (tu as oublier le point devant le mot .Workbooks.open) de la façon
suivante :

Code non testé ...
'---------------------------------
Dim Excel_Application As Object
Dim Modèle As String
Dim Fichieraouvrir as String

Fichieraouvrir = "C:ROCS" + NomFic + ".txt"

' affiche = MsgBox("J'ouvre EXCEL", 0)

Set Excel_Application = CreateObject("Excel.Application")
Dim Modèle As String
'Modèle = "c:ROCSEDUCEVAL.xlt"

With Excel_Application
.Visible = True
.Workbooks.OpenText FileName:=Fichieraouvrir, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse, Comma:úlse, _
Space:úlse, Other:úlse, FieldInfo:=Array(1, 1)
.with activeworbook
With .activeworsheet
.Range("A1:A24").Select
Selection.Copy
end with

With .Sheets("EDUCEVAL")
.Select
ActiveSheet.Paste
End with
End With
Application.CutCopyMode = False

'affiche = MsgBox("Je ferme EXCEL")


End With
'---------------------------------



Salutations!





"jiheme" a écrit dans le message de news:
Bonjour à tous

MAYDAY : Lorsque j'appelle en VB6 la fonction AppelExcel() (code ci dessous)
Excel s'ouvre bien pais le code suivant la ligne "With Excel_Application"
ne fonctionne pas !

Ca doit etre truffé d'erreurs mais je n'arrive pas à les localiser et à
rectifier.....

Si quelqu'un pouvait m'aider .. Merci à tous

Jihème


*********************************************************************************************
Public Function AppelExcel()
' affiche = MsgBox("J'ouvre EXCEL", 0)
Dim Excel_Application As Object
Set Excel_Application = CreateObject("Excel.Application")
Dim Modèle As String
Modèle = "c:ROCSEDUCEVAL.xlt"
With Excel_Application
.Visible = True

' .XLWindowState = xlMaximized
Fichieraouvrir = "C:ROCS" + NomFic + ".txt"
Workbooks.OpenText FileName:=Fichieraouvrir, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse, Comma:úlse,
Space:úlse, Other:úlse, FieldInfo:=Array(1, 1)
Range("A1:A24").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.Close
Sheets("EDUCEVAL").Select
ActiveSheet.Paste
End With
'affiche = MsgBox("Je ferme EXCEL")
End Function
***************************************************************************************
Avatar
jiheme
Public Function AppelExcel()

'Dim Excel_Application As Object
Dim Modèle As String
Dim Fichieraouvrir As String

Fichieraouvrir = "C:ROCS" + NomFic + ".txt"
Set Excel_Application = CreateObject("Excel.Application")
Modèle = "c:ROCSEDUCEVAL.xlt"

With Excel_Application
affiche = MsgBox("J'ouvre EXCEL", 0)
.Visible = True

ChDir "C:ROCS"
.Workbooks.OpenText FileName:="C:ROCSEDUCEVAL.txt", Origin:=xlWindows,
_
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(1, 1)
.Range("A1:A24").Select
.Selection.Copy
Stop
.Workbooks.Open FileName:="C:ROCSEDUCEVAL.xlt", Editable:=True
.With activeworbook
With .Sheets("EDUCEVAL")
.Select
ActiveSheet.Paste
End With
End With
End Function
************************************************************************************



"michdenis" a écrit dans le message de news:

Bonsoir jiheme,

Dim Excel_Application As Object
'------------------------
Dim Modèle As String

Set Excel_Application = CreateObject("Excel.Application")
Modèle = "c:ROCSEDUCEVAL.xlt"
With Excel_Application
.Visible = True
End With
'------------------------

A ) Bonne nouvelle : Ton code fonctionne très bien

B ) La problématique provient du fait que tu déclares ta variable objet
(Excel_Application) à l'intérieur de la
fonction. Ceci signifie que la durée de vie de la variable s'arrête à la
fin de la fonction. Naturellement, une variable
objet se supprime d'elle-même et ce, même si on n'insère pas une ligne de
code pour libérer l'espace mémoire comme ceci
: Set Excel_Application = Nothing. à la fin de la function.

En fait, Une instance d'excel s'ouvre effectivement mais disparaît
aussitôt à la fin de la procédure puisque l'espace
mémoire occupée par l'objet est libéré automatiquement à la fin de ta
fonction.

C ) Pour corriger cela, Déclare ta variable dans le haut de ton formulaire
au lieu de la déclarer dans ta fonction et
cela devrait résoudre ton problème !

D ) Si tu ne veux éviter d'appliquer la solution décrite précédemment,
Corrige ceci :

Lorsque tu ouvres ton classeur, tu ne dois pas oublier que tu veux
l'ouvrir à partir de l'instance (je suppose) que
tu as mis en mémoire, pour ce faire modifier ton code (tu as oublier le
point devant le mot .Workbooks.open) de la façon
suivante :

Code non testé ...
'---------------------------------
Dim Excel_Application As Object
Dim Modèle As String
Dim Fichieraouvrir as String

Fichieraouvrir = "C:ROCS" + NomFic + ".txt"

' affiche = MsgBox("J'ouvre EXCEL", 0)

Set Excel_Application = CreateObject("Excel.Application")
Dim Modèle As String
'Modèle = "c:ROCSEDUCEVAL.xlt"

With Excel_Application
.Visible = True
.Workbooks.OpenText FileName:=Fichieraouvrir, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited,
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:úlse, Comma:úlse, _
Space:úlse, Other:úlse, FieldInfo:=Array(1, 1)
.with activeworbook
With .activeworsheet
.Range("A1:A24").Select
Selection.Copy
end with

With .Sheets("EDUCEVAL")
.Select
ActiveSheet.Paste
End with
End With
Application.CutCopyMode = False

'affiche = MsgBox("Je ferme EXCEL")


End With
'---------------------------------



Salutations!





"jiheme" a écrit dans le message de
news:
Bonjour à tous

MAYDAY : Lorsque j'appelle en VB6 la fonction AppelExcel() (code ci
dessous)
Excel s'ouvre bien pais le code suivant la ligne "With
Excel_Application"
ne fonctionne pas !

Ca doit etre truffé d'erreurs mais je n'arrive pas à les localiser et à
rectifier.....

Si quelqu'un pouvait m'aider .. Merci à tous

Jihème


*********************************************************************************************
Public Function AppelExcel()
' affiche = MsgBox("J'ouvre EXCEL", 0)
Dim Excel_Application As Object
Set Excel_Application = CreateObject("Excel.Application")
Dim Modèle As String
Modèle = "c:ROCSEDUCEVAL.xlt"
With Excel_Application
.Visible = True

' .XLWindowState = xlMaximized
Fichieraouvrir = "C:ROCS" + NomFic + ".txt"
Workbooks.OpenText FileName:=Fichieraouvrir, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse, Comma:úlse,
Space:úlse, Other:úlse, FieldInfo:=Array(1, 1)
Range("A1:A24").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.Close
Sheets("EDUCEVAL").Select
ActiveSheet.Paste
End With
'affiche = MsgBox("Je ferme EXCEL")
End Function
***************************************************************************************