Vba gestion erreur mot de passe connexion sap

Fermé
ProgMD - 3 mars 2022 à 15:50
 ProgMD - 3 mars 2022 à 15:55
Bonjour,

Je passe par un formulaire excel (vba) pour me connecter automatiquement à SAP et lancer un script. Le code fonctionne parfaitement. Mais lorsque j'essaie de gérer une erreur (mauvais identifiants entrés dans le formulaire) et de reboucler tant qu'il y a erreur puis enfin lancer le script quand c'est bon je me foire complètement. Je suis amateur et j'ai appris moi-même à coder un peu en vba du coup je crois avoir atteint mes limites. Voici une partie du code. Sans le do until (même essayé avec do while) et la gestion de l'erreur le code fonctionne bien.

Dim LogSAP As String
Dim MDPSAP As String
Dim i, j As Integer
Dim bouboul As Boolean


'****Infos de connexion****
'***************************

SAPLogon.Show

If SAPLogon.LogSAP.Value = "" Or SAPLogon.MDPSAP.Value = "" Then
SAPLogon.Hide
Exit Sub
End If
LogSAP = SAPLogon.LogSAP.Text
MDPSAP = SAPLogon.MDPSAP.Text
Workbooks("Impression.xlsm").Sheets(1).Unprotect "mdp"

'****Opening SAP****
'*******************
bouboul = False

On Error Resume Next
Set SapGui = GetObject("SAPGUI")
On Error GoTo 0

If Not IsObject(SapGui) Then
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SapLogon.exe", 1
Set WshShell = CreateObject("WScript.Shell")
Do Until WshShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:05")
Loop
Set WshShell = Nothing
Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("XXXXXXXXXX", True)
Set session = Connection.Children(0)
Do Until bouboul = True 'c'est ici que ça foire....
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = LogSAP
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = MDPSAP
'session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR" 'ou EN 'language
On Error GoTo erreur101 'c'est ici que ça foire
session.findById("wnd[0]").sendVKey 0 'Enter
On Error Resume Next
session.findById("wnd[1]/tbar[0]/btn[0]").press
On Error GoTo 0
If session.Children.Count > 1 Then
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press
End If
bouboul = True
erreur101: 'c'est ici que ça foire...
bouboul = False
SAPLogon.Show
If SAPLogon.LogSAP.Value = "" Or SAPLogon.MDPSAP.Value = "" Then
SAPLogon.Hide
Exit Sub
End If
LogSAP = SAPLogon.LogSAP.Text
MDPSAP = SAPLogon.MDPSAP.Text
Loop
Else
...................

Merci d'avance à celui qui me dira ce que je fais de mal.
A voir également:

1 réponse


Dim LogSAP As String
Dim MDPSAP As String
Dim i, j As Integer
Dim bouboul As Boolean


'****Infos de connexion****
'***************************

SAPLogon.Show

If SAPLogon.LogSAP.Value = "" Or SAPLogon.MDPSAP.Value = "" Then
SAPLogon.Hide
Exit Sub
End If
LogSAP = SAPLogon.LogSAP.Text
MDPSAP = SAPLogon.MDPSAP.Text
Workbooks("Impression.xlsm").Sheets(1).Unprotect "mdp"

'****Opening SAP****
'*******************
bouboul = False

On Error Resume Next
Set SapGui = GetObject("SAPGUI")
On Error GoTo 0

If Not IsObject(SapGui) Then
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SapLogon.exe", 1
Set WshShell = CreateObject("WScript.Shell")
Do Until WshShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:05")
Loop
Set WshShell = Nothing
Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("XXXXXXXXXX", True)
Set session = Connection.Children(0)
Do Until bouboul = True 'c'est ici que ça foire....
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = LogSAP
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = MDPSAP
'session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR" 'ou EN 'language
On Error GoTo erreur101 'c'est ici que ça foire
session.findById("wnd[0]").sendVKey 0 'Enter
On Error Resume Next
session.findById("wnd[1]/tbar[0]/btn[0]").press
On Error GoTo 0
If session.Children.Count > 1 Then
session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press
End If
bouboul = True
erreur101: 'c'est ici que ça foire...
bouboul = False
SAPLogon.Show
If SAPLogon.LogSAP.Value = "" Or SAPLogon.MDPSAP.Value = "" Then
SAPLogon.Hide
Exit Sub
End If
LogSAP = SAPLogon.LogSAP.Text
MDPSAP = SAPLogon.MDPSAP.Text
Loop
Else
...................

0