Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Titof06

XLDnaute Nouveau
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
 

Dranreb

XLDnaute Barbatruc
Je ne crois pas. Avec le On Error Resume Next devant, l'erreur n'aurait pas du planter l'exécution.
Ce qui ne veut pas dire que c'était correct sans un If Err Then derrière l'instruction susceptible de l'avoir provoquée.
 

Titof06

XLDnaute Nouveau
Bonjour Sylvanu & Dranreb,

Sylvanu,
Merci pour cette réponse claire.

Dranreb,
Je ne suis pas sur de tout comprendre.
Le problème est que je ne sais pas quelle instruction génère l'erreur.

Merci à tous les 2,

Bonne Journée,

Titof06
 

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 Nouveau
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.
 

Titof06

XLDnaute Nouveau
Bonjour Dranreb,

Encore Merci pour toutes ces informations.

J'en prends note et je vais essayer de voir comment faire au mieux.

Pour information, il n'y a pas de UserForm dans mon fichier.

Bonne journée,

Titof06
 

Dranreb

XLDnaute Barbatruc
Oui mais ça peut être pareil pour d'autres modules objets, Worksheet ou autres.
En tout cas vérifiez en premier quelle option de récupération d'erreurs est positionnée, menu Outils, Options, onglet Général.
 

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…