merci Xysyo pour ton programme.
Oui, effectivement, en bas, je testais si le jeu d'enregistrement était vide avec la fonction EOF (permet de savoir si on est en bas du recordset). En réalité une de mes boucles précédentes m'envoyait en bas du recordset et j'ai oublié de remettre mon curseur en haut.
Je l'ai un peu simplifié grace a la commande "On error Resume Next", ce qui veut dire "dés que tu as une erreur tu passes a la suite."
Le code va rencontrer une erreur lors de l'écriture des codes postaux lorsque le recordset est vide.
Je le trouve un peu tordu ce code, mais il marche. Le code de Xysyo est propre (mais je ne l'ai pas testé).
Voicil la version finale, j'espere !
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
46
47
48
49
50
51
52
53 Sub cp() 'declaration des variables Dim db As DAO.Database Dim recpatient As DAO.Recordset Dim rec As DAO.Recordset Dim strsql As String Dim cp_collec As New Collection Dim same_cp As Boolean Dim i As Integer On Error Resume Next Set db = CurrentDb Set recpatient = db.OpenRecordset("Patient") 'ouvre la table patient While Not recpatient.EOF 'parcourt la table patient 'requete SQL de selection des enregistrements en fonction du numero de patient strsql = "Select T.* FROM T " & _ "WHERE T.idpatient=cint('" & recpatient.Fields("idpatient") & "')" 'ouverture du recordset Set rec = db.OpenRecordset(strsql) 'on parcourt chacun des enregistrements dans la requete While Not rec.EOF 'si le champ "Code Postal" est différent de '999' et différent de 'Null' If rec.Fields("Code Postal") <> 999 And Not IsNull(rec.Fields("Code Postal")) Then 'alors on l'ajoute a la collection cp_collec cp_collec.Add (rec.Fields("Code Postal")) End If rec.MoveNext Wend 'test s'il y a des valeurs différentes dans la collection same_cp = False 'par défaut, pas de valeur différentes 'on balaye la collection et on compare chacune des valeurs avec la 1ere For i = 1 To cp_collec.Count If cp_collec(i) <> cp_collec(1) Then same_cp = True Next i 'si on a trouvé qu'un seul code postal pour un client (un seul objet dans la collection), 'on écrit ce code postal dans tous les enregistrements de la requete. If same_cp = False Then rec.MoveFirst While Not rec.EOF rec.Edit rec.Fields("Code Postal") = cp_collec(1) rec.Update rec.MoveNext Wend End If 'on efface la collection pour le patient suivant Set cp_collec = Nothing rec.Close recpatient.MoveNext Wend End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager