IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[vba]deplacer une donnée d un champ en fonction de la valeur d autres champs


Sujet :

VBA Access

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    merci Xysyo pour ton programme.

  2. #22
    Membre confirmé Avatar de timoth
    Homme Profil pro
    Responsable Outils Digitaux
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable Outils Digitaux

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 474
    Points
    474
    Par défaut
    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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/07/2010, 16h02
  2. Réponses: 6
    Dernier message: 15/05/2009, 18h00
  3. Réponses: 3
    Dernier message: 26/11/2007, 06h06
  4. Réponses: 1
    Dernier message: 20/04/2007, 15h35
  5. Réponses: 1
    Dernier message: 22/03/2006, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo