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)

Bonjour,

effectivement ça serait bien de voir ton 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

https://www.excel-pratique.com/~files/doc2/Requete.xls

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.

bug

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

Rechercher des sujets similaires à "requete query liste deroulante"