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

IHM Discussion :

Exporter sur Excel un sous-formulaire


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut Exporter sur Excel un sous-formulaire
    Bonjour,

    Je souhaiterais intégrer à mon code VBA, l'export sur Excel 2016 de mon sous-formulaire qui s'ouvre après avoir sélectionné des critères dans plusieurs listes de choix.
    Mais il ne reconnait pas mon sous-formulaire...
    Pourriez-vous m'aider ?

    Une partie de mon code avec l'export Excel à la fin qui m'indique une erreur.


    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
    ' Affecter la sélection au recordsource du sous-formulaire
    Me.frm_Liste_Selection.Form.RecordSource = strSql
     
    ' Afficher le sous-formulaire s'il y a des données
    If Me.frm_Liste_Selection.Form.Recordset.RecordCount > 0 Then
        Me.frm_Liste_Selection.Visible = True
        Me.ÉtiqSF.Caption = "Résultat de la sélection"
        Me.ÉtiqSF.Visible = True
    Else        ' Cacher le sous-formulaire si pas de données
        Me.frm_Liste_Selection.Visible = False
        Me.ÉtiqSF.Caption = "Aucun résultat trouvé"
        Me.ÉtiqSF.Visible = True
    End If
     
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "frm_Liste_Selection", _
                        "\\Mon chemin d'accès\NomFichierRéception.xlsx", True, "Feuil1"

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce n'est pas possible, tu ne peux exporter qu'une table ou une requête.

    Il faut utiliser la requête source de ton formulaire, et si celui-ci est filtré tu l'exportes avec sa ou ces clauses Where, il faut donc créer un code SQL.

    Philippe

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Merci pour ta réponse mais mon instruction SQL (Ma requête) est déjà intégrée à mon code VBA.
    Comment lui dire d'exporter cette requête ?

    Mon code :
    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
     
    ' Fabrication de l'instruction SQL
    strSql = "SELECT CODE,[DATE],CANAL,SILLON,MOTIF,VERBE" & _
    " FROM [Gestion_Stats]" & _
    " WHERE [DATE] Between #" & Format(Me.[DateDebut], "mm/dd/yyyy") & "# And #" & Format(Me.[DateFin], "mm/dd/yyyy") & "#" & _
    " AND MOTIF" & strChoixMotif & _
    " AND SILLON" & strChoixSillon & _
    " AND CANAL" & strChoixCanal & ";"
     
    ' Affecter la sélection au recordsource du sous-formulaire
    Me.frm_Liste_Selection.Form.RecordSource = strSql
     
    ' Afficher le sous-formulaire s'il y a des données
    If Me.frm_Liste_Selection.Form.Recordset.RecordCount > 0 Then
        Me.frm_Liste_Selection.Visible = True
        Me.ÉtiqSF.Caption = "Résultat de la sélection"
        Me.ÉtiqSF.Visible = True
    Else        ' Cacher le sous-formulaire si pas de données
        Me.frm_Liste_Selection.Visible = False
        Me.ÉtiqSF.Caption = "Aucun résultat trouvé"
        Me.ÉtiqSF.Visible = True
    End If
     
    'DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "frm_Liste_Selection", _
                        '"\\Mon chemin d'accès\NomFichierRéception.xlsx", True, "Feuil1"

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Possible d'avoir une capture d'écran de votre form ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    fait une recherche dans le forum avec le mot-clé CopyFromRecordSet, tu devrais trouver des exemples de code
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Bonjour tee_grandbois,

    Toujours là quand j'ai besoin.. Je n'oublie pas hyperion13..

    Je vous transmet le code complet qui va rappeler des souvenirs à tee_Grandbois..
    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
     
    Private Sub BTN_LISTING2018_Click()
     
    Dim strChoixMotif As String
    Dim strChoixSillon As String
    Dim strChoixCanal As String
    Dim varItm As Variant
    Dim strSql As String
     
    ' Contrôle de saisie : MOTIF
    If IsNull(Me.ChoixMotif) Then
        MsgBox "Veuillez sélectionner un motif", vbCritical + vbOKOnly
        Me.ChoixMotif.SetFocus
        Exit Sub
    End If
     
    ' Contrôle de saisie : Date début
    If IsNull(Me.DateDebut) Then
        MsgBox "Veuillez saisir une date de début", vbCritical + vbOKOnly
        Me.DateDebut.SetFocus
        Exit Sub
    End If
     
    ' Contrôle de saisie : Date fin
    If IsNull(Me.DateFin) Then
        MsgBox "Veuillez saisir une date de fin", vbCritical + vbOKOnly
        Me.DateFin.SetFocus
        Exit Sub
    End If
     
    strChoixMotif = """" & Me.[ChoixMotif] & """"
     
    ' Construction de la liste "IN" à partir d'une zone de liste
    If Me.ChoixSillon.ItemsSelected.Count > 0 Then
        With Me.[ChoixSillon]
            For Each varItm In .ItemsSelected
                strChoixSillon = strChoixSillon & IIf(strChoixSillon = "", """", ",""") & (.ItemData(varItm)) & """"
            Next varItm
            strChoixSillon = " In(" & strChoixSillon & ")"
        End With
    Else        ' Prendre tous si aucun choix
        strChoixSillon = " Like ""*"""
    End If
     
    If Me.ChoixCanal.ItemsSelected.Count <> 0 Then
        With Me.[ChoixCanal]
            For Each varItm In .ItemsSelected
                strChoixCanal = strChoixCanal & IIf(strChoixCanal = "", """", ",""") & (.ItemData(varItm)) & """"
            Next varItm
            strChoixCanal = " In(" & strChoixCanal & ")"
        End With
    Else        ' Prendre tous si aucun choix
        strChoixCanal = " Like ""*"""
    End If
     
    ' Fabrication de l'instruction SQL
    strSql = "SELECT CODE,[DATE],CANAL,SILLON,MOTIF,MOTIF_LONG,VERBE" & _
    " FROM [Gestion_2018]" & _
    " WHERE [DATE] Between #" & Format(Me.[DateDebut], "mm/dd/yyyy") & "# And #" & Format(Me.[DateFin], "mm/dd/yyyy") & "#" & _
    " AND MOTIF Like " & strChoixMotif & _
    " AND SILLON" & strChoixSillon & _
    " AND CANAL" & strChoixCanal & ";"
     
    ' Affecter la sélection au recordsource du sous-formulaire
    Me.frm_Liste_Selection.Form.RecordSource = strSql
     
    ' Afficher le sous-formulaire s'il y a des données
    If Me.frm_Liste_Selection.Form.Recordset.RecordCount > 0 Then
        Me.frm_Liste_Selection.Visible = True
        Me.ÉtiqSF.Caption = "Résultat de la sélection"
        Me.ÉtiqSF.Visible = True
    Else        ' Cacher le sous-formulaire si pas de données
        Me.frm_Liste_Selection.Visible = False
        Me.ÉtiqSF.Caption = "Aucun résultat trouvé"
        Me.ÉtiqSF.Visible = True
    End If
     
    End Sub
     
    Private Sub Form_Load()
    'cacher le sous-formulaire à l'ouverture
    Me.frm_Liste_Selection.Visible = False
    Me.ÉtiqSF.Visible = False
    End Sub

    Je souhaite exporter le sous-formulaire sur Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.frm_Liste_Selection.Form.RecordSource = strSql
    Mais je n'arrive pas à intégrer l'export dans le code complet ?
    Merci pour votre aide.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Re_Moi..

    J'ai cherché et j'ai trouvé un code mais il me met un message d'erreur donc je ne pense pas être sur la bonne voie??
    Message
    Citation Envoyé par Access
    Erreur de compilation: Type défini par l'utilisateur non défini
    , il bloque sur : Dim xlApp As Excel.Application
    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
    Private Sub ExportListing_Click()
     
     Dim xlApp As Excel.Application, xlSheet As Excel.Worksheet, xlBook As Excel.Workbook
        Dim i As Integer, vtemp As Variant
        Dim mbd As Database, DExport As Recordset
        ' Initialiser les variables
        Set xlApp = New Excel.Application
        Set xlBook = xlApp.Workbooks.Open("MonCheminD'accès\MonClasseurDestination.xlsx")
        Set mbd = CurrentDb()
     
        Set DExport = mbd.OpenRecordset(strSQL)
     
        Set xlSheet = xlBook.Worksheets("SourceExport")
     
        i = 5
        Do Until DExport .EOF
     
     
                xlSheet.Cells(i, 1) = DExport("A1")
     
                i = i + 1
            'End If
            DExport .MoveNext
        Loop
     
       ' Enregistre dans un nouveau doveau document qui peut etre variable
        xlBook.SaveAs "nouveau.xlsx"
     
        Set mbd = Nothing
     
        xlApp.Quit
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
    End Sub

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Il faut ajouter la référence Microsoft Excel xx.x Object Library (xx.x dépend de la version Office) ou mieux: déclarer l'objet application comme le code ci-dessous, ne nécessitant pas d'ajouter de références :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Je ne comprends pas, il ne trouve pas la requête...
    J'ai trouvé autre chose en écrivant une fonction et après faire appel à la requête mais c'est pareil.
    Je ne comprends pas tout et ne sait pas comment faire ??
    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
    Function ExportReqVersExel(ByVal strSQL As String, ByVal FichierExcel As String, ByVal NomFeuil As String, ByVal CelulleCible As String) As Boolean
     
     
        Dim xlApp As Object
        Dim xlWkb As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        Dim rst As DAO.Recordset
        Dim RetVal As Boolean
     
        On Error GoTo Gest_Err
     
        'Ouverture de la requête
        Set rst = CurrentDb.OpenRecordset(strSQL)
        If rst.EOF Then GoTo Sortie
     
        'Ouverture du classeur (en mode invisible)
        Set xlApp = CreateObject("Excel.application")
        Set xlWkb = xlApp.Workbooks.Open("Résultats.xlsx")
        Set xlSheet = xlWkb.Sheets("Synthèse")
     
        '    'Recopie les entetes le cas écheant
        '    xlSheet.Range(CelulleCible).select
        '    For i = 0 To rst.Fields.Count - 1
        '        xlApp.ActiveCell.Value = rst(i).Name
        '        xlApp.ActiveCell.Offset(0, 1).select
        '    Next
     
        'Transfert & mise en forme des données
        xlSheet.Range(CelulleCible).CopyFromRecordset rst
     
        'Si je souhaite adapter la largeur des colonne aux données fraichement copiées
        'xlApp.Cells.EntireColumn.AutoFit
     
     
        'sauvegarde la modification
        xlWkb.Save
     
        'Rend le classeur visible
        xlApp.Visible = True
     
        RetVal = True
     
     
    Sortie:
        ExportReqVersExel = RetVal
     
        On Error Resume Next
        rst.Close: Set rst = Nothing
        Set xlWkb = Nothing
        Set xlApp = Nothing
        Exit Function
     
    Gest_Err:
        RetVal = False
        MsgBox Err.Number & " - " & Err.Description, vbCritical, "Erreur export"
        Resume Sortie
     
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ExportListing_Click()
     Call ExportReqVersExel("strSQL", "\\MonChemin\Résultats.xlsx", "Synthèse", "B3")
     
    End Sub

  10. #10
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut,
    Il ne manquerait pas tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strSQL as String
    et
    strSQL = "SELECT ... FROM .... WHERE ..."
    entre L10 et L13 ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Bonjour hyperion,

    J'ai indiqué dans la fonction la requête mais il m'indique un message d'erreur :
    Citation Envoyé par Access
    Erreur 3075 - Erreur de syntaxe (opérateur absent) dans l'expression...
    et j'ai commenté ci-dessous car il m'indique aussi une erreur?? je désespère..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Dim xlWkb As Excel.Workbook
       'Dim xlSheet As Excel.Worksheet
    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
    Function ExportReqVersExel()
     
     
        Dim xlApp As Object
        'Dim xlWkb As Excel.Workbook
        'Dim xlSheet As Excel.Worksheet
        Dim rst As DAO.Recordset
        Dim RetVal As Boolean
        Dim strSQL As String
     
        On Error GoTo Gest_Err
     
     
        strSQL = "SELECT CODE,[DATE],CANAL,SILLON,MOTIF,MOTIF_LONG,VERBE" & _
    " FROM [Gestion_2018]" & _
    " WHERE [DATE] Between #" & Format(Me.[DateDebut], "mm/dd/yyyy") & "# And #" & Format(Me.[DateFin], "mm/dd/yyyy") & "#" & _
    " AND MOTIF Like " & strChoixMotif & _
    " AND SILLON" & strChoixSillon & _
    " AND CANAL" & strChoixCanal & ";"
     
     
        'Ouverture de la requête
        Set rst = CurrentDb.OpenRecordset(strSQL)
        If rst.EOF Then GoTo Sortie
     
        'Ouverture du classeur (en mode invisible)
        Set xlApp = CreateObject("Excel.application")
        Set xlWkb = xlApp.Workbooks.Open("Résultats.xlsx")
        Set xlSheet = xlWkb.Sheets("Synthèse")
     
        '    'Recopie les entetes le cas écheant
        '    xlSheet.Range(CelulleCible).select
        '    For i = 0 To rst.Fields.Count - 1
        '        xlApp.ActiveCell.Value = rst(i).Name
        '        xlApp.ActiveCell.Offset(0, 1).select
        '    Next
     
        'Transfert & mise en forme des données
        xlSheet.Range(CelulleCible).CopyFromRecordset rst
     
        'Si je souhaite adapter la largeur des colonne aux données fraichement copiées
        'xlApp.Cells.EntireColumn.AutoFit
     
     
        'sauvegarde la modification
        xlWkb.Save
     
        'Rend le classeur visible
        xlApp.Visible = True
     
        RetVal = True
     
     
    Sortie:
        ExportReqVersExel = RetVal
     
        On Error Resume Next
        rst.Close: Set rst = Nothing
        Set xlWkb = Nothing
        Set xlApp = Nothing
        Exit Function
     
    Gest_Err:
        RetVal = False
        MsgBox Err.Number & " - " & Err.Description, vbCritical, "Erreur export"
        Resume Sortie
     
     
    End Function

  12. #12
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    On en perd son latin.
    Il serait bien plus simple et plus sage :
    - d'alimenter votre sform avec votre Sql + critères
    - de récupérer les résultats obtenus dans le sform avec la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![NomFormPrincipal]![NomSousForm].Form.RecordsetClone
    Vous auriez une procédure du style
    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
    Private Sub BTN_LISTING2018_Click()
     
    Dim xlApp As Object
    Dim xlWkb As Excel.Workbook
    Dim mySheet As Excel.Worksheet
    Dim rst As DAO.Recordset
    Dim rstCount As Integer
    Dim myFolder As String
    Dim myFileName As Straing
    Dim myFilePath As String
     
    myFolder = "C:\MonCheminEmplacement"
    myFileName = "Résultats.xlsx"
    myFilePath = myFolder & "\" & myFileName
    mySheet = "Synthèse"
     
    Set xlApp = CreateObject("Excel.Application")
    Set xlWkb = xlApp.Workbooks.Open(myFilePath)
    Set rst = Forms![NomFormPrincipal]![NomSousForm].Form.RecordsetClone
     
    With xlWkb
    xlApp.ScreenUpdating = False
    ' Ajout des en-têtes dans le classeur
    For rstCount = 0 To rst.Fields.Count - 1
    xlApp.Cells(1, rstCount + 1).Value = rst.Fields(rstCount).Name
    Next rstCount
     
    xlApp.sheets(mySheet).Select
    xlApp.sheets(mySheet).Range("A2").CopyFromRecordset rst
    xlWkb.Save
    xlApp.ScreenUpdating = True
    End With
     
    rst.Close
    Set xlApp = Nothing
    Set rst = Nothing
    End Sub
    Fin du ban
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour hyperion13 et ANANA(s)49 ,
    je me permet de re-poster le code d'hyperion13 après quelques corrections.
    En effet, si on veut s'affranchir des références, il faut déclarer et créer certaines variables différemment (xlApp, xlWkb et mySheet). De plus, il ne faut pas oublier de quitter Excel, avec xlApp.Quit plutôt que Set xlApp = Nothing sinon l'instance restera dans les processus actifs jusqu'à la prochaine fermeture de la machine.
    Autre chose: Straing c'est pas un String
    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
     
    Private Sub BTN_LISTING2018_Click()
     
    Dim xlApp As Object
    Dim xlWkb As Object
    Dim mySheet As String
    Dim rst As DAO.Recordset
    Dim rstCount As Integer
    Dim myFolder As String
    Dim myFileName As String
     
    myFolder = "C:\MonCheminEmplacement"
    myFileName = "Résultats.xlsx"
    myFilePath = myFolder & "\" & myFileName
    mySheet = "Synthèse"
     
    Set xlApp = CreateObject("Excel.Application")
    Set xlWkb = xlApp.Workbooks.Open(myFilePath)
    Set rst = Forms![NomFormPrincipal]![NomSousForm].Form.RecordsetClone
     
    With xlWkb
        xlApp.ScreenUpdating = False
    ' Ajout des en-têtes dans le classeur
        For rstCount = 0 To rst.Fields.Count - 1
            xlApp.Cells(1, rstCount + 1).Value = rst.Fields(rstCount).Name
        Next rstCount
     
        xlApp.sheets(mySheet).Select
        xlApp.sheets(mySheet).Range("A2").CopyFromRecordset rst
        xlWkb.Save
        xlApp.ScreenUpdating = True
    End With
     
    rst.Close
    xlApp.Quit
    Set rst = Nothing
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Merci hyperion et tee_grandbois,

    Ton code fonctionne! Mais le fichier 'Résultats.xlsx' ne s'ouvre pas quand j'exporte les données?


    Par contre, il me met un message d'erreur quand je souhaite exporter une nouvelle fois mon sous formulaire :
    Citation Envoyé par Access
    Impossible d'accéder au document en lecture seule 'Résultats.xlsx'
    .

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Ton code fonctionne! Mais le fichier 'Résultats.xlsx' ne s'ouvre pas quand j'exporte les données?
    il s'ouvre, mais il est caché, si tu veux le voir, ajoute l'instruction xlApp.Visible = True après xlWkb.Save
    Par contre, il me met un message d'erreur quand je souhaite exporter une nouvelle fois mon sous formulaire : Impossible d'accéder au document en lecture seule 'Résultats.xlsx'.
    c'est bizarre,je viens de tester plusieurs exports de suite et je n'ai pas ce message, on dirait que le classeur reste ouvert et donc est verrouillé pour une nouvelle mise à jour.
    Avec le Gestionnaire des tâches vérifie que ton instance Excel est bien fermé après l'export mais avec l'instruction xlApp.Quit il ne devrait pas rester ouvert.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  16. #16
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    Bonjour tee_grandbois,

    J'ai un message d'erreur indiquant :[QUOTE=AccessErreur d'exécution '438' Propriété ou méthode non gérée par cet objet[/QUOTE]

    Je suis sur Excel 2016, cette erreur peut elle provenir de la version d'Excel ?

    En fin de compte, j'ai juste besoin qu'il m'ouvre un nouveau classeur Excel à chaque Export de mes données, qu'il soit visible et que l'intervenant est le choix d'enregistrer son export ou pas.
    Peut tu me débloquer ce code ? MERCI ENCORE..

    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
    Private Sub ExportListing_Click()
     
    Dim xlApp As Object
    Dim xlWkb As Object
    Dim mySheet As String
    Dim rst As DAO.Recordset
    Dim rstCount As Integer
    Dim myFolder As String
    Dim myFileName As String
     
     
    myFolder = "MonChemin"
    myFileName = "Résultats.xlsx"
    myFilePath = myFolder & "\" & myFileName
    mySheet = "SourceExport"
     
    Set xlApp = CreateObject("Excel.Application")
    Set xlWkb = xlApp.Workbooks.Open(myFilePath)
    Set rst = Forms![ACCUEIL]![frm_Liste_Selection].Form.RecordsetClone
     
    With xlWkb
    xlApp.ScreenUpdating = False
    ' Ajout des en-têtes dans le classeur
    For rstCount = 0 To rst.Fields.Count - 1
    xlApp.Cells(1, rstCount + 1).Value = rst.Fields(rstCount).Name
    Next rstCount
     
    xlApp.sheets(mySheet).Select
    xlApp.sheets(mySheet).Range("A2").CopyFromRecordset rst
    xlWkb.Save
    xlWkb.Visible = True
    xlApp.ScreenUpdating = True
    End With
     
    rst.Close
    xlApp.Quit
     
    Set rst = Nothing
    End Sub

  17. #17
    Nouveau membre du Club
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Points : 36
    Points
    36
    Par défaut
    J'ai essayé sur un autre poste, en fin de compte il bloque le fichier en lecteur seule. Impossible de le fermer et le gestionnaire des taches n'indique pas que le fichier est ouvert ?

    Enigmatique !!

    Concernant mon poste, il m'ouvre Excel 2010 et bloque..

    Si une âme charitable, pourrais juste me trouver le code qui me permettrais d'exporter ma requête et d'ouvrir un nouveau classeur (Version 2016).. L'utilisateur pourrais choisir s'il l'enregistre ou pas. Pas besoin de classeur/Feuille/Chemin d'accès de réception.

    Merci tee_grandbois et hyperion..

  18. #18
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Merci, pas de correcteur auto sur bloc-notes
    Citation Envoyé par tee_grandbois Voir le message
    bonjour hyperion13 et ANANA(s)49 ,
    je me permet de re-poster le code d'hyperion13 après quelques corrections.
    En l'état, cela fonctionne parfaitement sur Acc2010/2013.

    Maintenant vous voulez exporter vers un nouveau classeur. Dans ce cas supprimez :
    - L8 à L15
    - L18 mais le remplacer par Set xlWkb = xlApp.Workbooks.Add,
    - L28
    - L29 mais le remplacer par xlApp.Range("A2").CopyFromRecordset rst,
    - L30
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  19. #19
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    J'ai un message d'erreur indiquant :" Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet"
    sur quelle ligne apparait cette erreur?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    Citation Envoyé par hyperion13
    En l'état, cela fonctionne parfaitement sur Acc2010/2013.
    oui, seulement si on a ajouté la référence Microsoft Excel xx.x Object Library, xx.x correspondant à la version office utilisée.
    Je me suis référé au message d'erreur d'ANANA49:
    Citation Envoyé par ANANA49
    'ai cherché et j'ai trouvé un code mais il me met un message d'erreur donc je ne pense pas être sur la bonne voie??
    Message "Erreur de compilation: Type défini par l'utilisateur non défini", il bloque sur : Dim xlApp As Excel.Application
    Ce message apparait lorsque la référence n'est pas ajoutée.
    C'est l'avantage du late binding qui permet la portabilité du code d'une version à une autre puisque qu'on a pas la référence de la version à mettre à jour.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] VBA export sur Excel d'un champ de formulaire
    Par madock dans le forum VBA Access
    Réponses: 9
    Dernier message: 22/09/2016, 10h24
  2. exporter une table sur excel avec un formulaire
    Par timal78 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/07/2007, 14h07
  3. Réponses: 7
    Dernier message: 24/07/2006, 15h11
  4. [débutant] Pbl sur Etat avec sous formulaire
    Par william_58 dans le forum Access
    Réponses: 5
    Dernier message: 18/07/2006, 22h41
  5. Réponses: 5
    Dernier message: 25/04/2006, 16h04

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