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 :

Recordset vide après premier export vers Word


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Recordset vide après premier export vers Word
    Bonjour,

    J’ai créé une commande de transmission des informations contenues dans mon formulaire Access vers Word, et cela fonctionne mais je rencontre quelques difficultés : cela ne fonctionne qu’une seule fois ensuite je dois ressortir du formulaire pour entrer à nouveau avant d'expoter sinon le prg s’arrête sur la saisie des données avec le message suivant « Erreur d’exécution 3021 : aucun enregistrement en cours ».

    Je dois préciser que le formulaire est fait à partir d’une table, et c'est le sous formulaire qui contient la requête "rs meeting". Mais je ne pense pas que le problème vienne de là.

    J’ai plutôt l’impression que le prg « edit » le recordset, va jusqu’à la fin avec le Do While not EOF, et pour le second ne réinitialise pas le recordset mais considère qu’il est déjà à la fin du recodset.

    J'ai essayé de rajouter les instructions suivantes :
    rs.Close
    Set rs=Nothing
    après le "Loop",
    et : sfmeeting.Form.Requery
    AVANT Set rs = sfmeeting.Form.Recordset



    Peut-être pouvez-vous m’éclairer ? Je joins à ce message le code dans le fichier Access:

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Private Sub agenda_Click()
     
        Dim strcode As String
        Dim rs As DAO.Recordset
        Dim wd As Word.Application
        Dim intNbLignes As Integer
        Dim cheminagendatemp As String
        Dim agendatemporaire As String
        Dim newagenda As String
        Dim dateric As Date
        Dim strmeeting As String
     
     
        dateric = Date
        strmeeting = Meeting.Value
     
        'instanciation de word
        Set wd = New Word.Application
     
        'ouverture document trame
        cheminagendatemp = chemin & "\08 - Templates\"
        agendatemporaire = "Agenda RIC TEMPLATE.doc"
     
        wd.Documents.Open FileName:=cheminagendatemp & agendatemporaire, ReadOnly:=True
     
        'inscription de la date dans le document word
        wd.ActiveDocument.Bookmarks("Date").Range.Text = dateric
     
        intNbLignes = 1
     
        'récupération des infos liste des projets
        'sous forme d'un recordset
     
     
     
        'sfmeeting.Form.Requery
     
        Set rs = sfmeeting.Form.Recordset
     
        'parcours du recordset de sfmeeting
     
     
         Do While Not rs.EOF
     
        'inscription du code dans le document word
            'nouvelle ligne
               wd.Documents(agendatemporaire).Tables(2).Rows.Add
     
            intNbLignes = intNbLignes + 1
     
            'Ecriture sur cette nouvelle Ligne
            wd.ActiveDocument.Tables(2).Cell(intNbLignes, 2).Range.Text = rs.Fields("Code Projet").Value
            wd.ActiveDocument.Tables(2).Cell(intNbLignes, 3).Range.Text = rs.Fields("Project").Value & " - " & rs.Fields("Credit in m€").Value & "M€ "
            wd.ActiveDocument.Tables(2).Cell(intNbLignes, 4).Range.Text = rs.Fields("Last gate").Value
     
            rs.MoveNext
     
        Loop
     
     
     
        'rs.Close
        Set rs = Nothing
     
     
         ' enregistrement du document word
        newagenda = "agenda" & Minute(Time) & Second(Time) & ".doc"
        wd.Documents(agendatemporaire).SaveAs FileName:=chemin & "\01 - RIC à partir de février 2007\" & newagenda
     
        '  fermeture du document word
        wd.Documents(newagenda).Close
     
        'wd.Documents(agendatemporaire).Activatewd.Documents.Open FileName:=cheminagendatemp & agendatemporaire _
        ', ReadOnly:=True
     
     
      'destruction de l'objet wd
       wd.Quit
       Set wd = Nothing
     
       'Forms("formulaire_meeting").CloseButton
     
     
     
    End Sub
    Merci d’avance pour votre aide

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Il faudrait faire un MoveFirst avant d'entrer dans la boucle.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = sfmeeting.Form.Recordset
    ne crée pas un nouveau recordset mais un nouveau pointeur sur l'objet (recordset) pointé par sfmeeting.Form.Recordset.
    Après l'exécution de cette ligne on a deux variables objets qui font référence au même objet recordset.
    Si sfmeeting.Form.Recordset est à la fin du jeu de données, alors rs aussi.

    Un petit détail :
    rs.MoveNext <=> sfmeeting.Form.Recordset.MoveNext et par conséquent on change d'enregistrement actif dans le formulaire (ou sous-formulaire)
    En utilisant RecordsetClone au lieu de Recordset, ça ne le fait pas.

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set rs = sfmeeting.Form.RecordsetClone
     
    If rs.RecordCount <> 0 Then
       rs.MoveFirst
    Else
       ' le recordset est vide
    End If

    En espèrant avoir vu juste
    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Super merci
    Oui cela fonctionne très bien avec le Movefirst!

    Je n'ai pas compris toutes les subtilités, notamment la différence entre Recordset et Recordsetclone : c'est vrai je vois que le curseur ne bouge pas, mais de toute façon avec Movefirst c'est transparent non?

    Par ailleurs je ne vais pas utiliser la condition car mon rs n'est jamais vraiment vide, il y a une ligne vide par défaut.

    Tes commentaires/remarques seront les bienvenus et merci encore pour le coup de pouce .

    SL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. export vers word + tables liées
    Par pyvdv dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/08/2007, 19h08
  2. Réponses: 6
    Dernier message: 05/09/2006, 11h42
  3. Image exportée vers Word depuis un report access
    Par thierry0409 dans le forum Access
    Réponses: 3
    Dernier message: 21/11/2005, 10h47
  4. exporter ver word a partir de access
    Par saad_info dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 11h53
  5. [CR XI] export vers word d'un crystal de type tableau
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/07/2005, 22h52

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