| 
 
 |  |  | 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 :
 
 
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.Ajouter ceci dans le code : Local:=True pour forcer Excel à utiliser le séparateur configuré sur l'ordinateur utilisé. 
Soit :
 | 
appXl.ActiveWorkbook.SaveAsFilename:=_"D:\MonFichier.csv", FileFormat:=xlCSV, _
        CreateBackup:=False, Local:=True
 | 
Et là on a bien des points-virgules comme séparateurs dans le fichier CSV.
 
 | 
|  |  | auteur : Tofalu |  | 
Tout d'abord vous devez ajouter la référence Microsoft Excel X.0 Object Library à votre projet.
 
 
Puis dans un module :
 | 
PublicFunctionTestExistenceFeuille(strNomFeuilleAsString, strNomFichierAsString)AsBooleanOnErrorGoToerrDimoAppExcelAsExcel.ApplicationDimoWbkAsExcel.WorkbookDimoShtAsExcel.WorksheetSetoAppExcel=NewExcel.ApplicationSetoWbk=oAppExcel.Workbooks.Open(strNomFichier)SetoSht=oWbk.Sheets(strNomFeuille)
TestExistenceFeuille=TrueSetoSht=NothingoWbk.CloseoAppExcel.QuitSetoWbk=NothingSetoAppExcel=Nothingerr:EndFunction
 | 
Exemple d'utilisation :
 | 
Subtest()MsgBoxTestExistenceFeuille("Feuil1","D:\test.xls")EndSub
 | 
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 :
 | 
PublicFunctionTestExistenceFeuille(strNomFeuilleAsString, strNomFichierAsString, oAppExcelAsExcel.Application)AsBooleanOnErrorGoToerrDimoWbkAsExcel.WorkbookDimoShtAsExcel.WorksheetSetoWbk=oAppExcel.Workbooks.Open(strNomFichier)SetoSht=oWbk.Sheets(strNomFeuille)
TestExistenceFeuille=TrueSetoSht=NothingoWbk.CloseSetoWbk=Nothingerr:EndFunction
 | 
Que vous utiliserez dans votre code ainsi :
 | 
DimMonAppliasExcel.ApplicationIfTestExistenceFeuille("Feuil1","D:\test.xls",MonAppli)ThenMsgbox"La feuille existe déjà"elseMsgbox"La feuille n'existe pas"Endif
 | 
 | 
|  |  | auteur : cladlemeilleur |  | Pour utiliser ce code il faut référencer la bibliothèque Excel (VBE : menu Outils/Références) | PrivateSubDémoPilotageExcel()DimxlAppAsExcel.ApplicationDimxlSheetAsExcel.WorksheetDimxlBookAsExcel.WorkbookDimiaslongDimvtempAsVariantSetxlApp=CreateObject("Excel.Application")SetxlBook=xlApp.Workbooks.Open("C:\Chemin\Feuille.xls")SetxlSheet=xlBook.Worksheets.AddxlSheet.Name="Toto"xlSheet.Cells(1,1)="je suis dans la ligne1 et colonne1"xlSheet.Range("A2:D6").Value="Zones A2:D6"Fori=2To6xlSheet.Cells(i,5).Value=iNextxlSheet.Range("A2:E6").SortxlSheet.Columns("E"), xlDescending
   
    
    vtemp=xlSheet.Range("A2:E6").Find("2").Rowvtemp=xlSheet.Columns("E").Find("2").RowxlSheet.Range("A"&vtemp&":E"&vtemp).CopyxlSheet.PasteDestination:=xlSheet.Range("A8:E8")
   
    
    
    
   
    
    xlSheet.Rows(vtemp).DeletexlSheet.Range("A"&i&":H"&i).EntireRow.InsertShift:=xlShiftDown
   
    
    xlBook.SavexlApp.QuitSetxlSheet=NothingSetxlBook=NothingSetxlApp=NothingMsgBox"Fin de la procédure. :)"EndSub
 | 
 | 
|  |  | 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.TransferSpreadsheetacImport,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, ...)
 
 | 
|  |  | auteur : Maxence HUBICHE |  | Dans Excel, préfixez les valeurs numériques d'un 'Cela convertira les données numériques en données texte.
 
 | 
|  |  | auteur : Gaël Donat |  | On passe ici par une requête temporaire, mais on peut également exporter une requête existante bien évidemment.
 | DimqdAsQueryDefSetqd=CurrentDb.CreateQueryDef("Requete_Temporaire","Select * From MATABLE")
DoCmd.TransferSpreadsheetacExport, acSpreadsheetTypeExcel97,"Requete_Temporaire","c:\fichier.xls"DoCmd.DeleteObjectacQuery,"Requete_Temporaire"
 | 
Il faut que la librairie Microsoft DAO soit cochée (dans un module faites Outils / Références). 
 |  | lien :  Définition et manipulation de données avec DAO par Tofalu lien :
  Comment déclarer une référence dans MS-Access ? 
 | 
|  |  | auteur : Coin |  | Déclaration:
 | DimappexcelasExcel.ApplicationDimwbexcelasExcel.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 : 
 | Setappexcel=CreateObject("Excel.Application") 
appexcel.Visible=TrueSetwbexcel=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) 
 | 
|  |  | auteur : Frank |  | | DimXLAppAsObjectSetXLApp=GetObject(,"Excel.Application")MsgBox""&XLApp.ActiveWorkbook.Name&""
 | 
 | 
|  |  | auteur : GAGNON |  | | OnErrorResumeNextSetxlApp=GetObject(,"Excel.application")IfErr=ERR_NOT_RUNNINGThenErr.ClearSetxlApp=CreateObject("Excel.application")EndIfSetxlWkb=xlApp.Workbooks.Add("\\monDossier\MonFichier.xlt") 
 
 
 
xlWkb.RunAutoMacrosxlAutoOpen
xlApp.Visible=TrueSetxlWkb=NothingSetxlApp=Nothing
 | 
 |  | lien : Erreur 429 : Un composant Activex ne peut créer d'objet 
 | 
|  |  | auteur : Tofalu |  | 
Voici deux fonctions permettant d'arriver à vos fins :
 
 
En utilisant un appel automation :
 | 
PublicFunctionTestExcel()asbooleanOnerrorgotoerrDimoTmpasObjectSetoTmp=CreateObject("Excel.Application")SetoTmp=NothingTestExcel=Trueerr:EndFunction
 | 
En vérifiant le registre :
 | 
PublicFunctionTestExcel2()AsBooleanDimlngRAsLong
 TestExcel2=RegOpenKey(HKEY_LOCAL_MACHINE,"Software\Microsoft\Office\Excel", lngR)=0EndFunction
 | 
Ces deux fonctions renverront bien sûr True si MS Excel est installé sur le poste.
 
 | 
|  |  | auteur : Celia1303 |  | 
Soit xlBook un classeur :
 | 
xlBook.Close(True) 
xlBook.Close(False)
 | 
 | 
|  |  | 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
 
 | 
SubGetDAOExcelTabs(ByValstrPathAsString)DimdbAsDAO.DatabaseDimtdAsDAO.TableDefSetdb=DAO.OpenDatabase(strPath,False,True,"Excel 8.0;")
    DoEventsForEachtdIndb.TableDefsDebug.Print"onglet : "&td.NameNexttd
    db.CloseSettd=NothingSetdb=NothingEndSub
 | 
 |  | lien :  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
 
 | SubDAOUpdateExcelFile(ByValstrFullPathAsString, _ByValstrTabAsString, _ByValRowIndexAsLong, _ByValColumnIndexAsLong, _ByValsetValueAsVariant)DimdbAsDAO.DatabaseDimrecAsDAO.RecordsetSetdb=OpenDatabase(strFullPath,False,False,"Excel 8.0;")
    DoEventsSetrec=db.OpenRecordset(strTab&"$", DAO.dbOpenDynaset)
    
    
    rec.MoveRowIndex-1rec.Editrec.Fields(ColumnIndex-1).Value=setValue
    rec.Updaterec.Closedb.CloseSetdb=NothingSetrec=NothingEndSub
 | 
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 :  Comment lister les onglets d'un fichier excel sans l'ouvrir 
 | 
 
 
						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. |