Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utilisation avec une connexion Access

1 réponse
Avatar
geo
Hello ,

je dois imprimer un rapport dans Excel (question de mise en page ) dont
les données sont issues d'une base Access.

Le but du jeu est de prendre les donnees du jour et de les charger dans
une feuille.
ce que j'ai fait :

1) créer une requete qui va chercher mes donnees pour les mettre dans
une feuille "datas".

ce qui m'amene a mon probleme numero 1 : si j'enregistre cette requette,
la date est figee dans la requete ... donc rappatrie toujours les
memes donnees.

donc je change d'idee :


2) je me cree une fonction :
function data(optional d as variant)
...
end function

si j'ai une date en parametre (un appel depuis VB par exple) il me met
cette date , sinon il prend la date du jour dans ma requete SQL.
Il me cree la requete par macro me rapatrie les donnees et ca marche !
je mets des liens depuis les cases du rapport vers mes donnees.

... jusqu'a ce que je relance la fonction , elle ne m'ecrase pas les
anciennes donnees, mais les mets a la suite , donc les liens ne
fonctionnent plus , enfin ils fonctionnent mais vers les premieres
donnees chargees.

donc on modifie :

3) je mets un cells.clearcontent avant de lancer la fonction et ca
marche !!!

mais bon , pas franchement elegant :-((

4) ?? ma question : y'a t'il un moyen de faire une requete dynamique
directement dans excel, par exemple je mets ma date par une fonction
dans une case precise, et ma requete SQL me la prend en parametre ?
exple : "select * from matable where date = " & sheets("X").range("A1")
afin de ne faire qu'un update des donnees sans recreer la requete a
chaques fois ?

je ne sais pas si j'ai ete tres clair ...


Amicalement

Géo

1 réponse

Avatar
michdenis
Bonjour Géo,

Comme tu ne spécifies pas si tu utilises ADO ou MsQuery, voici un exemple avec Query.


Essaie d'adapter l'exemple suivant :

'-----------------------------------
Je suppose que tu as défini une requête paramétrée dans query. Pour ce faire, directement dans la fenêtre "Query", tu
utilises les crochets droits et tu insères un petit texte significatif pour l'usager pour définir les paramètres de ta
requête. Les symboles ">" et "<" sert à déterminer l'intervalle entre les dates choisies.

Exemple :

Dans la fenêtre "Critères"

NomDuChamp : Date
critère : >[Date de début] Et <[Date de fin]


Tu retournes le résultat de la requête dans une feuille de ton classeur.

Avec un clic droit sur la plage de résultat, dans le menu déroulant , choisi : "Paramètre"

Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie gauche de la fenêtre : " Date de début" et tu sélectionne le
bouton radio :"Obtenir la valeur de la cellule suivante" : Tu indiques la cellule devant servir pour ce critère. Et pour
finir, Tu coches le bouton radio si tu veux qu'excel actualise les données dès que tu modifieras le contenu de cette cellule
(date de début) . Maintenant il te reste à faire la même chose concernant "Date de fin" . Voilà.

'-----------------------------------

Si tu voulais obtenir le même résultat à partir d'une macro qui servirait à actualiser ton "querytable", tu pourrais
t'inspirer de ceci. À copier dans la feuille module où l'action se déroule :

'----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

'il est pris pour acquis que G1, G2 contiennent des dates
'ET
'G1 est plus petit que G2 ... tu peux ajouter une gestion
'd'erreur le cas échéant....! ( pas défini ici ! )

If Target.Address = [G1].Address Or _
Target.Address = [G2].Address Then
'En supposant que ton QueryTable se situe
'sur la feuille "Feuil1"
'Plage de critère de tes dates :
'Date de début : "Feuil1!G1"
'Date de Fin : "Feuil1!G2"

Dim P1 As Parameter
Dim P2 As Parameter

'utilise l'index ou le nom de la requête
With Worksheets("Feuil1").QueryTables(1)
Set P1 = .Parameters(1)
Set P2 = .Parameters(2)
P1.SetParam xlRange, Range("Feuil1!G1")
P2.SetParam xlRange, Range("Feuil1!G2")
.Refresh False
End With
End If

End Sub
'----------------------------------


Salutations!





"geo" a écrit dans le message de news:
Hello ,

je dois imprimer un rapport dans Excel (question de mise en page ) dont
les données sont issues d'une base Access.

Le but du jeu est de prendre les donnees du jour et de les charger dans
une feuille.
ce que j'ai fait :

1) créer une requete qui va chercher mes donnees pour les mettre dans
une feuille "datas".

ce qui m'amene a mon probleme numero 1 : si j'enregistre cette requette,
la date est figee dans la requete ... donc rappatrie toujours les
memes donnees.

donc je change d'idee :


2) je me cree une fonction :
function data(optional d as variant)
...
end function

si j'ai une date en parametre (un appel depuis VB par exple) il me met
cette date , sinon il prend la date du jour dans ma requete SQL.
Il me cree la requete par macro me rapatrie les donnees et ca marche !
je mets des liens depuis les cases du rapport vers mes donnees.

... jusqu'a ce que je relance la fonction , elle ne m'ecrase pas les
anciennes donnees, mais les mets a la suite , donc les liens ne
fonctionnent plus , enfin ils fonctionnent mais vers les premieres
donnees chargees.

donc on modifie :

3) je mets un cells.clearcontent avant de lancer la fonction et ca
marche !!!

mais bon , pas franchement elegant :-((

4) ?? ma question : y'a t'il un moyen de faire une requete dynamique
directement dans excel, par exemple je mets ma date par une fonction
dans une case precise, et ma requete SQL me la prend en parametre ?
exple : "select * from matable where date = " & sheets("X").range("A1")
afin de ne faire qu'un update des donnees sans recreer la requete a
chaques fois ?

je ne sais pas si j'ai ete tres clair ...


Amicalement

Géo