Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment exporter un fichier Excel vers CSV
auteur : jbaudin
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 :

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.


Tester si une feuille Excel existe au sein d'un classeur
auteur : Tofalu
Tout d'abord vous devez ajouter la référence Microsoft Excel X.0 Object Library à votre projet.

Puis dans un module :

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 :

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 :

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 :

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

Piloter Excel via Access : exemples d'opérations courantes effectuées sur cellules, plages, lignes ou colonnes excel à partir d'access.
auteur : cladlemeilleur
Pour utiliser ce code il faut référencer la bibliothèque Excel (VBE : menu Outils/Références)
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   
   
    'J'initialise mes 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"
    'Remplie 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
   
    'Permet de 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

    'Touver 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

Importation de fichier Excel
auteur : Maxence HUBICHE
Comment n'importer que quelques colonnes d'un fichier Excel ? 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 :

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, ...)


Lors d'export vers Excel, comme forcer Excel à interpréter les données comme du texte ?
auteur : Maxence HUBICHE
Dans Excel, préfixez les valeurs numériques d'un '
Cela convertira les données numériques en données texte.


Comment exporter le résultat d'une requête sous Excel ?
auteur : Gaël Donat
On passe ici par une requête temporaire, mais on peut également exporter une requête existante bien évidemment.
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 librairie Microsoft DAO soit cochée (dans un module faites Outils / Références).

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

Comment envoyer des données Access sur Excel ?
auteur : Coin
Déclaration:
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 excès 2003).

Appel du fichier Excel :
Set appexcel = CreateObject("Excel.Application") 
appexcel.Visible = True 
Set wbexcel = appexcel.Workbooks.Open("Chemin du fichier Excel") 
Appel de la feuille correspondante :
appexcel.Sheets("Feuil1").Select 
Remplissage dans Excel (Exemple à partir d'une requête), sur des cellules bien précises.
appexcel.cells(5, 2) = rst![Nomduchamps] 
appexcel.cells(5, 4) = rst![Nomduchamps] 
appexcel.cells(5, 7) = rst![Nomduchamps] 
Attention la cellule (5,2) correspond à la cellule B5 d'excès. la fonction rst correspond à un enregistrement RecordSet.

lien : Créer un jeu de données (recordset)

Récupérer le nom du classeur Excel actif
auteur : Frank
Dim XLApp As Object
Set XLApp = GetObject(,"Excel.Application")
MsgBox "" & XLApp.ActiveWorkbook.Name & ""

Comment ouvrir un fichier vierge basé sur un modèle et travailler sur cette session d'Excel, puis retourner dans Access
auteur : GAGNON
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
lien : Erreur 429 : Un composant Activex ne peut créer d'objet

Comment vérifier qu'Excel soit installé sur un poste ?
auteur : Tofalu
Voici deux fonctions permettant d'arriver à vos fins :

En utilisant un appel automation :

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 :

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 bien sûr True si MS Excel est installé sur le poste.


Comment enregistrer (ou non) les modifications apportées à un classeur excel, sans demander à l'utilisateur ?
auteur : Celia1303
Soit xlBook un classeur :

xlBook.Close (True) 'on dit qu'on enregistre les modifs du fichiers

xlBook.Close(False) 'pour ne pas enregistrer les modifs

Comment lister les onglets d'un fichier excel sans l'ouvrir
auteur : Cafeine

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

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
lien : faq Comment modifier la valeur d'une cellule d'un classeur excel fermé en DAO ?

Comment modifier la valeur d'une cellule d'un classeur excel fermé en DAO ?
auteur : Cafeine

Il faut ajouter la référence : Microsoft DAO 3.x Object Library
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 :
DAOUpdateExcelFile "c:\temp\db.xls","Feuil1",12,5,999
lien : faq Comment lister les onglets d'un fichier excel sans l'ouvrir

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout 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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com