ConnexionInternet

M

Moa

Guest
Voilà, j'ai un souci avec une macro qui lance une requête internet.

En fait, tout marche bien...sauf...

Si l'utilisateur, n'a pas coché l'option "automatique", dans sa boîte de dialogue, lors de ses connexions internet.

Ma requête plante et renvoie au code Vba, à la ligne, ou je demande la mise à jour des données de la requête.

Deux questions :

Comment faire pour qu'excel n'interprète pas cela, comme un bug, mais attende que l'utilisateur, coche la case, pour continuer sa requête ?

Ou comment faire, pour afficher une boîte de dialogue, remplaçant le message d'erreur d'Excel, par un message perso (invitant l'utilisateur à mettre sa connexion en auto, ou à se connecter tout de suite), puis que la requête continue, après une validation de l'utilisateur ?

Du style " voulez-vous continuer la requête ?"

Si oui, Excel exécute, si non, nouveau message d'excel, "Vos données n'ont pas été mise à jour".


Merci de votre aide

@ +

Bonne nuit
 
@

@+Thierry

Guest
Salut Moa,

Vite fait... une soluce simple "la gestion de l'erreur"... (mais peut-être VBA pourrait tester si la connexion est active et la lancer de lui même... Mais il faut faire des recherches... Je ne connais pas l'instruction si elle existe...)

Donc une gestion d'erreur peut être cette solution simple (à la Condition Express que ton appli ne génère AUCUNE AUTRE erreur... Sinon le user va devenir fou à essayer de se connecter !! lol)

Sub MoaMacro ()
On error goto Sortie '(au début de la routine)

Blah blah blah tous tes codes
Blah blah blah......

Exit Sub
Sortie:
MsgBox "Excel ne trouve pas de connexion internet, Veuillez activez une connexion dans les 10 secondes..."
Application.OnTime Now + TimeValue("00:00:10"), "NewTentative"
End Sub

Sub NewTentative ()
MoaMacro
End Sub


Cependant je ne conseille pas de mettre "OnTime" pour relancer la macro automatiquement... Si on prévoit trop court çà va relancer le même message, si on prévoit trop long... Le user va attendre pour rien...

Bon App
@+Thierry
 
M

Moa

Guest
En fait, suite à un lien de Ti, j'avais trouvé çà.Mais je sais que les deux dernières procédures indiquées ci-dessous, ne fonctionnent pas.

Donc, je vais me tourner vers ta solution.

@ + et encore Merci

Moa


Sur http://dj.joss.free.fr/web.htm

Teste si une connection est active

Auteur inconnu
Public Const ERROR_SUCCESS = 0&
Public Const APINULL = 0&
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public ReturnCode As Long

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, _
ByVal lpReserved As Long, lpType As Long, _
lpData As Any, lpcbData As Long) As Long
Private Declare Function InternetAutodial Lib "Wininet" _
(ByVal dwFlags As Long, ByVal hwndParent As Long) As Long
Private Declare Function InternetAutodialHangup Lib "wininet.dll" _
(ByVal dwReserved As Long) As Long

Public Function ActiveConnection() As Boolean
Dim hKey As Long
Dim lpSubKey As String
Dim phkResult As Long
Dim lpValueName As String
Dim lpReserved As Long
Dim lpType As Long
Dim lpData As Long
Dim lpcbData As Long

ActiveConnection = False
lpSubKey = "System\CurrentControlSet\Services\RemoteAccess"
ReturnCode = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)

If ReturnCode = ERROR_SUCCESS Then
hKey = phkResult
lpValueName = "Remote Connection"
lpReserved = APINULL
lpType = APINULL
lpData = APINULL
lpcbData = APINULL
ReturnCode = RegQueryValueEx _
(hKey, lpValueName, lpReserved, lpType, ByVal lpData, lpcbData)
lpcbData = Len(lpData)
ReturnCode = RegQueryValueEx _
(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)

If ReturnCode = ERROR_SUCCESS Then
If lpData = 0 Then
ActiveConnection = False
Else
ActiveConnection = True
End If
End If
RegCloseKey (hKey)
End If
End Function


Le test de connection
Sub test()
If ActiveConnection = True Then
Call MsgBox("Vous avez une connection active.", vbInformation)
Else
Call MsgBox("Vous n'avez pas de connection active.", vbInformation)
End If
End Sub


Lance la connection
Sub Connecte()
InternetAutodial 1, 0
End Sub


Arrête la connection
Sub DéConnecte()
InternetAutodialHangup (0&)
End Sub
 
M

Moa

Guest
Au sujet des procédures qui ne fonctionnent pas, j'ai écrit à l'auteur.
Il m'a répondu ce soir, m'affirmant, qu'ils les a testées et qu'elles fonctionnent bien.

d'ailleurs Même Ti, n'a pas réussi à les faire fonctioner

Donc, je suggère que les pros se penchent sur le problème, et qu l'on en discute sur un prochain forum.

à +

Moa
 
T

Ti

Guest
Salut Moa,
Je ne me souviens plus du tout de quelles procédures tu parles. Pourrais-tu me rafraichir la mémoire ? Tu peux éventuellement m'envoyer ton prog, j'essaierai de regarder ça.
Bonne journée à tous
 
M

Moa

Guest
Les procédures dont je parle sont dans le post en question.

Je croyais que c'était toi Ti qui m'avait donné l'adresse, pour les connexions internet.

Donc si je me suis trompé d'auteur, et que celui-ci se reconnait, je m'en excuse platement.

Mais cela remonte déjà à un mois environ.

En tout cas, c'est un sujet que peu de personnes connaissent, donc il faudrait que l'on trouve un spécialiste...

@ +

Moa
 
@

@+Thierry

Guest
Salut Moa,

Bonjour Tout le monde

Juste pour l'info......

Cette Function vient du site de Daniel <http://dj.joss.free.fr/web.htm#testconnection> mais il indique lui même que ce code est d'Auteur inconnu....

Bonne Journée...
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau