VBA Excel - QueryTables - gestion erreur

Signaler
Messages postés
25
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
13 octobre 2009
-
Messages postés
25
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
13 octobre 2009
-
Bonjour,

Une macro recherche des données en fonction de critères, dans une base, à l'aide de la propriété "QueryTables".

Mon problème : si la base de données ne contient aucune donnée remplissant les critères, la macro plante : "erreur de syntaxe SQL".

Comment éviter ce plantage ?

Merci.

Col.

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
Propriété "QueryTables" de quel objet ?

Bizarre (anormal) comme comportement.
Quelle est la syntaxe de ta requète dans ces cas là ?
Si le moteur te dit qu'il y a un problème SQL, croit-le : Dépouille bien ta requète, peut-être que tu as omis un paramètre ou un virgule de trop ...

Tu peux essayer de tester l'erreur et la traiter indépendemment :
  On Error Goto Erreur
  ' ici, mon programme avec le QueryTables
  Exit Sub ' Fin du programme normal
Erreur:
  If Err.Number = ?? Then
    ' erreur de syntaxe SQL : la table est vide
    MsgBox "La table est vide"
  Else
    MsgBox "Erreur " & CStr(Err.Number) & " - " & Err.Description
  End If


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
25
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
13 octobre 2009

Merci pour ta réponse. J'ai suivi tes conseils mais le pb reste. le "on error" n'est pas pris en compte.
ça ne vient pas de la syntaxe car si la donnée recherchée est trouvée dans la base pas de plantage
au ca où si joint la macro :

Sub TEST_ADH()

Num = [a3]


On Error GoTo Erreur
With Sheets("test").QueryTables.Add(Connection:=CON_STR _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT Inf_adherent.Cdadh, Inf_adherent.Nocab, Inf_adherent.Tadh, Inf_adherent.Titre, Inf_adherent.Nom, Inf_adherent.Raisoc, Inf_adherent.Ladr1, Inf_adherent.Ladr2, Inf_adherent.Cp, Inf_adherent.Ville" _
, _
", Inf_adherent.Titre_cor, Inf_adherent.Nom_cor, Inf_adherent.Raisoc_cor, Inf_adherent.Ladr1_cor, Inf_adherent.Ladr2_cor, Inf_adherent.Cp_cor, Inf_adherent.Ville_cor, Inf_adherent.Tel, Inf_adherent.Fax" _
, _
", Inf_adherent.Email, Inf_adherent.Cdagence, Inf_adherent.Ape, Inf_adherent.Siret, Inf_adherent.Rf, Inf_adherent.Dtadhesion, Inf_adherent.Dtradia, Inf_adherent.SupportDf, Inf_adherent.EtatDossier, Inf" _
, _
"_adherent.DtMAJ, Inf_adherent.Cdt, Inf_adherent.Date_Mandat" & Chr(13) & "" & Chr(10) & "FROM Inf_adherent" & Chr(13) & "" & Chr(10) & "WHERE (Inf_adherent.Cdadh=" & Num & ")" _
)

.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
End With


Exit Sub ' Fin du programme normal
Erreur:
If Err.Number <> 0 Then
' erreur de syntaxe SQL : la table est vide
MsgBox "La table est vide"
Else
MsgBox "Erreur " & CStr(Err.Number) & " - " & Err.Description
End If

End Sub