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] Parcourir les champs d'un RecordSet (mais pas commencer au premier champ)


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut [VBA] Parcourir les champs d'un RecordSet (mais pas commencer au premier champ)
    Bonjour,


    j'aimerais parcourir les champs d'un recordset en commençant au 4e champ, j'ai trouvé ce code pour parcourir les champs mais je ne vois pas comment commencer au 4e champ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim champ as DAO.Field
    For Each champ in Rs.Fields
    .....
    Next
    Je pensais à utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 4 to blahblah
    Rs.fields(i)
    next
    mais à la place de blahblah il me faudrait le nombre de champ avec qqch du genre : Rs.FieldCount

    Merci d'avance

  2. #2
    Membre habitué Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Points : 144
    Points
    144
    Par défaut
    Salut,

    tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Rs.Move(4)
     
    while not Rs.eof
      'traitement
      Rs.MoveNext
    wend
     
    Rs.Close

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    Ca ce n'est pas à utiliser quand on veut parcourir le recordset enregsitrement par enregistrement ? Parce que je crois que si et ce n'est pas ce qu'il me faut, je suis sur UN enregistrement et je parcours les champs (c'est comme parcourir horizontalement alors que ce que tu me proposes c'est pour le parcours vertical (je crois))

  4. #4
    Membre habitué Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Points : 144
    Points
    144
    Par défaut
    Ah ok décidement, j'ai un peu de mal ce matin...quel est le but de ton code ? A quoi ressemble ton recordset ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    lol faut pas faire la fête la veille

    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
    Private Sub CopyFluidData2Table()
     
    Dim i As Integer
    Dim SQL As String
    Dim DB As DAO.Database
    Set DB = CurrentDb
    Dim rs As DAO.Recordset
    Dim rsProp As DAO.Recordset
     
    SQL = "SELECT * FROM Fluids WHERE [Fluids].[IDFluid] = " & Me.IDFluid
     
    Set rs = DB.OpenRecordset(SQL, dbOpenDynaset)
     
    Set rsProp = CurrentDb.OpenRecordset("FluidProperties")
     
    Dim MonChamp As Field ' Soit je passe par le for each
    For Each MonChamp In Recordset.Fields
         .....
    Next
     
     
            for i = 3 to rs. 'nombre de champ ' soit je fais la boucle sur i
            With rsProp
                .AddNew
                rsProp!IDProperty = DLookup("[IDProperty]", "PropertiesList", "(Property = " & rs.Fields(i).Name & ")")
                rsProp!IDFluid = rs.Fields("IDFluid").Value
                rsProp!PropValue = rs.Fields("nom du champ à trouver").Value
                .Update
            Next 
     
     
    End Sub

  6. #6
    Membre habitué Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Points : 144
    Points
    144
    Par défaut
    En fait tu fais un recordset pour selectionner certaines lignes de ta table Fluids et tu veux ajouter certaines valeurs et updater c'est bien ça ? Si oui tu boucles sur les lignes de ton recordset comme dit precedemment et tu fais ton traitement.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    En fait je reprends le taf d'un gars mais la structure de la base est perfectible... là je veux pas recrééer de table alors je copie ce qu'il a fait dans une table pour le mettre ailleurs:

    Je crée un premier formulaire à partir de la table Fluids, il ne contient qu'un enregistrement (mais une vingtaine de champ) : c'est mon recordset source

    Ensuite je crée un 2e recordset (le destinataire) qui lui est la copie d'une table entière et auquel je vais ajouter plusieurs enregistrements (en gros je vais transformer l'enregistrement plein de champs du premier recordset en plusieurs enregistrements (autant que de champs moins les 3 premiers champs)

  8. #8
    Membre habitué Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Points : 144
    Points
    144
    Par défaut
    ok, tout ça me parait un peu confus mais bon, essaye avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i = 3 to rs.Fields.count

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    Aucune erreur mais aucun ajout dans la table :s

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    J'ai rajouté une condition If au cas où le champ soit vide:

    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
    Private Sub CopyFluidData2Table()
     
    Dim i As Integer
    Dim SQL As String
    Dim DB As DAO.Database
    Set DB = CurrentDb
    Dim rs As DAO.Recordset
    Dim rsProp As DAO.Recordset
     
    SQL = "SELECT * FROM Fluids WHERE [Fluids].[IDFluid] = " & Me.IDFluid
     
    Set rs = DB.OpenRecordset(SQL, dbOpenDynaset)
     
    Set rsProp = CurrentDb.OpenRecordset("FluidProperties")
     
    'Dim MonChamp As Field
    'For Each MonChamp In Recordset.Fields
     
    For i = 3 To rs.Fields.Count
    With rsProp
            If rs.Fields(i).Value Then GoTo Nxt
              .AddNew
              rsProp!IDProperty = DLookup("[IDProperty]", "PropertiesList", "(Property = " & rs.Fields(i).Name & ")")
              rsProp!IDFluid = rs.Fields("IDFluid").Value
              rsProp!PropValue = rs.Fields(i).Value
             .Update
    Nxt:
    Next
    Wend
     
    'Next
     
    End Sub

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/09/2009, 19h47
  2. [AC-2007] Réattacher les tables - ok avec .mdb mais pas avec .accdb
    Par curt dans le forum Runtime
    Réponses: 1
    Dernier message: 30/04/2009, 18h15
  3. Réponses: 8
    Dernier message: 23/01/2008, 23h59
  4. VBA: Parcourir les colonnes d'un fichier
    Par hochimi dans le forum Excel
    Réponses: 3
    Dernier message: 02/07/2007, 18h35
  5. [XSL][XPATH] recopier les attributs d un élément mais pas le
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/08/2005, 17h07

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