Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireVBAInteraction avec d'autres applicationsApplications OfficeExcel

Depuis Excel 2002, l'export en CSV via VBA prend par défaut une virgule (sauf si on le fait à la main : Fichier/Enregistrer sous/ CSV (séparateur point-virgule)). Pour forcer Excel ou Access à utiliser un point-virgule lors de l'export d'un fichier Excel vers CSV, il faut :

  1. Vérifier dans les options régionales (panneau de configuration de Windows), onglets Nombres, si le séparateur de liste est bien un point-virgule ;
  2. Ajouter ceci dans le code : Local:=True pour forcer Excel à utiliser le séparateur configuré sur l'ordinateur utilisé.

Soit :

 
Sélectionnez

appXl.ActiveWorkbook.SaveAs Filename:= _
        "D:\MonFichier.csv", FileFormat:=xlCSV, _
        CreateBackup:=False, Local:=True

Et là on a bien des points-virgules comme séparateurs dans le fichier CSV.

Créé le 20 novembre 2005  par jbaudin

Tout d'abord, vous devez ajouter la référence Microsoft Excel X.0 Object Library à votre projet.

Puis dans un module :

 
Sélectionnez

Public Function TestExistenceFeuille(strNomFeuille As String, strNomFichier As String) As Boolean
On Error GoTo err
Dim oAppExcel As Excel.Application
Dim oWbk As Excel.Workbook
Dim oSht As Excel.Worksheet
' Lance Excel
Set oAppExcel = New Excel.Application
' Ouvre le classeur
Set oWbk = oAppExcel.Workbooks.Open(strNomFichier)
' Accède à la feuille
Set oSht = oWbk.Sheets(strNomFeuille)
TestExistenceFeuille = True
' Libère les variables et quitte
Set oSht = Nothing
oWbk.Close
oAppExcel.Quit
Set oWbk = Nothing
Set oAppExcel = Nothing
err:
End Function

Exemple d'utilisation :

 
Sélectionnez

Sub test()
MsgBox TestExistenceFeuille("Feuil1", "D:\test.xls")
End Sub

Notez que si vous utilisez déjà un objet Excel.Application dans votre code principal, vous pouvez le passer en argument à la fonction afin d'accélérer le traitement. Cela donne :

 
Sélectionnez

Public Function TestExistenceFeuille(strNomFeuille As String, strNomFichier As String, oAppExcel As Excel.Application) As Boolean
On Error GoTo err
Dim oWbk As Excel.Workbook
Dim oSht As Excel.Worksheet
' Ouvre le classeur
Set oWbk = oAppExcel.Workbooks.Open(strNomFichier)
' Accède à la feuille
Set oSht = oWbk.Sheets(strNomFeuille)
TestExistenceFeuille = True
' Libère les variables et quitte
Set oSht = Nothing
oWbk.Close
Set oWbk = Nothing
err:
End Function

Que vous utiliserez dans votre code ainsi :

 
Sélectionnez

Dim MonAppli as Excel.Application
' Ici votre code d'ouverture du fichier, et vos traitements préliminaires
' Appel de la fonction
If TestExistenceFeuille("Feuil1", "D:\test.xls",MonAppli) Then
Msgbox "La feuille existe déjà"
else
Msgbox "La feuille n'existe pas"
End if
Créé le 20 novembre 2005  par Tofalu

Pour utiliser ce code, il faut référencer la bibliothèque Excel (VBE : menu Outils/Références).

 
Sélectionnez
Private Sub DémoPilotageExcel()
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
    Dim i as long
    Dim vtemp As Variant   
   
    ' Initialiser les variables
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("C:\Chemin\Feuille.xls")
   
    ' Ajouter une feuille de calcul nommée Toto
    Set xlSheet = xlBook.Worksheets.Add
    xlSheet.Name = "Toto"
   
    ' Manipuler une cellule
    xlSheet.Cells(1, 1) = "je suis dans la ligne1 et colonne1"
   
    ' Manipuler une plage
    xlSheet.Range("A2:D6").Value = "Zones A2:D6"
    ' Remplir la colonne E de la ligne i avec le num de la ligne (i)
    For i = 2 To 6
        xlSheet.Cells(i, 5).Value = i
    Next
   
    ' Trier une plage
    xlSheet.Range("A2:E6").Sort xlSheet.Columns("E"), xlDescending
   
    ' Trouver une valeur dans une plage
    vtemp = xlSheet.Range("A2:E6").Find("2").Row

    ' Trouver une valeur dans une colonne
    vtemp = xlSheet.Columns("E").Find("2").Row
   
    ' Copier une plage vers une destination directement
    'xlBook.Worksheets("Feuil1").Range("A1:E3").Copy Destination:=xlBook.Worksheets _
'("C:\Chemin\FeuilleDestination.xls").Range("A1:E3")
   
    ' Copier une plage
    xlSheet.Range("A" & vtemp & ":E" & vtemp).Copy
   
    ' Coller les valeurs
    xlSheet.Paste Destination:=xlSheet.Range("A8:E8")
   
    ' Supprimer une plage
    ' Si l'on supprime une ligne alors cela remonte les lignes
    'xlSheet.Range("A" & vtemp & ":E" & vtemp).Delete
   
    ' Supprimer une ligne
    xlSheet.Rows(vtemp).Delete
   
    ' Insertion d'une ligne
    xlSheet.Range("A" & i & ":H" & i).EntireRow.Insert Shift:=xlShiftDown
   
    ' Code de fermeture
    xlBook.Save
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
   
    MsgBox "Fin de la procédure. :)"
End Sub
Créé le 10 mai 2005  par cladlemeilleur

Il est possible de faire une table qui a les mêmes noms de champs que dans Excel. Lors de l'import dans la table ainsi créée, Access n'importera que les champs de la table. Si les noms de champs ne sont pas spécifiés dans Excel, il ne sera pas possible de n'importer que quelques colonnes d'une plage, mais on peut délimiter la plage à importer comme ceci :

 
Sélectionnez

DoCmd.TransferSpreadsheet acImport, 8, "Employés","C:\Fichier.xls", True, "A1:G12" 

Par contre, l'import d'un fichier texte permet de spécifier de nombreux attributs pour chaque colonne à importer (nom, type, sauter ou pas, ...). Il est même possible d'enregistrer les spécifications d'import en suivant la technique suivante : exécuter l'importation à l'aide de l'assistant et avant de cliquer sur "TERMINER", cliquer sur le petit bouton en bas à gauche "AVANCE ..." afin de définir et sauvegarder les spécifications d'import... Pour importer des colonnes non contiguës d'une plage d'un fichier Excel, vous pouvez donc passer par l'enregistrement du fichier Excel dans un des formats texte (csv, txt...).

Créé le 25 octobre 2004  par Maxence HUBICHE

Dans Excel, préfixez les valeurs numériques d'un '.
Cela convertira les données numériques en données texte.

Créé le 10 mai 2005  par Maxence HUBICHE

On passe ici par une requête temporaire, mais on peut également exporter une requête existante bien évidemment.

 
Sélectionnez
Dim qd As QueryDef
Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", "Select * From MATABLE")
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97,"Requete_Temporaire", "c:\fichier.xls"
DoCmd.DeleteObject acQuery,"Requete_Temporaire"

Il faut que la bibliothèque Microsoft DAO soit cochée (dans un module faites Outils / Références).

Créé le 1er janvier 2005  par Gaël Donat

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Déclaration :

 
Sélectionnez
Dim appexcel as Excel.Application 
Dim wbexcel as Excel.Workbook

Ne pas oublier de cocher dans le menu Outil/Références, la bibliothèque Microsoft Excel X Object Library (avec x = 8 pour Excel 97, x = 9 pour Excel 2000, x = 10 pour Excel XP, x = 11 pour Excel 2003).

Appel du fichier Excel :

 
Sélectionnez
Set appexcel = CreateObject("Excel.Application") 
appexcel.Visible = True 
Set wbexcel = appexcel.Workbooks.Open("Chemin du fichier Excel") 

Appel de la feuille correspondante :

 
Sélectionnez
appexcel.Sheets("Feuil1").Select 

Remplissage dans Excel (exemple à partir d'une requête), sur des cellules bien précises.

 
Sélectionnez
appexcel.cells(5, 2) = rst![Nomduchamp] 
appexcel.cells(5, 4) = rst![Nomduchamp] 
appexcel.cells(5, 7) = rst![Nomduchamp] 

Attention la cellule (5,2) correspond à la cellule B5 d'Excel.
La fonction rst correspond à un enregistrement Recordset.

Créé le 3 septembre 2004  par Coin

Lien : Comment créer un jeu de données (Recordset) ?

 
Sélectionnez
Dim XLApp As Object
Set XLApp = GetObject(,"Excel.Application")
MsgBox "" & XLApp.ActiveWorkbook.Name & ""
Créé le 1er janvier 2005  par Frank
 
Sélectionnez
On Error Resume Next
Set xlApp = GetObject(, "Excel.application")
If Err = ERR_NOT_RUNNING Then
    Err.Clear
    Set xlApp = CreateObject("Excel.application")
End If

Set xlWkb = xlApp.Workbooks.Add("\\monDossier\MonFichier.xlt") ' Chemin du fichier
 '
 ' Ici nous lançons les macros automatiques d'Excel mais vous pouvez mettre du code
 '
xlWkb.RunAutoMacros xlAutoOpen

xlApp.Visible = True
Set xlWkb = Nothing
Set xlApp = Nothing
Créé le 1er janvier 2005  par GAGNON

Lien : Pourquoi une erreur 429 : 'Un composant ActiveX ne peut créer d'objet' ?

Voici deux fonctions permettant d'arriver à vos fins.

En utilisant un appel automation :

 
Sélectionnez

Public Function TestExcel() as boolean
 On error goto err
 Dim oTmp as Object
 Set oTmp=CreateObject("Excel.Application")
 Set oTmp=Nothing
 TestExcel=True
 err:
End Function

En vérifiant le registre :

 
Sélectionnez

Public Function TestExcel2() As Boolean
 Dim lngR As Long
 TestExcel2 = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\Excel", lngR) = 0
End Function

Ces deux fonctions renverront True si MS Excel est installé sur le poste.

Créé le 20 novembre 2005  par Tofalu

Soit xlBook un classeur :

 
Sélectionnez

xlBook.Close (True) ' On dit qu'on enregistre les modifications du fichier

xlBook.Close(False) ' Pour ne pas enregistrer les modifications
Créé le 14 mai 2006  par Celia1303


Ce code permet de lister les onglets d'un fichier Excel sans l'ouvrir.
Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez

Sub GetDAOExcelTabs(ByVal strPath As String)
    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Set db = DAO.OpenDatabase(strPath, False, True, "Excel 8.0;")
    DoEvents
    For Each td In db.TableDefs
        Debug.Print "onglet : " & td.Name
    Next td
    db.Close
    Set td = Nothing
    Set db = Nothing
End Sub
Créé le 14 octobre 2007  par cafeine

Lien : Comment modifier la valeur d'une cellule d'un classeur Excel fermé en DAO ?


Il faut ajouter la référence : Microsoft DAO 3.x Object Library.

 
Sélectionnez
Sub DAOUpdateExcelFile(ByVal strFullPath As String, _
                       ByVal strTab As String, _
                       ByVal RowIndex As Long, _
                       ByVal ColumnIndex As Long, _
                       ByVal setValue As Variant)
 
    ' Ajoutez la référence DAO
    Dim db As DAO.Database
    Dim rec As DAO.Recordset
    
    ' On ouvre le fichier Excel en tant que base de données DAO
    Set db = OpenDatabase(strFullPath, False, False, "Excel 8.0;")
    DoEvents
    ' On ouvre un Recordset sur un onglet comme on le ferait
    '   sur une table Access
    ' En DAO, les tables sont les onglets avec un $ final
    Set rec = db.OpenRecordset(strTab & "$", DAO.dbOpenDynaset)
    
    ' On se déplace sur l'enregistrement souhaité
    rec.Move RowIndex - 1
    ' On édite l'enregistrement
    rec.Edit
        rec.Fields(ColumnIndex - 1).Value = setValue
    rec.Update
    ' On sauvegarde
    
    ' Fermez les objets
    rec.Close
    db.Close
    
    ' Libérez les objets !
    Set db = Nothing
    Set rec = Nothing
 
End Sub


Un exemple qui permet de passer la valeur de la cellule E12 de l'onglet "Feuil1" à 999 :

 
Sélectionnez
DAOUpdateExcelFile "c:\temp\db.xls","Feuil1",12,5,999
Créé le 14 octobre 2007  par cafeine

Lien : Comment lister les onglets d'un fichier Excel sans l'ouvrir ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.