Requête SQL - problème date - where - récupération celllule

rcan7412

XLDnaute Occasionnel
Bonjour,

Je cale depuis des heures sur un problème de requête sql qui emploie un critère de date.

L'application doit extraire d'un fichier DBF, des données.
Je souhaiterais que les données extraites soient limitées en fonction du critère suivant :
DATESOR (champ date de la table de donnée) soit vide ou supérieur à la valeur date stockée dans la cellule nommée "DateSortie" de la feuille "Start" (cellule E13).

J'avais compris que la date des requêtes était au format américain (mm/dd/yyyy).
J'ai essayé plein de choses mais je n'y arrive pas.

Je joins en annexe le fichier avec le code VBA et le fichier des dossiers (normalement format dbf mais renommé en xls pour l'import sur le forum) et un fichier de données (idem dbf > xls)

Voici le code

Cible = "SELECT CODE,LIBELLE,FOURNI,DATEE,COMPTE,VALACHAT,TYPE,CUMUL,DUREA,PCOMPTA,DATSOR FROM " & laBase & " ORDER BY DATEE ;"

Je voudrais que ceci fonctionne :

WHERE DATSOR < DateSort OR DATSOR is null

DATESOR est le champ qui contient la date dans le fichier de données.
DateSort est la variable qui renvoie le contenu de la cellule nommée "DateSortie" de la feuille "Start" (cellule E13)

Si quelqu'un pouvait m'aider, car je désespère.

Merci d'avance

VB:
Private Sub CommandButton1_Click()
'bouton d'importation pour le processus d'import du fichier comptes.dbf et appel de la procédure d'import de lign.dbf
Application.ScreenUpdating = False
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim chemin As String, Cible As String, laBase As String
Dim Fld As ADODB.Field
Dim i As Integer
Dim DateSort As Date


If ComboBox1.ListIndex = -1 Then Exit Sub

chemin = ComboBox1.List(ComboBox1.ListIndex, 1)
laBase = "IMMOS.dbf"
DateSort = Format(Range("DateSortie"), "MM/DD/YYYY")



'efface la feuille comptes

Sheets("ImmoCiel").Select
    Columns("A:k").Select
    Range("k1").Activate
    Selection.ClearContents


Range("A1").Select


Set Cn = New ADODB.Connection
Cn.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
chemin & ";"

'WHERE DATSOR < DateSort ORDER BY DATEE  WHERE DATSORT > DateSort"

Cible = "SELECT CODE,LIBELLE,FOURNI,DATEE,COMPTE,VALACHAT,TYPE,CUMUL,DUREA,PCOMPTA,DATSOR FROM " & laBase & " ORDER BY DATEE ;"



Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

For Each Fld In Rs.Fields
i = i + 1
Sheets("ImmoCiel").Cells(1, i) = Fld.Name
Next Fld


Do While Not Rs.EOF
Sheets("ImmoCiel").Range("A2").CopyFromRecordset Rs
Loop

        
Rs.Close
Cn.Close

Sheets("Start").Select
Range("DOS") = ComboBox1
Range("REPDOS") = ComboBox1.List(ComboBox1.ListIndex, 1)
Range("CODEDOS") = ComboBox1.List(ComboBox1.ListIndex, 2)

Calculer
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Dossiers.xls
    18.8 KB · Affichages: 4
  • IMMOS.xls
    8.1 KB · Affichages: 5
  • Procédure Transfert Investissements CIEL vers Octopus V7.xlsm
    127.8 KB · Affichages: 4

rcan7412

XLDnaute Occasionnel
Bonjour Pierre,

Merci pour ta suggestion que j'ai testée. Hélas elle ne fonctionne pas (voir image).
La procédure s'arrête sur :
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

Une idée sur l'erreur ?

Rodolphe
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    4.4 KB · Affichages: 20

rcan7412

XLDnaute Occasionnel
Merci Pierre pour ta réponse que j'ai testée sur tes fichiers.

En cliquant sur INSERT, je reçois le message d'erreur suivant : Erreur de syntaxe dans l'instruction INSERT INTO.

Pour le reste j'ai essayé de m'inspirer de ton code avec WHERE et BETWEEN et j'ai à nouveau l'erreur " INDEX INTROUVABLE".

Pas évident pour un néophyte en matière VBA :rolleyes:

Rodolphe
 

rcan7412

XLDnaute Occasionnel
Oui à ta première question.

En fait la procédure ne bugge pas si je laisse les enregistrements sur la feuil1 des colonnes ABC.
Mais dès que j'efface cette liste et je clique sur insérer, il met le message d'erreur.

Pour revenir à mon application, tu ne vois pas d'explication pour l'instant ?

Merci de consacrer du temps à mon problème.
 

rcan7412

XLDnaute Occasionnel
Je viens de comprendre quelque chose.... désolé mais je suis un peu lourd.
En fait les données du fichier xl (feuil1) vont dans le fichier dbf et par l'inverse.

Je suis tellement branché sur mon application qui va dans l'autre sens.
En fait les données contenues dans mes dbf de doivent pas être implémentées depuis excel.
L'idée est d'extraire des données de ces dbf qui sont gérés par un programme externe.

Je ne sais pas si je suis clair à ce sujet.

Pour ta démo, insérer et lire fonctionne.
 

rcan7412

XLDnaute Occasionnel
La Msgbox, oui j'avais bien compris.

Soyons clair, je suis expert-comptable et pas programmeur. J'ai suivi en son temps des formations de base en VBA. Ce n'est donc pas mon métier.
Mais j'utilise tous les jours depuis des années des applications excel vba pour analyser les chiffres extraits de mon logiciel comptable dont les données sont stockées dans des tables dbf.

Les codes vba de mes applications, je les ai glané ici et là sur internet et adapté à mes besoins avec l'aide de personnes sur des forums comme celui-ci. Mais je suis loin d'avoir la logique d'un informaticien.

J'espère que ça ne te décourage pas trop, autrement tant pis.
 

rcan7412

XLDnaute Occasionnel
Merci pour ton aide.

Ok voilà, quand je lance la macro, l'userform est chargé et je clique sur le bouton importation des données qui lance la macro en question (effacé le code comme tu le proposais) et j'ai ajouté comme demandé la Msgbox (voir image).
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    27.6 KB · Affichages: 19

rcan7412

XLDnaute Occasionnel
Oui oui je confirme que tout fonctionne sans problème quand je ne mets aucun critère de date (where).
J'obtiens l'extraction souhaitée hormis les enregistrements que je voudrais écarter par la requête sql pour éviter de les avoir dans la feuille excel de réception.
J'ai un fichier immos.dbf par client stocké dans des dossiers distincts.
 

rcan7412

XLDnaute Occasionnel
Bonjour Pierre,

Très sympa de se pencher encore sur mon problème de date. Je comprends ta démarche mais suis incapable de comprendre tout ton code.

Alors je viens d'essayer.

Le message d'erreur : " Pilote OBCD Excel : trop peu de paramètres . 1 attendu.

En débogage il cale sur ce code de la fonction en jaune à la ligne ( Rst.Open Req, Cnx, 3) :

VB:
Function Select_Data(Req As String) As Variant
Dim T() As Variant
    
    ReDim T(0, 0)
  [B] [/B] Rst.Open Req, Cnx, 3
    If Rst.RecordCount > 0 Then
        ReDim T(Rst.Fields.Count, Rst.RecordCount)
        Rst.MoveFirst
        T = Rst.GetRows
    End If
    Select_Data = Transpose(T)
End Function
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo