Bonjour,

Je fini par poster car j'ai fait vraiment beaucoup d'essais (j'ai même essayé de réfléchir) mais je n'y arrive pas.

Je cherche le premier numéro disponible pour faire un versement d'archive dans un cadre de classement type Archives départementales.

Dans un formulaire de "Versement" je saisi un code Série "Serie" et un code Sous-Série "NumeroVOSS".

La fonction ProchainVersement est lancéee
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 '__ Donne le prochain numéro de série à utiliser
 
    Me.txtProchainVersement.Value = ProchainVersement(Me.Serie, Me.NumeroVOSS)

et me ramène le numéro
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Public Function ProchainVersement(ByVal Serie As String, ByVal NumeroVOSS As Long)
 
Dim sqltextPV As String
Dim ProchainContinuW As String
Dim ProchainContinuL As String
Dim rstPV As DAO.Recordset
 
 
Debug.Print "PV "; sqltextPV
 
 Select Case Serie
        Case "W"
        ' cas d'un classement en série continue, le numéro est à gauche
sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
rstPV.MoveLast 'se place sur le dernier record trié
RenvoiDescriptionPV = rstPV!ItemID
Debug.Print "ItemID = "; RenvoiDescriptionPV
rstPV.Close
ProchainContinu = Left(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) - 1) + 1
        Case "L"
       ' cas d 'un classement en série thématique, le numéro est à droite
            Select Case NumeroVOSS
            Case "1"
                '__ On selectionne les numéros d'articles commençant par 1L
 
sqltextPV = "SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, '" & Serie & "', vbTextCompare)) + 1) = " & NumeroVOSS & " AND ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
 
Debug.Print sqltextPV
Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
rstPV.MoveLast 'se place sur le dernier record trié
RenvoiDescriptionPV = rstPV!ItemID
Debug.Print "ItemID = "; RenvoiDescriptionPV
rstPV.Close
ProchainContinu = Right(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) + 1) + 1
            Case Else
            End Select
        Case Else
rstPV.Close 'ne pas oublier de refermer le recordset apres
End Select
 
'Debug.Print "W"; ProchainContinu
Debug.Print "Prochain "; ProchainContinu
ProchainVersement = ProchainContinu
End Function
Dans le cas W ca fonctionne
Dans le cas 1L j'ai l'erreur "Trop peu de param, 1 attendu"
Le debug print donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, 'L', vbTextCompare)) + 1) = 1 AND ItemID LIKE '*L*' ORDER BY ItemID;
Parmi ceux qui veillent, il y en aurait-il un pour me décoincer?
Merci et bon WE