bonjours
J'ais une fonction de sauvegarde
qui devrais tester les enregistrements de la colone d'une table pour
pouvoire faire cette sauvegarde
ca marche quand je fait
srtQuoi et egale a 1 ou 2 ou 3 ou 4 etc...5..7
If strQuoi = remA Then
MsgBox "Le N° de l'Archive existe déjà. Recomence."
End If
ou bien
----------------------------------------------------------------
If IsNull(strQuoi) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
-------------------------------------------------------------
mais quand je fait
If remA < strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
----------------------------------------------------
ca ne marche pas
Merci
le code complet de la fonction
Function sauv()
On Error Resume Next
Dim srtquoi As String
strQuoi = DLookup("[archive n°]", "ARCHIVE")
remA = InputBox("N° de l'Archive")
If strQuoi = remA Then
MsgBox "Le N° de l'Archive existe déjà. Recomence."
End If
If remA > strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
If remA < strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], descriptio
n )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de
commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT
JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
If IsNull(strQuoi) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
End Function
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier HUE
Bonjour Yann,
Avant tout, quelques remarques: 1) Le SQL exécuté dans les trois cas est le même, tu aurais donc avantage à regrouper tes tests pour n'exécuter qu'une fois ce SQL. C'est plus facile à lire et à maintenir.
2) Que cherches-tu à faire au juste? DLookup sans critère retourne une valeur aléatoire, si le jeu d'enregistrement du domaine consulté contient plusieurs enregistrements. Si le but est de demander un N° d'archive puis controler que ce N° n'existe pas, tu peux t'en sortir comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement la ligne "Option Explicit" dans tous tes modules. Cela permet d'éviter beaucoup d'erreur de saisie de ce type. Utiliser une variable non initialisée car mal déclarée te mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une solution ;-)
Function sauv2() Dim srtquoi As String 'Prendre l'habitude de déclarer toutes les variables en début de procédure ou fonction 'De la sorte, celles-ci ne se trouvent pas "noyées" dans le code 'Dans cette fonction, srtquoi est inutile. Tu peux donc supprimer cette déclaration Dim remA As String
On Error Resume Next
'Demander un N° d'archive remA = InputBox("N° de l'Archive")
If remA = "" Then MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance If DCount("[archive n°]", "ARCHIVE", "[archive n°]='" & remA & "'") <> 0 Then MsgBox "Le N°" & remA & " d'Archive existe déjà. Recommencez."
Else
DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If End If End Function
Espérant t'avoir aidé. Cordialement. Xavier.
PS: Enlever blurg de l'adresse mail.
Bonjour Yann,
Avant tout, quelques remarques:
1) Le SQL exécuté dans les trois cas est le même, tu
aurais donc avantage à regrouper tes tests pour n'exécuter
qu'une fois ce SQL. C'est plus facile à lire et à
maintenir.
2) Que cherches-tu à faire au juste? DLookup sans
critère retourne une valeur aléatoire, si le jeu
d'enregistrement du domaine consulté contient plusieurs
enregistrements. Si le but est de demander un N° d'archive
puis controler que ce N° n'existe pas, tu peux t'en sortir
comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même
chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA
est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement
la ligne "Option Explicit" dans tous tes modules. Cela
permet d'éviter beaucoup d'erreur de saisie de ce type.
Utiliser une variable non initialisée car mal déclarée te
mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une
solution ;-)
Function sauv2()
Dim srtquoi As String 'Prendre l'habitude de déclarer
toutes les variables en début de procédure ou fonction
'De la sorte, celles-ci ne se
trouvent pas "noyées" dans le code
'Dans cette fonction, srtquoi
est inutile. Tu peux donc supprimer cette déclaration
Dim remA As String
On Error Resume Next
'Demander un N° d'archive
remA = InputBox("N° de l'Archive")
If remA = "" Then
MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance
If DCount("[archive n°]", "ARCHIVE", "[archive n°]='"
& remA & "'") <> 0 Then
MsgBox "Le N°" & remA & " d'Archive existe déjà.
Recommencez."
Else
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite,
[archive n°], description )SELECT [Bons de commande].nart,
[Bons de commande].quantite, [Bons de commande].[archive
N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT
JOIN Feuil1 ON [Bons de commande].nart =
Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
End If
End Function
Avant tout, quelques remarques: 1) Le SQL exécuté dans les trois cas est le même, tu aurais donc avantage à regrouper tes tests pour n'exécuter qu'une fois ce SQL. C'est plus facile à lire et à maintenir.
2) Que cherches-tu à faire au juste? DLookup sans critère retourne une valeur aléatoire, si le jeu d'enregistrement du domaine consulté contient plusieurs enregistrements. Si le but est de demander un N° d'archive puis controler que ce N° n'existe pas, tu peux t'en sortir comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement la ligne "Option Explicit" dans tous tes modules. Cela permet d'éviter beaucoup d'erreur de saisie de ce type. Utiliser une variable non initialisée car mal déclarée te mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une solution ;-)
Function sauv2() Dim srtquoi As String 'Prendre l'habitude de déclarer toutes les variables en début de procédure ou fonction 'De la sorte, celles-ci ne se trouvent pas "noyées" dans le code 'Dans cette fonction, srtquoi est inutile. Tu peux donc supprimer cette déclaration Dim remA As String
On Error Resume Next
'Demander un N° d'archive remA = InputBox("N° de l'Archive")
If remA = "" Then MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance If DCount("[archive n°]", "ARCHIVE", "[archive n°]='" & remA & "'") <> 0 Then MsgBox "Le N°" & remA & " d'Archive existe déjà. Recommencez."
Else
DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If End If End Function
Espérant t'avoir aidé. Cordialement. Xavier.
PS: Enlever blurg de l'adresse mail.
Daniel Carollo
Bonjour Yann!
Votre code est tres difficile a lire. J'espere que vous utilisez des tabs dans l'editeur de code. Sinon, cela expliquerait pourquoi votre code ne marche pas.
La table Archive n'a-t-elle qu'un seul enregistrement?
A moins que quelque chose d'important (mais tout petit) m'echappe, vous faites trois fois la meme chose, dans le cas ou strQuoi > remA, strQuoi < remA, et strQuoi est nul. Ne serait-il pas plus aise de faire if IsNull(strQuoi) or strQuoi <> remA Then <procedure d'insert ici> end if sans avoir a re-ecrire (et a debugger) trois fois la meme chose?
De plus, dans le cas ou le numero de l'archive existe deja, vous affichez le message a l'utilisateur, mais vous continuez a executer le code comme si de rien n'etait...
Bon courage.
Daniel :-)
Computing Technologies International - www.computing-tech.com We provide solutions... P.S. Je suis maintenant disponible pour contrats à courte et moyenne durée. Envoyer un courrier a: d a n i e l c @ c o m p u t i n g - t e c h . c o m
"Yann" wrote in message news:
bonjours J'ais une fonction de sauvegarde qui devrais tester les enregistrements de la colone d'une table pour pouvoire faire cette sauvegarde ca marche quand je fait srtQuoi et egale a 1 ou 2 ou 3 ou 4 etc...5..7
If strQuoi = remA Then MsgBox "Le N° de l'Archive existe déjà. Recomence." End If ou bien ---------------------------------------------------------------- If IsNull(strQuoi) Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If ------------------------------------------------------------- mais quand je fait If remA < strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If ---------------------------------------------------- ca ne marche pas
Merci
le code complet de la fonction
Function sauv() On Error Resume Next Dim srtquoi As String strQuoi = DLookup("[archive n°]", "ARCHIVE") remA = InputBox("N° de l'Archive") If strQuoi = remA Then MsgBox "Le N° de l'Archive existe déjà. Recomence." End If If remA > strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If If remA < strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], descriptio
n )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT
JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If If IsNull(strQuoi) Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If End Function
Bonjour Yann!
Votre code est tres difficile a lire. J'espere que vous utilisez des tabs
dans l'editeur de code. Sinon, cela expliquerait pourquoi votre code ne
marche pas.
La table Archive n'a-t-elle qu'un seul enregistrement?
A moins que quelque chose d'important (mais tout petit) m'echappe, vous
faites trois fois la meme chose, dans le cas ou strQuoi > remA, strQuoi <
remA, et strQuoi est nul. Ne serait-il pas plus aise de faire
if IsNull(strQuoi) or strQuoi <> remA Then
<procedure d'insert ici>
end if
sans avoir a re-ecrire (et a debugger) trois fois la meme chose?
De plus, dans le cas ou le numero de l'archive existe deja, vous affichez
le message a l'utilisateur, mais vous continuez a executer le code comme si
de rien n'etait...
Bon courage.
Daniel :-)
Computing Technologies International - www.computing-tech.com
We provide solutions...
P.S. Je suis maintenant disponible pour contrats à courte et moyenne durée.
Envoyer un courrier a: d a n i e l c @ c o m p u t i n g - t e c h . c o
m
"Yann" <yann.rhibaud@free.fr> wrote in message
news:OSowmpCTDHA.1916@TK2MSFTNGP12.phx.gbl...
bonjours
J'ais une fonction de sauvegarde
qui devrais tester les enregistrements de la colone d'une table pour
pouvoire faire cette sauvegarde
ca marche quand je fait
srtQuoi et egale a 1 ou 2 ou 3 ou 4 etc...5..7
If strQuoi = remA Then
MsgBox "Le N° de l'Archive existe déjà. Recomence."
End If
ou bien
----------------------------------------------------------------
If IsNull(strQuoi) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4
;", -1
DoCmd.SetWarnings True
End If
-------------------------------------------------------------
mais quand je fait
If remA < strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4
;", -1
DoCmd.SetWarnings True
End If
----------------------------------------------------
ca ne marche pas
Merci
le code complet de la fonction
Function sauv()
On Error Resume Next
Dim srtquoi As String
strQuoi = DLookup("[archive n°]", "ARCHIVE")
remA = InputBox("N° de l'Archive")
If strQuoi = remA Then
MsgBox "Le N° de l'Archive existe déjà. Recomence."
End If
If remA > strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4
;", -1
DoCmd.SetWarnings True
End If
If remA < strQuoi Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
descriptio
n )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de
commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande]
LEFT
JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
If IsNull(strQuoi) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°],
description )SELECT [Bons de commande].nart, [Bons de commande].quantite,
[Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de
commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4
;", -1
Votre code est tres difficile a lire. J'espere que vous utilisez des tabs dans l'editeur de code. Sinon, cela expliquerait pourquoi votre code ne marche pas.
La table Archive n'a-t-elle qu'un seul enregistrement?
A moins que quelque chose d'important (mais tout petit) m'echappe, vous faites trois fois la meme chose, dans le cas ou strQuoi > remA, strQuoi < remA, et strQuoi est nul. Ne serait-il pas plus aise de faire if IsNull(strQuoi) or strQuoi <> remA Then <procedure d'insert ici> end if sans avoir a re-ecrire (et a debugger) trois fois la meme chose?
De plus, dans le cas ou le numero de l'archive existe deja, vous affichez le message a l'utilisateur, mais vous continuez a executer le code comme si de rien n'etait...
Bon courage.
Daniel :-)
Computing Technologies International - www.computing-tech.com We provide solutions... P.S. Je suis maintenant disponible pour contrats à courte et moyenne durée. Envoyer un courrier a: d a n i e l c @ c o m p u t i n g - t e c h . c o m
"Yann" wrote in message news:
bonjours J'ais une fonction de sauvegarde qui devrais tester les enregistrements de la colone d'une table pour pouvoire faire cette sauvegarde ca marche quand je fait srtQuoi et egale a 1 ou 2 ou 3 ou 4 etc...5..7
If strQuoi = remA Then MsgBox "Le N° de l'Archive existe déjà. Recomence." End If ou bien ---------------------------------------------------------------- If IsNull(strQuoi) Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If ------------------------------------------------------------- mais quand je fait If remA < strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If ---------------------------------------------------- ca ne marche pas
Merci
le code complet de la fonction
Function sauv() On Error Resume Next Dim srtquoi As String strQuoi = DLookup("[archive n°]", "ARCHIVE") remA = InputBox("N° de l'Archive") If strQuoi = remA Then MsgBox "Le N° de l'Archive existe déjà. Recomence." End If If remA > strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If If remA < strQuoi Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], descriptio
n )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT
JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If If IsNull(strQuoi) Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart = Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True End If End Function
Yann
peut ont remplacer dans la requette tou la zone [Bons de commande].[archive N°] AS Expr2 pour eviter la resaisie du n° de l'archive.
"Xavier HUE" a écrit dans le message de news: 01e701c34c36$93f863a0$ Bonjour Yann,
Avant tout, quelques remarques: 1) Le SQL exécuté dans les trois cas est le même, tu aurais donc avantage à regrouper tes tests pour n'exécuter qu'une fois ce SQL. C'est plus facile à lire et à maintenir.
2) Que cherches-tu à faire au juste? DLookup sans critère retourne une valeur aléatoire, si le jeu d'enregistrement du domaine consulté contient plusieurs enregistrements. Si le but est de demander un N° d'archive puis controler que ce N° n'existe pas, tu peux t'en sortir comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement la ligne "Option Explicit" dans tous tes modules. Cela permet d'éviter beaucoup d'erreur de saisie de ce type. Utiliser une variable non initialisée car mal déclarée te mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une solution ;-)
Function sauv2() Dim srtquoi As String 'Prendre l'habitude de déclarer toutes les variables en début de procédure ou fonction 'De la sorte, celles-ci ne se trouvent pas "noyées" dans le code 'Dans cette fonction, srtquoi est inutile. Tu peux donc supprimer cette déclaration Dim remA As String
On Error Resume Next
'Demander un N° d'archive remA = InputBox("N° de l'Archive")
If remA = "" Then MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance If DCount("[archive n°]", "ARCHIVE", "[archive n°]='" & remA & "'") <> 0 Then MsgBox "Le N°" & remA & " d'Archive existe déjà. Recommencez."
Else
DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If End If End Function
Espérant t'avoir aidé. Cordialement. Xavier.
PS: Enlever blurg de l'adresse mail.
peut ont remplacer dans la requette tou la zone [Bons de commande].[archive
N°] AS Expr2 pour eviter la resaisie du n° de l'archive.
"Xavier HUE" <xavier.hueblurg@systeme-u.fr> a écrit dans le message de news:
01e701c34c36$93f863a0$a001280a@phx.gbl...
Bonjour Yann,
Avant tout, quelques remarques:
1) Le SQL exécuté dans les trois cas est le même, tu
aurais donc avantage à regrouper tes tests pour n'exécuter
qu'une fois ce SQL. C'est plus facile à lire et à
maintenir.
2) Que cherches-tu à faire au juste? DLookup sans
critère retourne une valeur aléatoire, si le jeu
d'enregistrement du domaine consulté contient plusieurs
enregistrements. Si le but est de demander un N° d'archive
puis controler que ce N° n'existe pas, tu peux t'en sortir
comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même
chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA
est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement
la ligne "Option Explicit" dans tous tes modules. Cela
permet d'éviter beaucoup d'erreur de saisie de ce type.
Utiliser une variable non initialisée car mal déclarée te
mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une
solution ;-)
Function sauv2()
Dim srtquoi As String 'Prendre l'habitude de déclarer
toutes les variables en début de procédure ou fonction
'De la sorte, celles-ci ne se
trouvent pas "noyées" dans le code
'Dans cette fonction, srtquoi
est inutile. Tu peux donc supprimer cette déclaration
Dim remA As String
On Error Resume Next
'Demander un N° d'archive
remA = InputBox("N° de l'Archive")
If remA = "" Then
MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance
If DCount("[archive n°]", "ARCHIVE", "[archive n°]='"
& remA & "'") <> 0 Then
MsgBox "Le N°" & remA & " d'Archive existe déjà.
Recommencez."
Else
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite,
[archive n°], description )SELECT [Bons de commande].nart,
[Bons de commande].quantite, [Bons de commande].[archive
N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT
JOIN Feuil1 ON [Bons de commande].nart Feuil1.Champ4 ;", -1
DoCmd.SetWarnings True
End If
End If
End Function
peut ont remplacer dans la requette tou la zone [Bons de commande].[archive N°] AS Expr2 pour eviter la resaisie du n° de l'archive.
"Xavier HUE" a écrit dans le message de news: 01e701c34c36$93f863a0$ Bonjour Yann,
Avant tout, quelques remarques: 1) Le SQL exécuté dans les trois cas est le même, tu aurais donc avantage à regrouper tes tests pour n'exécuter qu'une fois ce SQL. C'est plus facile à lire et à maintenir.
2) Que cherches-tu à faire au juste? DLookup sans critère retourne une valeur aléatoire, si le jeu d'enregistrement du domaine consulté contient plusieurs enregistrements. Si le but est de demander un N° d'archive puis controler que ce N° n'existe pas, tu peux t'en sortir comme ci-après.
3) Tu déclares srtQuoi et utilises strQuoi. Pas la même chose ;-) donc ton Dim ne sert à rien.
4) Tu utilises remA mais ne la déclare pas. Donc remA est déclaré implicitement en Variant.
5) Je te conseille vivement d'inclure systématiquement la ligne "Option Explicit" dans tous tes modules. Cela permet d'éviter beaucoup d'erreur de saisie de ce type. Utiliser une variable non initialisée car mal déclarée te mène à coup sûr vers un disfonctionnement.
Si "Oui" est la réponse à ma question 2, alors, voici une solution ;-)
Function sauv2() Dim srtquoi As String 'Prendre l'habitude de déclarer toutes les variables en début de procédure ou fonction 'De la sorte, celles-ci ne se trouvent pas "noyées" dans le code 'Dans cette fonction, srtquoi est inutile. Tu peux donc supprimer cette déclaration Dim remA As String
On Error Resume Next
'Demander un N° d'archive remA = InputBox("N° de l'Archive")
If remA = "" Then MsgBox "Veuillez saisir un N° d'archive. Recommencez."
Else
'Vérifier existance If DCount("[archive n°]", "ARCHIVE", "[archive n°]='" & remA & "'") <> 0 Then MsgBox "Le N°" & remA & " d'Archive existe déjà. Recommencez."
Else
DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, [archive n°], description )SELECT [Bons de commande].nart, [Bons de commande].quantite, [Bons de commande].[archive N°] AS Expr2, Feuil1.Champ9 FROM [Bons de commande] LEFT JOIN Feuil1 ON [Bons de commande].nart Feuil1.Champ4 ;", -1 DoCmd.SetWarnings True End If End If End Function
Espérant t'avoir aidé. Cordialement. Xavier.
PS: Enlever blurg de l'adresse mail.
Xavier HUE
peut ont remplacer dans la requette tou la zone [Bons de commande].[archive
N°] AS Expr2 pour eviter la resaisie du n° de l'archive. Absolument.
Cela m'a échappé ;-)
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, '" & remA & "', description )SELECT [Bons de commande].nart, ...etc...
Si ca ne marche pas avec les simples quotes ' Essayer en mettant double guillemet à la place comme ceci:
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, """ & remA & """, description )SELECT [Bons de commande].nart, ...etc...
Cordialement.
peut ont remplacer dans la requette tou la zone [Bons de
commande].[archive
N°] AS Expr2 pour eviter la resaisie du n° de l'archive.
Absolument.
Cela m'a échappé ;-)
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, '"
& remA & "', description )SELECT [Bons de
commande].nart, ...etc...
Si ca ne marche pas avec les simples quotes '
Essayer en mettant double guillemet à la place comme ceci:
DoCmd.RunSQL "INSERT INTO ARCHIVE ( nart, quantite, """
& remA & """, description )SELECT [Bons de
commande].nart, ...etc...