Recherche d'enregistrement dans table Excel

Sly le globe trotter

XLDnaute Occasionnel
Bonjour le forum,

Il y a quelque temps, j'avais sollicité votre aide pour rechercher un enregistrement dans une table Access depuis Excel.
Code:
For i = 0 To ListBox2.ListCount - 1
            Rst.MoveFirst
            Rst.Find ("[Numéro de raquette]='" & Mid(ListBox2.List(i), 1, InStr(1, ListBox2.List(i), " -") - 1) & "'")
Next i

Me revoilà de nouveau avec un problème dans cette recherche. En effet, la base de données n'étant pas été correctement renseignée, je me retrouve avec des produits qui ont le même numéro pour des noms différents.

Est-il possible d'effectuer une recherche sur le modèle précédent en s'appuyant sur deux champs, le numéro et le nom du produit ?

Merci pour votre aide.
 
Dernière édition:

Gringo

XLDnaute Junior
Re : Recherche d'enregistrement dans table Excel

Bonjour Sly... le forum,

Oui c'est possible. Voici du code que je fais:

Code:
Sub ImportHisto()
Dim BD As Database
Dim Histo As Recordset
Dim x As Workbook
Dim f As Worksheet
 
Set x = Workbooks("Fichier.xls")
Set f = x.Worksheets("Histo")
Set BD = OpenDatabase("path/Fichier.mdb")
Set Histo = BD.OpenRecordset("Table")
'Recherche sur la clé primaire
Histo.Index = "PrimaryKey"
Histo.Seek "=", f.Range("plage nommée qui correspond aux données de ta clé primaire")
If Histo.NoMatch Then
    MsgBox ("Il n'y a pas d'enregistrement pour" & f.Range("plage nommée qui correspond aux données de ta clé primaire"))
    Histo.Close
    GoTo fin
Else
f.Range("Range1") = Histo![Champ de la BD]
f.Range("Range2") = Histo![Champ de la BD]
End If
Histo.Close
Histo=nothing
BD=nothing
End Sub

Tu n'as qu'à nommer tes champs dans Excel et ça devrait marcher.

En espérant que répond à tes besoins!

Gringo
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Recherche d'enregistrement dans table Excel

Bonjour Gringo, le forum,

Je ne suis pas sûr d'avoir correctement expliqué mon problème ou d'avoir compris ton code...

En fait dans ma table Access, j'ai plusieurs enregistrements avec pour chacun d'eux plusieurs champs : Ch1, Ch2, Ch3... Ch25.
Chaque enregistrement a bien une clé primaire mais je ne peux pas effectuer la recherche sur cette clé primaire car elle n'est pas explicite du tout. Je dois donc rechercher un enregistrement en me basant sur d'autre(s) champs.

Le Ch1 correspond à un numéro de produit et le Ch2 à un nom de produit. Le hic, c'est que la base n'a pas été correctement remplie initiallement. Il y a donc des enregistrements ayant les mêmes numéros. Je veux donc effectuer une recherche sur deux champs, le numéro et le nom.

Merci pour votre aide
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Recherche d'enregistrement dans table Excel

Bonjour MichelXLD,

J'ai tenté ta méthode mais étant donné le fouilli de ma formule, je me perds dans les " et '...

Avec le code suivant :
Code:
Rst.Find ("[Numéro de raquette]='" & Mid(ListBox2.List(i), 1, InStr(1, ListBox2.List(i), " -") - 1) & "'" And "[Numéro lay up ou nom]='" & Mid(ListBox2.List(i), InStr(1, ListBox2.List(i), "-") + 2) & "'")

j'ai une erreur d'incompatibilité de type...

Il ne doit pas manquer grand chose mais je coince ;-)

Merci pour ton aide
 

michel_m

XLDnaute Accro
Re : Recherche d'enregistrement dans table Excel

bonjour Sly, Gringo, mon cher Michel

Je suis p'tet à coté de la plaque:

Si tu as accès à ta base pourquoi ne pas créer un champ calculé égal à la concaténation de N° de produit et de son nom ? si tu n'y a pas accès, ADO permet de le créer sans trop de pb

Ensuite, plutôt que d'employer "find" on utiliserait SQL

"SELECT teschampsvoulus FROM tatable WHERE lechampcalculé = tonexpressionexcel;"

Bonne soirée
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Recherche d'enregistrement dans table Excel

bonjour messieurs,

En fait, à partir de ma base access et de ces deux champs, j'alimente une listbox dont chaque élément est la concaténation des deux champs de ma base.

Lorsque l'utilisateur sélectionne un élément dans la listbox, il faut que je "retrouve" l'élément dans la table Access. D'où ma recherche sur les deux champs dont je connais la valeur.

J'ai tenté de passer par du SQL mais je suis limité...
Code:
Rst.Open "SELECT * FROM [Liste des raquettes] WHERE [Numéro de raquette]= Mid(ListBox2.List(i), 1, InStr(1, ListBox2.List(i), " - ")-1) AND [Numéro lay up ou nom]=Mid(ListBox2.List(i), InStr(1, ListBox2.List(i), " - ") + 3)"

Cela revient à
Code:
Rst.Open "SELECT * FROM [Liste des raquettes] WHERE [Numéro de raquette]= Numéro AND [Numéro lay up ou nom]=Nom raq"

J'ai du comettre quelques erreurs. J'ai pourtant vérifié les valeurs renvoyées par la fonction Mid et elles correspondent. Celà doit venir d'une erreur de syntaxe...

Désolé pour le dérangement et encore merci pour votre aide
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Recherche d'enregistrement dans table Excel

Bonjour le forum, michel_m et merci pour la rapidité de ta réponse,

En fait, je me suis raté, j'ai bien pensé à ne pas mettre d'espace... Par contre du fait d'erreur, j'ai du modifier quelque peu mon code

Voici la dernière version (qui ne marche pas...) :
Code:
Rst.Open "SELECT * FROM [Liste des raquettes] WHERE [Numéro de raquette]= NumeroRaquette AND [Numéro lay up ou nom]=NomRaquette", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

J'ai une erreur m'indiquant qu'il n'y a pas assez de paramètres !!!

Merci encore
 

michel_m

XLDnaute Accro
Re : Recherche d'enregistrement dans table Excel

Re,

ci joint un petit exemple basique où il faut que 2 champs soient identiques aux données excel pour extraire la ligne

Il s'agit de 2 champs texte qui doivent donc être encadrés par des apostrophes, apostrophes non utiles s'il s'agit d'une valeur numérique. d'après ce que j'ai cru comprendre de tes messages, jai considéré que les valeurs excel sont inscrites en variable (nom_raquette?)
 
Dernière édition:

Sly le globe trotter

XLDnaute Occasionnel
Re : Recherche d'enregistrement dans table Excel

Salut michel_m,

Je te remercie grandement pour le temps que tu me consacres, c'est vraiment super sympa. J'ai essayé de reproduire ton exemple dans mon fichier mais je bute toujours...

Si ça ne te gêne pas trop, j'ai simplifié mon fichier et ma base de données pour pouvoir les joindre dans ce post. Si tu veux y jeter un coup d'oeil, j'en serais ravi !
YouSendIt: The Leader in File Delivery.

De mon côté, je vais continuer à explorer les mystères d'Excel.

Mille mercis !
 

michel_m

XLDnaute Accro
Re : Recherche d'enregistrement dans table Excel

Re,

de passage at home;

j'ai regardé la macro concernée:

NumeroRaquette = Mid(ListBox2.List(i), 1, InStr(1, ListBox2.List(i), " - ") - 1) renvoie une variable type string dans la base on a pour ce champ une valeur numérique/

Pour transformer en numérique Essaies :
NumeroRaquette = val(Mid(ListBox2.List(i), 1, InStr(1, ListBox2.List(i), " - ") - 1))/

D’autre part, après cette transformation en numérique, numeroraquette est une variable donc il faut bidouiller le texte SQL: /
texte_SQL = "SELECT * FROM R_Liste_raq WHERE [Numéro de raquette]= NumeroRaquette AND [Numéro lay up ou nom]='" & NomRaquette & "';"/

devient/
texte_SQL = "SELECT * FROM R_Liste_raq WHERE [Numéro de raquette]= " & NumeroRaquette & "AND [Numéro lay up ou nom]='" & NomRaquette & "';"/
/
a mon avis, il n'était ^pas nécessaire de créer une requête Access (R_liste_raq), tu peux sélectionner sur la table (dans mon exemple, c'était nécessaire car données dans plusieurs tables avec clés étrangères)
 

Discussions similaires

Réponses
4
Affichages
231

Statistiques des forums

Discussions
312 393
Messages
2 088 007
Membres
103 698
dernier inscrit
Guillaume MPOYI