Requête Query avec liste déroulante
Bonjour,
Je veux effectuer une requête dans Microsoft query d'une base de données access, j'ai comme critère [Nom du client ?] donc lorsque quelqu'un actualise la requête, au lieu d'importé toute ma base de donné, j'importe seulement les données sur un client spécifique.
Mon problème est que je voudrais avoir une liste déroulante lorsque je demande la question sur le client.
Merci
(Si vous avez besion je peux joindre un fichier)
J'ai trouvé une alternative à mon problème
Données/Données externes/Paramêtres de la requête, ensuite une boîte de paramètre souvre. On sélectionne l'onglet "Obtenir la valeur de la cellule suivante" exemple A2, et dans la cellule A2 je fais ma liste déroulante.
Donc je choisis mon client et ensuite j'effectue ma requête, et je peux mettre autant de critère que je veux comme des dates par exemple.
C'est la façon dont j'ai règlé mon problème, mais si quelqu'un a une meilleure solution, s'il vous plait me la faire parvenir.
Merci
Voici une exemple que j'ai monté rapidement
Mais je fais face à un nouveau problème, c'est lorsque je veux tous mes clients, je ne suis pas capable.
mais j'ai un fichier acess et je ne peux pas le joindre, mais je vais quand même envoyer mon fichier excel
Autre problème, je fais ma requête dans un autre fichier excel, mais certaines données ne se transfert pas et je ne sais pas pourquoi.
Est-ce que vous pouvez m'éclairer
Merci
Bonjour,
Voici un exemple de ma requête que je veux effectuer, mais que certaines colonnes ne s'importe pas et je ne sais pas pourquoi.
https://www.excel-pratique.com/~files/doc2/requete.zip
Exemple JC est ma base de donnée et Requête est la requête que j'effectue dans mon autre fichier excel (Exemple JC.xls)
Merci
Bonjour Maxime,
dans le premier fichier que tu a envoyé, "Requete.xls" tu faisais référence à un fichier access que tu ne pouvais envoyé. Est-ce que c'est par soucie de confidentialité? J'aimerais que tu puisse me l'envoyer pour pouvoir tester ton fichier, même si il n'y a aucune enregistrement c'est pas grave c'est la structure que j'ai besoin.
Je pense que pour afficher tous tes enregistrement on peut utiliser un * dans la requete sql. Je ne suis juste pas sur de la syntaxe, c'est pour ça que j'ai besoin de ton fichier de BD.
Math
Non on ne peut envoyer des fichiers .mdb sur le forum c'est pour cela.
Mais ce n'est grave, mon autre problème me cause beaucoup plus de soucis, si tu pouvais m'aider sur mon autre problème tu m'aiderais énormément.
Merci
Bonjour Maxime,
peux-tu me dire quelle colonnes ne s'importe pas.
Une solution pour envoyer une table Access, dans access exporte ta table en fichier xls. ensuite on peut importer un fichier xls dans Access. Bien sur si ta table compte trop d'enregistrement ( plus de 65536 ) c'a ne marche pas.
Je ne sais pas si tu as téléchargés mon documents, mais ce document contien 2 fichiers, Exemple JC et requête.
Exemple JC est ma base de donnée et mon fichier requête effectue un requête dans mon fichier Exemple JC.
Les colonnes qui ne s'importent pas sont X, AD:AQ, AV:AZ et d'autres mais ce sont des exemples.
Bonjour Maxime,
je suis désolé mais je n'ai pas de solution pour toi. J'ouvre les deux derniers fichiers que tu as poster et effectivement des colonnes manquent, mais dès que j'actualise la requête elles s'affichent. C'est peut-être dans la structure de ton fichier... de ta requete?
D'habitude j'utilise vba pour acceder aux données d'une table access. Voici un exemple si ça t'interesse.
Public Sub ExtractBD()
'Necessite la référence Microsoft DAO X.X Objet library
Dim MaDB As DAO.Database
Dim rst As DAO.Recordset
Dim strSql As String
strSql = "SELECT * FROM test WHERE (((test.Code)=" & Chr(34) & Range("A1") & Chr(34) & ")); "
Set MaDB = DBEngine.OpenDatabase(ActiveWorkbook.Path & "\Data.mdb")
Set rst = MaDB.OpenRecordset(strSql)
Sheets("Feuil1").Activate
Range("a2").CopyFromRecordset rst
Set rst = Nothing
MaDB.Close
Set MaDB = Nothing
End Sub
Je te souhaite du succès avec ton fichier
Ok merci, de ta réponse je vais essayer de programer en VBA merci
J'ai une dernière petite question pour toi si ça ne te dérange pas, j'ai déjà posé la question sur le forum, mais on ne m'a pas répondu alors je me demande si toi tu pouvais me répondre.
Je veux faire un bouton dans excel qui ouvrirais un fichier pdf. Javais penser à la fonction Dir, j'ai essayer de le programer moi-même mais sans succès.
Alors je te demande ton aide.
Je voudrais que lorsque l'on appuit sur le bouton, un msgbox ouvre et demande une partie du nom du fichier, ensuite, il irait lire dans deux dossier pour aller choisir le nom qui correspond.
Merci de ton aide.
J'ai deux solutions à te proposer:
1- ta solution, avec une inputbox qui demande le nom du fichier et une recherche dans deux répertoires que tu as choisi:
code du bouton:
Private Sub CommandButton1_Click()
Dim NomFichier As String
NomFichier = Application.InputBox("Entrer le nom du fichier PDF", "Ouverture PDF", Type:=2)
If Not Monfichier = "Faux" Then Call ShellOuvre(Monfichier, "C:\RepTest1\", "C:\RepTest2\")
End Sub
et dans un module:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub ShellOuvre(NomFichier As String, RepTest1 As String, RepTest2 As String)
If Dir(RepTest1 & NomFichier) <> "" Then
ShellExecute 0, "open", RepTest1 & NomFichier, "", "", 0
Else
If Dir(RepTest2 & NomFichier) <> "" Then
ShellExecute 0, "open", RepTest2 & NomFichier, "", "", 0
Else
MsgBox "Chemin ou fichier introuvable."
End If
End If
End Sub
2- Avec un boite de dialogue. L'usager choisi le fichier pdf à ouvrir. Plus de liberté à l'usager par contre.
code du bouton:
Private Sub CommandButton2_Click()
Dim Monfichier As String
Monfichier = Application.GetOpenFilename(Title:="Sélection du fichier", FileFilter:="Fichiers PDF *.pdf (*.pdf),")
If Not Monfichier = "Faux" Then Call ShellOuvre(Monfichier)
End Sub
et remplace la sub ShellOuvre par celle-ci:
Sub ShellOuvre(NomFichier As String)
If Dir(NomFichier) <> "" Then
ShellExecute 0, "open", NomFichier, "", "", 0
Else
MsgBox "Chemin ou fichier introuvable."
End If
End Sub
j'ai adapté le code trouvé
Ok bon va faloir tu m'aide un peu,
1-Pour identifier les 2 répertoires, c'est où dans le code que j'identifie le chemin de mes repertoires
2- Pour le nom du fichier, je voudrais que ds le inputbox on entre par exemple le debut du nom 2312 ensuite il va chercher le nom du fichier qui commence par 2312.
Est-ce que tu veux gérer le fait que peut-être 2 fichiers auront le même préfixe? Ou bien si le même fichier se retrouve dans chacun des répertoires testés, lequel prédominera?
Ça ne devrait pas arrivé qu'il y est 2 fichiers avec le même nom, si ça l'arrive, je voudrais un message d'erreur qui dit "un ou plusieurs fichiers ont été trouvé" par exemple car si ça l'arrive c'est vraiment rare.
Et pour les répertoires c'est la même chose seulement mettre un message d'erreur et arrêter la procédure.
merci
J'ai fait le test d'erreur et si 2 fichiers ou plus réponde aux critères de recherche, une userform s'affiche et demande le choix du fichier à ouvrir.
regarce ce fichier si ça convient à ce que tu veux faire.
https://www.excel-pratique.com/~files/doc2/OuvrirFichier.xls
pour la déclaration des répertoires de recherche, tu le fais dans cette ligne de la procedure du click sur le bouton
Private Sub CommandButton1_Click()
Dim NomFichier As String
NomFichier = InputBox("Entrer le nom du fichier PDF", "Ouverture PDF")
If Not NomFichier = "" Then
'Cette ligne est à modifier
Call RechercheFichier(NomFichier, "C:\Rep1", "C:\Rep2\")
Select Case NomFichierOuvrir
Case "Introuvable"
MsgBox "Fichier introuvable"
Case "Annule"
MsgBox "Opération annulé"
Case Else
ShellOuvre (NomFichierOuvrir)
End Select
Else
MsgBox "Vous devez entrer un nom de ficher"
End If
End Sub
remplace "C:\Rep1\" et "C:\Rep2\" par tes répertoires. C'est important de finir par \.
hésite pas si tu as des questions
C'est parfais j'ai fait quelques tests et tout c'est bien passé. Le seul hic c'est lorsque je veux ouvrir le premier fichier, la fonciton n'ouvre pas le fichier, il faut que je le fasse 2 fois. La première c'est comme si il ouvrait adobe pdf mais sans ouvrir le fichier, lorsqu je refais la commande, il ouvre parfaitement et les autres apres aussi, mais lorsque je referme adobe pdf, le prochian pdf que je veux ouvrir il faut que je refasse deux fois la procédure.
Est-ce que tu sais pourquoi??
PS: sur mon bureau il marche parfaitement, mais a mon travail on n'est en terminal et c'est en terminal que mon problème survient.
ok voici une version beaucoup plus simple que j'ai trouvé, si ça fonctionne il n'y a pas de raison pour que tu ne l'utilises pas.
Le code du bouton:
Private Sub CommandButton1_Click()
Dim NomFichier As String
NomFichier = InputBox("Entrer le nom du fichier PDF", "Ouverture PDF")
If Not NomFichier = "" Then
Call RechercheFichier(NomFichier, "C:\", "C:\test2\")
Select Case NomFichierOuvrir
Case "Introuvable"
MsgBox "Fichier introuvable"
Case "Annule"
MsgBox "Opération annulé"
Case Else
' La modification ========================================
ActiveWorkbook.FollowHyperlink Address:=NomFichierOuvrir
' =====================================================
End Select
Else
MsgBox "Vous devez entrer un nom de ficher"
End If
End Sub
et dans le module tu gardes que ceci
Public NomFichierOuvrir As String
Sub RechercheFichier(MonFichier As String, Rep1 As String, Rep2 As String)
Dim oFS As Office.FileSearch
Dim NbResultat As Integer
Dim TableauResultat() As String
Set oFS = Application.FileSearch
With oFS
'Recherche répertoire 1
.NewSearch
.Filename = MonFichier & "*.pdf"
.LookIn = Rep1
.Execute
For i = 1 To .FoundFiles.Count
NbResultat = NbResultat + 1
ReDim Preserve TableauResultat(NbResultat)
TableauResultat(NbResultat) = .FoundFiles.Item(i)
Next i
'Recherche répertoire 2
.NewSearch
.Filename = MonFichier & "*.pdf"
.LookIn = Rep2
.Execute
For i = 1 To .FoundFiles.Count
NbResultat = NbResultat + 1
ReDim Preserve TableauResultat(NbResultat)
TableauResultat(NbResultat) = .FoundFiles.Item(i)
Next i
End With
Select Case NbResultat
Case 1
NomFichierOuvrir = TableauResultat(1)
Case Is > 1
For i = 1 To NbResultat
fChoixFichier.ListBoxFichier.AddItem (TableauResultat(i))
Next i
fChoixFichier.Show
Case Else
NomFichierOuvrir = "Introuvable"
End Select
End Sub
au lieu d'utiliser la commande Shell on utilise FollowHyperlink qui permet de suivre un hyperlien déclaré par code sans qu'il soit présent dans le document.
dit moi si ça fonctionne mieux de cette façon.
Bravo Math ça marche très bien merci mon problème est réglé.
Je te remerci beaucoup de ton aide, tu expliques vraiment bien.
Au plaisir