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 :

Sélectionner des enregistrements d'une table et les copier dans Excel [AC-2010]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Apprenti ingénieur qualité
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Sélectionner des enregistrements d'une table et les copier dans Excel
    Bonjour à tous,

    Pour une mission de mon apprentissage chez un équipementier automobile, je dois créer une BDD Access.
    Il me reste un seul point qui me bloque pour terminer cette BDD.
    J'ai créer un formulaire où l'utilisateur choisi un type de produit et un produit dans des listes déroulantes. Ensuite j'ai créer un bouton sur lequel, lorsque l'on clique dessus, cela ouvre un fichier excel et je voudrais que cela copie les enregistrements contenant le produit choisi dans la liste à la suite les uns des autres dans le fichier Excel.

    Voici mon code pour le moment :

    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
    Private Sub Commande32_Click()
     
    Dim appexcel As Excel.Application
    Dim wbexcel As Excel.Workbook
    Dim i As Integer
    i = 7
    Set rstMecanismes = CurrentDb.OpenRecordset("CopieMecanismes")
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFile "P:\RetD PRODUITS\1 - ACQUISITIONS\05- Generics Products\13- Technical Datasheet\Fichier FTL - Copie.xls", "D:\"
     
    Set appexcel = CreateObject("Excel.Application")
    appexcel.Visible = True
    Set wbexcel = appexcel.Workbooks.Open("D:\Fichier FTL - Copie.xls")
     
    appexcel.Sheets("FTL").Select
     
    DoCmd.FindRecord Me.cmbProduit1, acEntire, False, , True, acAll
     
    If Me.CurrentRecord < Me.Recordset.RecordCount Then
     
    appexcel.Cells(i, 10) = rstMecanismes![Type de produit] & ":" & " " & rstMecanismes![Produit]
    appexcel.Cells(i, 11) = rstMecanismes![Criteria] & ":" & " " & rstMecanismes![Performances requises] & " " & rstMecanismes![Unit] & "  " & rstMecanismes![Comments]
    appexcel.Cells(i, 1) = rstMecanismes![Phase de vie FTL]
    appexcel.Cells(i, 2) = rstMecanismes![Fonction FTL]
    i = i + 1
    Me.Recordset.MoveNext
     
    End If
     
     
    End Sub

    Pour le moment, le fichier Excel s'ouvre, je n'ai pas de message d'erreur d'Access mais il me copie le premier enregistrement de ma table dans EXCEL alors que le produit renseigné dans la liste déroulante [cmbProduit1] n'est pas celui du premier enregistrement.

    Pouvez-vous m'aider SVP ? J'ai essayé beaucoup de choses mais je ne trouve pas la solution :/

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 772
    Points : 14 814
    Points
    14 814
    Par défaut
    Bonjour,
    Si c'est dans la table CopieMecanismes que tu va chercher les enregistrements, il faut filtrer avec ta sélection (type de produit) et ensuite parcourir les enregistrements de la table et pas ceux du formulaire.
    - sélection des enregistrements dans la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim appexcel As Excel.Application
    Dim wbexcel As Excel.Workbook
    Dim rstMecanismes as recordSet
    Dim fso as object
    Dim i As Integer
     
    Set rstMecanismes = CurrentDb.OpenRecordset("select * from CopieMecanismes where [Type de produit]=" & Me.cmbProduit1)
    - lecture des enregistrements sélectionnés:
    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
    ' Si on a des enregistrements on ouvre Excel et le fichier
    if not rstMecanismes.EOF Then
        i = 7
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CopyFile "P:\RetD PRODUITS\1 - ACQUISITIONS\05- Generics Products\13- Technical Datasheet\Fichier FTL - Copie.xls", "D:\"
        Set appexcel = CreateObject("Excel.Application")
        appexcel.Visible = True
        Set wbexcel = appexcel.Workbooks.Open("D:\Fichier FTL - Copie.xls")
     
        appexcel.Sheets("FTL").Select
    ' lecture des enregistrements sélectionnés
        With rstMecanismes
            Do Until .EOF
                appexcel.Cells(i, 10) = ![Type de produit] & ":" & " " & ![Produit]
                appexcel.Cells(i, 11) = ![Criteria] & ":" & " " & ![Performances requises] & " " & ![Unit] & "  " & ![Comments]
                appexcel.Cells(i, 1) = ![Phase de vie FTL]
                appexcel.Cells(i, 2) = ![Fonction FTL]
                i = i + 1
                .MoveNext 
            Loop
        End With
     
    End if

  3. #3
    Candidat au Club
    Homme Profil pro
    Apprenti ingénieur qualité
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur d’exécution '3061'
    Bonjour tee_grandbois

    Tout d'abord merci pour ton aide,
    J'ai essayé le code que tu m'as envoyé mais Access me renvoie une erreur "Erreur d’exécution '3061'" (Trop peu de paramètres. 1 attendu).
    Cette erreur intervient sur la ligne de code suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rstMecanismes = CurrentDb.OpenRecordset("SELECT * FROM CopieMecanismes WHERE Produit = Me.cmbProduit1")
    Petite precision : - cmbProduit1 correspond à la liste déroulante de choix du produit dans mon formulaire
    - Produit est mon champs de ma table CopieMecanismes

    Aurais-tu une solution ?

    Merci d'avance

  4. #4
    Candidat au Club
    Homme Profil pro
    Apprenti ingénieur qualité
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Re Bonjour,

    Juste pour vous signaler que j'ai résolu le problème, il fallait ajouter chr (34) avant et après mon Me.cmbProduit1 car la valeur qu'il renvoyait était entre guillemets.

    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
    Private Sub Commande32_Click()
     
     
    Dim appexcel As Excel.Application
    Dim wbexcel As Excel.Workbook
    Dim rstMecanismes As DAO.Recordset
    Dim oDb As DAO.Database
    Dim fso As Object
    Dim i As Integer
     
     
    Set oDb = CurrentDb
    Set rstMecanismes = oDb.OpenRecordset("SELECT * FROM CopieMecanismes WHERE [Produit]=" & Chr(34) & Me.cmbProduit1 & Chr(34))
     
    ' Si on a des enregistrements on ouvre Excel et le fichier
    If Not rstMecanismes.EOF Then
        i = 7
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CopyFile "P:\RetD PRODUITS\1 - ACQUISITIONS\05- Generics Products\13- Technical Datasheet\Fichier FTL - Copie.xls", "D:\"
        Set appexcel = CreateObject("Excel.Application")
        appexcel.Visible = True
        Set wbexcel = appexcel.Workbooks.Open("D:\Fichier FTL - Copie.xls")
     
        appexcel.Sheets("FTL").Select
    ' lecture des enregistrements sélectionnés
        With rstMecanismes
            Do Until .EOF
                appexcel.Cells(i, 10) = ![Type de produit] & ":" & " " & ![Produit]
                appexcel.Cells(i, 11) = ![Criteria] & ":" & " " & ![Performances requises] & " " & ![Unit] & "  " & ![Comments]
                appexcel.Cells(i, 1) = ![Phase de vie FTL]
                appexcel.Cells(i, 2) = ![Fonction FTL]
                i = i + 1
                .MoveNext
            Loop
        End With
     
    End If
     
     
    End Sub

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/07/2009, 12h15
  2. [MySQL] Modification des enregistrements d'une table à partir d'un formulaire
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 18/12/2006, 17h32
  3. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  4. Taille des enregistrements d'une table
    Par Stbaurl dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 11/07/2006, 09h19
  5. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51

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