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 :

Ouverture fichier Excel dans objet spreadsheet dans formulaire Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut Ouverture fichier Excel dans objet spreadsheet dans formulaire Access
    Bonjour à tous,

    Après avoir passé un petit peu de temps sur les forums et FAQs, je n'ai pas trouvé de réponse à ce problème.

    J'ai un objet activeX de type spreadsheet dans mon formulaire Access.
    Je souhaite ouvrir un fichier Excel existant dans cet objet. Est-ce possible ?

    Ayant pas mal fouillé et n'ayant rien trouvé, je pense que non, mais pourriez-vous, s'il vous plait, me le confirmer, ou me l'infirmer ?

    Merci d'avance.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 968
    Par défaut
    Bonsoir,
    il existe un tutoriel pour manipuler cet ActiveX ici. Il faut juste remplacer la source de données qui est une table par l'ouverture du classeur Excel existant, tu dois aussi avoir pleins d'exemples dans le forum pour ouvrir et lire un classeur. Je remplacerai aussi l'instruction wks.Cells.delete par wks.Cells.ClearContents

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut
    Merci pour ta réponse.

    J'ai déjà lu ce tutoriel, j'ai recherché dans ce forum, et je n'ai pas trouvé de sujet traitant mon point.

    J'ai vu ces options de sources de données : il y a 4 onglets.
    En fonction du Fournisseur (1er onglet correspondant au type de fichier source) se met à jour l'onglet connexion ou l'on choisit effectivement le fichier, nom de serveur...

    Problème : dans les Fournisseurs je n'ai pas Microsoft Excel
    Voici la liste disponible :
    - Microsoft Jet 4.0 OLE DB Provider
    - Microsoft Office 12.0 Access Database Engine OLE DB Provider
    - Microsoft OLE DB Provider for Data Mining Services
    - Microsoft OLE DB Provider for Indexing Services
    - Microsoft OLE DB Provider for Internet Publishing
    - Microsoft OLE DB Provider for ODBC Drivers
    - Microsoft OLE DB Provider for OLAP Services 8.0
    - Microsoft OLE DB Provider for Oracle
    - Microsoft OLE DB Provider for SQL Server
    - Microsoft OLE DB Simple Provider
    - Microsoft Project 10.0 OLE DB Provider
    - MSDataShape
    - OLE DB Provider for Microsoft Directory Services
    - Oracle Provider for OLE DB

    Est-ce qu'à partir d'un des ces "fournisseurs" je peux choisir un fichier Excel ?

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 968
    Par défaut
    Bonsoir,
    je ne crois pas que tu as besoin de passer par un fournisseur, utile pour une liaison par ODBC, mais pas dans ton cas.
    Si tu ajoutes dans ton formulaire un objet Microsoft Office Spreadsheet 11.0 (ou 10.0), la référence Microsoft Office Web Component 11.0 (ou 10.0) s'inscrira automatiquement (c'est le cas avec Access 2003).

    Ensuite, tu peux t'inspirer du code du tutoriel. La différence c'est que tu ne dois pas alimenter ton tableau à partir d'un Recordset, mais d'un classeur existant.
    Pour ce faire, tu dois ajouter dans tes références (fenêtre code VBA, menu Outils / Références) Microsoft Office Excel 12.0 Library (selon ta version).
    Pour t'aider, voici un bout code qui te permettra d'alimenter l'objet SpreadSheet de ton formulaire. Je l'ai appelé SpreadMFC comme dans le tutoriel.

    pour l'initialisation de l'objet :
    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
    Public Sub PrepaMFC()
        ' ======================================================================================
        ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
        ' Description   : Cette routine va permettre de préparer la feuille pour qu'elle
        '                 ressemble à une grille d'un sous-formulaire en mode feuille de données
        '=======================================================================================
        ' REMARQUE :
        'l'inscription de MicroSoft Office Web Component 11.0 dans les références VBA est
        ' automatique dès lors qu'on insère un ActiveX Microsoft Office SpreadSheet 11.0
     
        ' ===== déclaration =====
        Dim wks As OWC11.Spreadsheet
        ' ===== affectation =====
        Set wks = Me.SpreadMFC.Object
     
        ' ===== préparation de l'aspect =====
        With wks
           .DisplayToolbar = False                       ' on désactive la barre d'outils
            With .Windows(1)
                .DisplayHorizontalScrollBar = True       ' on active la barre de défilement horizontale
                .DisplayWorkbookTabs = False             ' on désactive la visualisation des onglets
                .DisplayColumnHeadings = False           ' on désactive les entêtes de colonnes
                .DisplayRowHeadings = False              ' on désactive les entêtes de lignes
            End With
     
        End With
    End Sub
    pour l'alimentation de l'objet :
    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
    Public Sub RemplirFeuille()
        ' ======================================================================================
        ' INSPIRED BY   :
        ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
        ' Description   : Cette routine va nous permettre de remplir la feuille
        '=======================================================================================
     
        ' ===== déclaration =====
        ' Classeur et feuille externe à la base
        Dim sFichierExcel As String
        Dim sNomFeuille As String
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim lPremLig As Long
        Dim lDernLig As Long
        Dim lDerColl As Long
        Dim lSize As Double
        Dim i As Long, j As Integer
     
        ' Classeur ActiveX
        Dim wks As OWC11.Spreadsheet
       ' Classeur et feuille à charger
        sFichierExcel = "D:\Classeur1.xlsx"
        sNomFeuille = "Feuil1"
     
        ' ===== affectation =====
        Set wks = Me.SpreadMFC.Object
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(sFichierExcel)
        Set xlSheet = xlBook.Sheets(sNomFeuille)
     
        xlSheet.Activate
        lDernLig = xlSheet.Cells(xlSheet.Cells.Rows.Count, 1).End(xlUp).Row
        lDerColl = xlSheet.Cells(lDernLig, 1).End(xlToRight).Column
        ' 1ère ligne = 1
        lPremLig = 1
     
        ' ===== on vide la feuille de l'objet SpreadSheet =====
       wks.Cells.delete
    ' on y ajoute le nombre de colonnes de la feuille externe - 1
        For i = 1 To lDerColl - 1
            wks.Cells(i).Activate
            wks.ActiveCell.EntireColumn.Select
            wks.Selection.Insert
        Next i
     
        wks.Windows(1).FreezePanes = False
        wks.Application.ScreenUpdating = False
     
        ' ===== remplissage de la feuille =====
        For i = 1 To lDernLig
            For j = 1 To lDerColl
                wks.Cells(i, j) = xlSheet.Cells(i, j)
                ' on suppose que la ligne 1 est l'entête
                If i = lPremLig Then
                    wks.Cells(i, j).Interior.Color = RGB(220, 200, 250)
                    lSize = lSize + xlSheet.Cells(1, j).Width
                End If
            Next j
        Next i
     
        wks.Range("A2").Select
        wks.Windows(1).FreezePanes = True
     
        ' ===== formatage de la feuille =====
        With wks.Range(wks.Cells(lPremLig, 1), wks.Cells(lDernLig, lDerColl))
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
       End With
     
        ' ===== formatage de l'objet   =====
          Me.SpreadMFC.Width = (lSize * 20)
     
        ' ===== libération =====
        wks.Application.ScreenUpdating = True
        xlBook.Close
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
        Set wks = Nothing
    End Sub
    J'ai testé ce code et il fonctionne parfaitement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut
    Encore merci de ton aide sur ce sujet.

    Suite à ton post, je comprends donc qu'on ne peut pas ouvrir de fichier excel existant dans mon objet spreadsheet.
    Le seul moyen est de recopier la feuille excel dans mon spreadsheet à travers ce bout de code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' ===== remplissage de la feuille =====
        For i = 1 To lDernLig
            For j = 1 To lDerColl
                wks.Cells(i, j) = xlSheet.Cells(i, j)
                ' on suppose que la ligne 1 est l'entête
                If i = lPremLig Then
                    wks.Cells(i, j).Interior.Color = RGB(220, 200, 250)
                    lSize = lSize + xlSheet.Cells(1, j).Width
                End If
            Next j
        Next i
    C'est ce qu'il me semblait.

    D'ailleurs je pense qu'utiliser les méthodes .copy du classeur et .paste du spreadsheet permettent, à la fois de copier le format avec, et de copier une grande plage d'un seul coup, ce qui accélère un peu l'exécution.

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/02/2012, 11h04
  2. Réponses: 3
    Dernier message: 31/08/2010, 19h12
  3. Ouverture fichier à partir d'un lien dans un gridview
    Par stefsas dans le forum ASP.NET
    Réponses: 15
    Dernier message: 16/07/2010, 13h08
  4. Réponses: 0
    Dernier message: 17/08/2009, 14h12
  5. tableau excel dans un état ou formulaire access?
    Par flower dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 11h27

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