votre aide, erreur 462, je ne comprends pas

Le
lolozarkoff
Bonjour,

je cherhce à faire une macro qui mettrait à jour des champs dans IBM
Mainframe avec MS Excel.

Je rencontre des problèmes :
1/ La première fois que je lance ma macro, elle plante avec le message
: The remote server machine does not exist or is unavailable (Error
462) sur la ligne nb_ligne =
xl.WorksheetFunction.CountA(Range("a:a")) . Si je relance la macro
immédiatement ca marche.
2/ Malgrès la workbooks.close, le fichier reste chargé en mémoire (je
vois autant le Excel.exe que de fois où j'ai lancer la macro dans la
liste des applications en cours dans windows) et si je charge mon
fichier vide.xls, il est en read-only
3/ Certaines des functions VBA ne marchent pas, par exmple LEFT, je
pense que c'est dû au fait que Left existe aussi pour mainframe.

--Code-

Sub TestXLS()
'
' Generated by the Reflection Macro Recorder on 04-06-2004
16:31:48.88
' Generated by Reflection for IBM for Windows 9.0.172
'
Dim xl As Excel.Application
Set xl = New Excel.Application
xl.Workbooks.Open ( _
"C:tempvide.xls")
nb_ligne = xl.WorksheetFunction.CountA(Range("a:a"))
For i = 2 To nb_ligne
val0 = Cells(i, 1)
val1 = LeftB(val0, 4 * 2)
val2 = RightB(val0, 6 * 2)
val3 = Cells(i, 2)

'-Mainframe Part--

With Session
.WaitForEvent rcEnterPos, "30", "0", 3, 41
.WaitForDisplayString "Code", "30", 3, 30
.TransmitANSI val1
.TransmitANSI val2
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
.WaitForEvent rcEnterPos, "30", "0", 5, 16
.WaitForDisplayString ":", "30", 5, 14
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMTabKey
.TransmitANSI val3
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMUpKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitANSI "X"
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
Cells(i, 3) = .GetDisplayText(23, 2, 60)
.TransmitTerminalKey rcIBMPf3Key
End With
'-
Next i
xl.Workbooks.Close
End Sub
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #1235943
Bonjour Laurent,

Essaie ceci :

'--------------------------
Sub TestXLS()
'
' Generated by the Reflection Macro Recorder on 04-06-2004 16:31:48.88
' Generated by Reflection for IBM for Windows 9.0.172
'
Dim xl As Object, Wk As Workbook
On Error Resume Next
Set xl = GetObject(, "excel.application")
If Err <> 0 Then
Err = 0
Set xl = CreateObject("Excel.application")
End If

Set Wk = xl.Workbooks.Open( _
"C:tempvide.xls")

'Inscrit le nom de la feuille de ton application
Wk.Worksheets("NomDeLaFeuille").Select

nb_ligne = xl.CountA(Range("a:a"))
For i = 2 To nb_ligne
val0 = Cells(i, 1)
val1 = LeftB(val0, 4 * 2)
val2 = RightB(val0, 6 * 2)
val3 = Cells(i, 2)

'-------Mainframe Part-----------

With Session
.WaitForEvent rcEnterPos, "30", "0", 3, 41
.WaitForDisplayString "Code", "30", 3, 30
.TransmitANSI val1
.TransmitANSI val2
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
.WaitForEvent rcEnterPos, "30", "0", 5, 16
.WaitForDisplayString ":", "30", 5, 14
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMTabKey
.TransmitANSI val3
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMUpKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitANSI "X"
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
Cells(i, 3) = .GetDisplayText(23, 2, 60)
.TransmitTerminalKey rcIBMPf3Key
End With
'-------------------------------------------
Next i
'sauvegarder les modifications du classeurs.
Wk.Close True

'Fermeture de l'instance d'excel
xl.Quit
'Libération de l'espace mémoire
Set Wk = Nothing: Set xl = Nothing
End Sub
'----------------------------


Salutations!





"Laurent Zarkoff" news:
Bonjour,

je cherhce à faire une macro qui mettrait à jour des champs dans IBM
Mainframe avec MS Excel.

Je rencontre des problèmes :
1/ La première fois que je lance ma macro, elle plante avec le message
: The remote server machine does not exist or is unavailable (Error
462) sur la ligne nb_ligne xl.WorksheetFunction.CountA(Range("a:a")) . Si je relance la macro
immédiatement ca marche.
2/ Malgrès la workbooks.close, le fichier reste chargé en mémoire (je
vois autant le Excel.exe que de fois où j'ai lancer la macro dans la
liste des applications en cours dans windows) et si je charge mon
fichier vide.xls, il est en read-only
3/ Certaines des functions VBA ne marchent pas, par exmple LEFT, je
pense que c'est dû au fait que Left existe aussi pour mainframe.

-----Code----

Sub TestXLS()
'
' Generated by the Reflection Macro Recorder on 04-06-2004
16:31:48.88
' Generated by Reflection for IBM for Windows 9.0.172
'
Dim xl As Excel.Application
Set xl = New Excel.Application
xl.Workbooks.Open ( _
"C:tempvide.xls")
nb_ligne = xl.WorksheetFunction.CountA(Range("a:a"))
For i = 2 To nb_ligne
val0 = Cells(i, 1)
val1 = LeftB(val0, 4 * 2)
val2 = RightB(val0, 6 * 2)
val3 = Cells(i, 2)

'-------Mainframe Part-----------

With Session
.WaitForEvent rcEnterPos, "30", "0", 3, 41
.WaitForDisplayString "Code", "30", 3, 30
.TransmitANSI val1
.TransmitANSI val2
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
.WaitForEvent rcEnterPos, "30", "0", 5, 16
.WaitForDisplayString ":", "30", 5, 14
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMTabKey
.TransmitANSI val3
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMDownKey
.TransmitTerminalKey rcIBMUpKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitTerminalKey rcIBMLeftKey
.TransmitANSI "X"
.TransmitTerminalKey rcIBMEnterKey
.WaitForEvent rcKbdEnabled, "30", "0", 1, 1
Cells(i, 3) = .GetDisplayText(23, 2, 60)
.TransmitTerminalKey rcIBMPf3Key
End With
'-------------------------------------------
Next i
xl.Workbooks.Close
End Sub
lolozarkoff
Le #1282591
Merci beaucoup, j'essaye ca demain au boulot.

cordialement.
Publicité
Poster une réponse
Anonyme