XL 2013 Gérer une erreur de Mise a Jour d'une Base SQL

Titof06

XLDnaute Junior
Bonjour,

Je dois interroger une base SQL régulièrement, sauf que cette base n'est plus disponible à partir d'une certaine heure la nuit.

Je me retrouve le matin avec une erreur 1004 qui me plante l'exécution de la macro.

Est-il possible de la gérer afin d'arrêter la macro et fermer Excel lorsque cette erreur surgit ?

Voici mon code ci-dessous :

Sub MAJ_BDD
On Error Resume Next
nbr_connect = ThisWorkbook.Connections.Count
For i = 1 To nbr_connect
ThisWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
nom_connect = Replace(ThisWorkbook.Connections(i).Name, "Requête", "")
Application.StatusBar = "MAJ_BDD " & i & " / " & nbr_connect & " | " & nom_connect
Application.Wait (Now + TimeValue("0:00:02"))
ThisWorkbook.Connections(i).Refresh
Next
End Sub

Par avance, Merci

Titof06 :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Titof,
Peut être en remplaçant On Error Resume Next par On Error Goto et faire un traitement erreur :
VB:
Sub MAJ_BDD()
On Error GoTo Erreur
nbr_connect = ThisWorkbook.Connections.Count
For i = 1 To nbr_connect
    ThisWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
    nom_connect = Replace(ThisWorkbook.Connections(i).Name, "Requête", "")
    Application.StatusBar = "MAJ_BDD " & i & " / " & nbr_connect & " | " & nom_connect
    Application.Wait (Now + TimeValue("0:00:02"))
    ThisWorkbook.Connections(i).Refresh
Next
Exit Sub
Erreur:
MsgBox "Erreur rencontrée le " & Now & Chr(10) & "Sub abortée"
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Titof06, sylvanu, Bernard, le forum,

Le plus simple est d'essayer d'éviter l'erreur.

La propriété BackgroundQuery doit être mise à False pour les 2 types de connection donc essayez :
VB:
Sub MAJ_BDD()
Dim nbr_connect%, i%, obj As Object, nom_connect$
nbr_connect = ThisWorkbook.Connections.Count
For i = 1 To nbr_connect
    Set obj = ThisWorkbook.Connections(i)
    If obj.Type = xlConnectionTypeOLEDB Then obj.OLEDBConnection.BackgroundQuery = False
    If obj.Type = xlConnectionTypeODBC Then obj.ODBCConnection.BackgroundQuery = False
    nom_connect = Replace(obj.Name, "Requête", "")
    Application.StatusBar = "MAJ_BDD " & i & " / " & nbr_connect & " | " & nom_connect
    Application.Wait Now + TimeValue("0:00:02")
    obj.Refresh
Next
End Sub
A+
 

Titof06

XLDnaute Junior
Bonjour Job75,

Merci également pour cette réponse rapide.

Comme je l'ai dit plus haut, je vais essayer la solution avec le "On Error Goto....." et si cela ne fonctionne pas, je testerai avec cette solution?

Je vous tiendrais au courant de mes mésaventures.

Bonne Journée,

Titof06 :)
 

Dranreb

XLDnaute Barbatruc
À mon avis ça ne fonctionnera pas.
Conseil: cochez carrément "Arrêt dans le module de classe", parce qu'avec seulement "Arrêt sur les erreurs non gérées" vous aurez du mal, en débogage, à trouver quelle instruction plante dans un UserForm par exemple.
 

dysorthographie

XLDnaute Accro
bonjour,
si cette base n'est plus accessible la nuit, il te reste à identifier les heur ou elle est accessible!
VB:
ub MAJ_BDD()
On Error Resume Next
Const Deb As Date = #8:00:00 AM#, Fin As Date = #8:00:00 PM#
If Time > Deb And Time < Fin Then
    nbr_connect = ThisWorkbook.Connections.Count
    For i = 1 To nbr_connect
        ThisWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
        nom_connect = Replace(ThisWorkbook.Connections(i).Name, "Requête", "")
        Application.StatusBar = "MAJ_BDD " & i & " / " & nbr_connect & " | " & nom_connect
        ThisWorkbook.Connections(i).Refresh
    Next
End If
Application.Wait (Now + TimeValue("0:00:02"))
End Sub
 

Statistiques des forums

Discussions
314 629
Messages
2 111 349
Membres
111 110
dernier inscrit
chergui