Bonjour à tous,

Voilà, j'ai une fonction pour créer un certain nombre de nouveaux enregistrements, déclenchée par un bouton et passant trois variables (un champ identificateur, une variable début(ProchainArticle) et un champ NbreArticle.
Ca fonctionne sauf si la table cible de l'INSERT est vide car alors le recordset est vide et ne peut pas calculer le prochain champ clé en numauto.

J'ai essayé différents tests (qui d'habitude me donnent satifaction) avec BOF ou EOF sans résultat, c'est curieux: je n'ai pas le debug print "coucou" dans le cas de la table cible vide alors que j'execute bien l'incrémentation du numauto dans le cas ou il existe déjà au moins un enregistrement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Function CreationArticle(ByVal VersementID As Long, ByVal NbreArticle As Integer, ByVal ProchainArticle As Integer) As String
 Dim valMax As Long
 Dim Renvoircd As Integer
 Renvoircd = 0
Dim rcd As DAO.Recordset
     'on récupère la valeur max
Dim boucle As Integer
On Error GoTo Fin
DoCmd.SetWarnings (False)
For boucle = ProchainArticle To (ProchainArticle + NbreArticle)
     Set rcd = CurrentDb.OpenRecordset("SELECT MAX(ArticleAVerserID) FROM tblArticleAVerser")
     If rcd.EOF Then  'Pas de record
        valMax = 1
    Debug.Print "coucou"
    Else
        valMax = rcd.Fields(0) + 1
    End If
        Debug.Print "valMax4 "; valMax
        rcd.Close
        'on l'insère
     CurrentDb.Execute "INSERT INTO tblArticleAVerser (ArticleAVerserID, VersementIDParent, NumeroArticle)" & _
                        "VALUES (" & "" & valMax & "" & "," & "" & VersementID & "" & "," & "" & ProchainArticle & "" & ")"
     'Compteur
     ProchainArticle = ProchainArticle + 1
     Renvoircd = Renvoircd + 1
     CreationArticle = Renvoircd
Next boucle
DoCmd.SetWarnings (True)
Fin:
 MsgBox ("Ca s'est mal passé...")
CreationArticle = Renvoircd
Ce code fonctionne seulement si il existe au moins un enregistrement, que puis-je mettre au lieu de < valMax = 1> (car le pb n'est probablement dans le test mais dans l'action)?

D'autre part , bien que je ne vois pas d'erreur (que mon insert se passe bien ou pas) le msgbox de Fin: est toujours activé. Pourquoi?

Merci pour votre attention.