Données excel

papisgueye -  
Polux31 Messages postés 7219 Statut Membre -
j'ai un fichier excel qui doit être renseigné à partir d'autres fichiers excel exportés à partir d'un programme access, j'aimerais pouvoir charger ce fichier, une fois le mappage effectué sans pour autant ouvrir les fichiers source.
Exple : Soit A.xls la destination, B.xls et C.xls les sources. mettre à jour les données de A.xls une fois ouvert sant ouvrir B et C.
ou bien, une macro qui ouvre automatiquement B et C, et les referme une fois A mis à jour
je vous remercie à l'avance

1 réponse

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    On peut lire un fichier fermé en utilisant une connexion ADO.

    On se connecte au fichier et on récupère les données via un recordset.

    Pour cela il faut activer la référence Microsoft ActiveX Data Objects x.x Library dans le classeur qui exécute la macro (Editeur VB -> Outils -> Références ...)

    Voilà un exemple pour créer une connexion ADO, chercher les données, affichier le résultat et fermer la connexion:

    '//////////////////////////////////////
    'Code à copier dans un module:
    '//////////////////////////////////////
    Option Explicit
    
    Public CnxXL As ADODB.Connection
    Public Rst As ADODB.Recordset
    
    'Connexion au fichier passé en paramètre
    Public Sub OpenCnxXL(ByVal FullPathFileXL As String)
    
    Set CnxXL = New ADODB.Connection
        
        '--- Connection ---
        With CnxXL
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & FullPathFileXL & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
        
        
    End Sub
    
    'Fermeture de la connexion
    Public Sub CloseCnxXL()
    
        CnxXL.Close
        Set CnxXL = Nothing
        
    End Sub
    
    'Fermeture du recordset
    Public Sub CloseRst()
    
        Rst.Close
        Set Rst = Nothing
        
    End Sub
    
    'Récupération des données
    Public Sub RecupDonneesXL(ByVal feuille As String, ByVal cellule As String)
    Dim QuerySql As String
    
        Set Rst = New ADODB.Recordset
        QuerySql = "SELECT * FROM [" & feuille & "$" & cellule & "]"
        
        Set Rst = CnxXL.Execute(QuerySql)
        
    End Sub
    
    'Affichage du résultat
    Public Sub AfficheDonnees()
    
        ThisWorkbook.Worksheets(1).Range("A2").CopyFromRecordset Rst
        
    End Sub


    Voilà comment utiliser le module
    Public Sub MaMacro()
    
        OpenCnxXL("C:\MonDossier\ClasseurB.xls")
        RecupDonnee("Feuil1", "B5:B5")    'ou "B5:G50"
        AfficheDonnees
        CloseRst
        CloseCnxXL
    
    End Sub


    ;o)
    0