Filtre date par liste déroulante problématique

Bonjour.

Dans un formulaire de facturation, 3 modes de sélection sont prévus :

  • Impression de la facture sélectionnée (fonctionne).

  • Impression des factures en sélectionnant (liste déroulante) le numéro du salarié (fonctionne).

  • Impression des factures en sélectionnant (liste déroulante) la date de facturation. Là j’ai un problème : “Valeur ou type de donnée incorrecte”. J’ai bien déclaré la valeur As Date mais il manque quelque chose (la macro est pourtant structurée pareil que celle des salariés).

    Sub SelectionDateFacture(oEvent As Object)

      Dim oList As Object
      Dim oForm As Object
      Dim strSQL As String
      Dim dFiltre As Date
    
      oList = oEvent.Source
      dFiltre = oList.SelectedItem
      oForm = oList.Model.Parent
      
      strSQL = "SELECT * FROM ""T_FACTURES"" WHERE ""FAC_DATE"" ='" + dFiltre + "'"
      oForm.Command = strSQL
      oForm.Reload
    

    End Sub

(les 3 macros des boutons d’impression fonctionnent)

Merci.

base_test_3.odb (31,2 Ko)

Bonjour,
Dans la Table, les Dates ne sont pas au format Date mais au Format Nombre.
Peut-être est-ce l’origine du blocage.

Effectivement, le champ est bien de type date mais pas le formatage. Malheureusement, j’ai beau le modifier, à chaque fermeture de la base ça n’est pas sauvegardé.

Néanmoins, le problème ne vient pas de là. J’ai essayé toutes les combinaisons de formats et j’ai le même message. Et en déclarant la valeur comme numérique, j’ai un message d’erreur Wrong data type.

Bonjour @Primus

En mode SQL les dates sont saisies sous la forme {D ‘2011-05-01’ } (noter qu’on utilise ici AAAA-MM-JJ).

Donc remplacer par :

	dim trav	
	trav = split(dFiltre, "/")
	strSQL = "SELECT * FROM ""T_FACTURES"" WHERE ""FAC_DATE"" = {d '" & trav(2)  & "-"  & trav(1) & "-" & trav(0) & "'}"

On utilise la fonction split pour “découper” la date sélectionnée à l’endroit du “/”. Le résultat du “découpage” génère 3 parties (le jour, le mois et l’année) qui sont stockées dans le tableau de travail (ici nommé trav). Il suffit de réordonner ces parties…

Cordialement

Merci de ces informations, mais avant de m’y coller, je tiens à faire le point sur les champs date.

Lorsque je crée une table via un script SQL, bien que le type de champ soit défini en DATE, un clic sur le bouton “Exemple de format” indique qu’il est défini en Nombre (à noter que les champs date des lignes que j’insère avec un script SQL sont formatés AAAA-MM-JJ). À partir de là, je peux définir le séparateur que je veux (après l’avoir défini en Date), dès que je ferme la base, à la réouverture, chaque date s’affiche comme suit :

JJ.MM.AA

Dans les champs de formulaire, que je choisisse n’importe quel séparateur et 4 chiffres pour l’année, la date s’affiche uniquement comme suit :

JJ.MM.AAAA

Pas de tiret ni de slash possibles (le slash ne s’affiche comme séparateur, avec 2 chiffres pour l’année, que dans la liste déroulante). Donc, je ne sais pas si ça a son importance pour le code que tu as donné.

Je ne comprends pas cette mise au point qui t’as pris plus de temps à l’écrire que le test de ce que je propose

Je pensais que ça pouvait avoir une importance.

Ça ne fonctionne pas. J’ai le message d’erreur Valeur ou type de donnée incorrect et le curseur s’arrête ici (comme avant modification de la macro) :

dFiltre = oListe.SelectedItem

Voir
base_test_3.odb (31,0 Ko)

Non, même message d’erreur, même arrêt du curseur…

Alors j’ai fait quelques modifications avec cette fois-ci une date à saisir dans un champ, avec une macro que j’ai trouvée je ne sais plus où et adaptée (je crois qu’à l’origine elles sont de PYS :slightly_smiling_face:). Apparemment j’ai adapté ça correctement mais quelque chose ne va pas au niveau des requêtes incluses : aucun filtrage ne s’effectue.

Le filtrage (formulaire F_FACTURES) se fait de deux manières : soit en choisissant la date à laquelle ont été saisies les factures (RapportFacturesDate), soit en choisissant une période début et fin (RapportFacturePeriode).

À noter qu’il y a quand même un petit bug dans le code : lorsqu’on définit une date par défaut, ça plante systématiquement ; il faut saisir la date après avoir ouvert le formulaire.

Merci.

base_primus_01.odb (69,4 Ko)

Concernant mon dernier message, j’avais fait une erreur dans le nom de la requête (après avoir compris comment ça fonctionnait). Par contre, j’ai dû ajouter cette macro au chargement du formulaire pour supprimer le filtrage ; sans ça, la sortie des rapports unitaires (facture en cours, avec l’ID) se fait à vide.

Sub SupprimerFiltrageFacture(oEvent As Object)

	Dim oRapport As Object

	oRapport = ThisDatabaseDocument.ReportDocuments.GetByName("E_FACTURE").OpenDesign

	With oRapport
		.Filter=""
	End With

	With ThisDatabaseDocument.ReportDocuments.GetByName("E_FACTURE")
		.Store
		.Close
	End With

End Sub