probleme DLookUp

probleme DLookUp - VB/VBA/VBS - Programmation

Marsh Posté le 13-04-2005 à 16:53:34    

Bonjour,
J'ai un problème dont je n'arrive pas a me sortir :
J'ai un formulaire "devis" avec une date de devis et un nom de société.
Je veux pouvoir supprimer ce devis de ma table "GlobalDevis" dans lequel j'ai plusieurs sociétés pour la date considérée.
Je veux donc faire un DLookUp avec 2 critères : un de date (la date du devis) et un de texte (le nom de la société)
Si je fais un DLookUp pour chaque critere, ça marche : il trouve la première occurence de mon Numéro d'index de la table :
 
numéro = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[Société] = " & "'" & Me![NomSociété] & "'" )
>>> IndexDevGlob = 20, donc il trouve la 1ere occurence du nom de la socièté
 
ou si je fais :
numdedate = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[DateGlob] = " & Format(Me![DateGlob], "\#mm-dd-yyyy\#" ))
>>> IndexDevGlob = 17, donc il trouve la 1ere occurence de la date
 
Si je fais :
vrainuméro = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[DateGlob] = " & Format(Me![DateGlob], "\#mm-dd-yyyy\#" ) _
And "[Société] = " & "'" & Me![NomSociété] & "'" )
 
ça me dit : erreur d'execution 13 >>>incompatibilité de type !  
Quelqu'un peut-il m'expliquer ou je fais une erreur ?

Reply

Marsh Posté le 13-04-2005 à 16:53:34   

Reply

Marsh Posté le 13-04-2005 à 16:58:28    

Déjà un nom de société avec apostrophe va planter grave :

"[Société] = """ & Me![NomSociété] & """"


Aussi y'a une concaténation qui manque entre le Format() et le "AND" :

vrainuméro = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[DateGlob] = " & Format(Me![DateGlob], "\#mm-dd-yyyy\#" ) _
" AND [Société] = """ & Me![NomSociété] & """" )

Reply

Marsh Posté le 13-04-2005 à 17:11:38    

Merci FlorentG pour la réponse ultra rapide.
j'avais déjà essayé en mettant une apostrophe avant AND.
J'ai copié collé ton bout de code dans mon programme et il me dit soit "erreur de progragrammation, soit il manque un séparateur sur :
" AND [Société] = """
Bref ça ne marche tjs pas
et ça reste en rouge

Reply

Marsh Posté le 13-04-2005 à 17:15:01    

Ceci dit , sil y a une autre méthode en VBA pour trouver un enregistrement avec 2 criteres, je suis preneur...

Reply

Marsh Posté le 13-04-2005 à 18:08:30    

Y'a plus personne pour me repondre ?
C'est dommage, ça partait bien !

Reply

Marsh Posté le 13-04-2005 à 22:02:20    

Après bien des essais, j'ai enfin trouvé la bonne syntaxe (en tout cas celle qui marche sur mon ordi)....
Je la retranscris ici, ça peut en aider d'autres :
 
vrainuméro = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[DateGlob] = " & Format(Me![DateGlob], "\#mm-dd-yyyy\#" )& _
" AND [Société] = " & " ' " & Me![NomSociété] & " ' " )
 
Sans oublier le & commercial après le format de date et les apostrophes entre les guillemets (j'ai rajouté des espaces pour mieux les montrer).
Merci pour tout.

Reply

Marsh Posté le 13-04-2005 à 23:37:23    

Ah merde je suis con, j'ai oublié les '&'. Par contre, t'as pas corrigé les ' qu'il faut transformer en "" :o

Reply

Marsh Posté le 14-04-2005 à 00:01:40    

Ben, ecoute, ça marche comme ça... je n'y touche plus !
par contre, j'ai un autre problème (tu t'es aperçu que je débute !) : je ne sais pas comment actualiser au fur et à mesure ma table pour chercher les autres occurrences de la même société a la même date.
De plus quand il ne trouve pas de N° correspondant, il n'accepte pas la valeur Null !

Reply

Marsh Posté le 14-04-2005 à 00:03:09    

DLookup ne retourne qu'une ligne je crois. Faut utiliser un RecordSet pour pouvoir fouiller dans plusieurs enregistrements :(

Reply

Marsh Posté le 14-04-2005 à 00:07:10    

Voila ce que j'ai fait : c'est ans doute du bricolage mais je n'ai pas trouvé mieux :
Dim numéro As Integer
1 numéro = DLookup("[IndexDevGlob]", "GlobalDevis", _
"[DateGlob] = " & Format(Me![DateGlob], "\#mm-dd-yyyy\#" ) & _
" AND [Société] = " & "'" & Me![NomSociété] & "'" )
If IsNull(numéro) Then GoTo 2
Dim supprim As DAO.Recordset
Set supprim = CurrentDb.OpenRecordset("GlobalDevis", DBOpenDynaset)
    supprim.MoveFirst
    While supprim("IndexDevGlob" ) <> numéro
    supprim.MoveNext
    Wend
    supprim.Delete
    supprim.Close
     
COMMENT ON ACTUALISE ???"
    GoTo 1
2 Exit_Supp_Click:


Message édité par Colegram le 14-04-2005 à 00:08:30
Reply

Marsh Posté le 14-04-2005 à 00:07:10   

Reply

Marsh Posté le 14-04-2005 à 00:07:55    

Dans le while, juste avant le movenext, tu peux récupérer l'enregistrement en cours

Reply

Marsh Posté le 14-04-2005 à 00:14:19    

Oui d'accord, mais ce que je veux, c'est boucler jusqu'à ce qu'il n'y ait plus d'enregistrement à supprimer et ne pas bloquer avec un message "utilisation incorrecte de la valeur Null" quand il ne trouve plus d'enregistrement.

Reply

Marsh Posté le 14-04-2005 à 00:15:47    

Y'a une propriété EOF du recordset pour voir si t'es à la fin

Reply

Marsh Posté le 14-04-2005 à 00:23:42    

Je ne sais pas si j'ai bien compris ta réponse mais je ne veux pas tous les supprimer, mais seulement ceux qui ont la même société pour une date considérée :
Par exemple supprimer la société "A" à la date du 13/4 dans l'exemple ci-dessous :  
 
A 13/4
B 12/4
C 13/4
A 13/4

Reply

Marsh Posté le 14-04-2005 à 14:07:17    

j'ai résolu mon problème :
J'ai changé mon Integer en Variant et j'ai mis un Me.refresh.
Et ça marche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed