Utiliser Excel A Partir de Visual Basic
Utiliser Excel A Partir de Visual Basic
Utiliser Excel A Partir de Visual Basic
Tous les documents ou partie de document ainsi que le code sont libres d'accès, mais ne peuvent
pas être diffusés sur d'autres sites HTTP, FTP ou autres, sans mon accord.
L'ensemble de mon code mis à votre disposition est libre d'utilisation tant qu'il ne sert pas à la
réalisation d'applications payantes. Je demande juste aux personnes incluant mon code dans leurs
applications d'y laisser le commentaire mis en entête.
Avant-Propos :
L'ensemble du code et explications que vous trouverez dans ce document est basé sur Excel 8 et
Visual Basic 6.
Vous trouverez ci-après des exemples d'utilisation d'Excel à partir de Visual Basic. Je ne
présenterais pas toutes les possibilités car elles sont tellement nombreuses qu'il est possible d'en
écrire un livre.
Vous apprendrez les bases du maniement. Vous pourrez trouver également comment résoudre
certains de vos problèmes. Ce tutorial est basé sur les différentes questions qui ont été posées sur le
forum de developpez.com ainsi sur les exemples que certains membres m'ont donné et que je
remercie.
Sommaire :
Tout d'abord pour pouvoir utiliser Excel dans un projet Visual Basic vous devez rajouter dans le
menu Projets - Références, Microsoft Excel x.x
Ceux qui sont plutôt à l'aise sous VBA (Visual Basic for Application), vous comprendrez très vite
que le passage de VBA à VB est extrêmement simple.
Pour commencer nous allons voir quels sont les objets dont nous avons besoin et comment les
utiliser. Pour travailler sur une feuille Excel, vous devez tout d'abord ouvrir Excel puis un classeur
sur lequel vous allez travailler. Cela se passe en trois étapes :
Ouvrir Excel
Sélectionner le classeur par défaut
Sélectionner la feuille par défaut
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ajout d'un classeur car à l'ouverture d'Excel il n'y a aucun classeur d'ouvert
appExcel.Workbooks.Add 'Ceci n'est nécessaire que si vous n'ouvrez pas un fichier existant
'Récupération du classeur par défaut
Set wbExcel = appExcel.ActiveWorkbook
'Récupération de la feuille par défaut
Set wsExcel = wbExcel.ActiveSheet
Maintenant que vous savez ouvrir une feuille Excel, voilà comment on referme une application
Excel. Cette phase est EXTREMEMENT IMPORTANTE. En effet si vous oubliez de fermer
Excel à la fin de son utilisation vous pouvez vous avoir des plantages car vous aurez trop d'Excel
d'ouverts et la mémoire de votre ordinateur sera saturée. Par contre à la fin de votre application
même si vous oubliez de fermer Excel, il se fermera tout seul sauf si votre application plante. Donc
je vous conseille vivement d'effectuer la fermeture d'Excel dès que vous n'en avez plus besoin .
Au cours d'un des programme que j'ai réalisé, je me suis heurté à un problème qui a déjà été
remarqué par plusieurs personnes. Lorsque vous ajouter un saut de page dans votre feuille,
l'application Excel ne se ferme pas même après les lignes écrites ci-dessus. Rassurez-vous tout de
même, Excel est automatiquement fermé lorsque votre application se termine. Mais c'est un
problème à ne pas négliger lorsque vous avez besoin de travailler avec plusieurs fichiers ouverts
cat la mémoire de votre ordinateur va saturer.
Dans le prochain chapitre, nous allons voir comment ouvrir un fichier Excel standard, un fichier
CVS, et un fichier texte avec des séparateurs.
Ouvrir un fichier Excel c'est ce qu'il y a de plus simple. Voici un exemple de code :
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\MonFichierExcel.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Je ne remarque pas les lignes permettant de fermer le fichier mais je vous rappelle que ces lignes
ne sont pas à négliger mais si elles ne sont pas obligatoires.
A titre informatif, les fichiers CSV sont des fichiers textes où une ligne du fichier correspond à une
ligne de la feuille et les colonnes sont séparées par des ';'.
123 45 52 65
10 23
23 41
Quand je disais que le fichier Excel était le plus simple, en fait les CSV sont tout aussi simple.
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\MonFichierCSV.csv")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Sous Excel vous pouvez ouvrir des fichiers textes et les affichés sous forme de tableur car chaque
colonne est séparée par un symbole ou alors les colonnes ont une taille fixe. Voici la liste des
séparateurs gérés par Excel :
la tabulation
le point-virgule
la virgule
l'espace
Mais si cela ne vous convient pas, Excel vous propose de choisir votre propre séparateur. Mais ce
ne peut être qu'un seul caractère.
Comme tout bon tableur vous pouvez indiquer à Excel à partir de quelle ligne du fichier vous
souhaitez commencer l'import et à quel format (celui par défaut est Windows(ANSI)).
Voici le code pour ouvrir un fichier texte avec comme séparateur le ';' commençant à la deuxième
ligne et au format Windows(ANSI) :
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Workbooks.OpenText Filename:= "C:\MonFichierTexte.txt", Origin:=xlWindows, _
StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False,
Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Set wbExcel=appExcel.ActiveWorkbook
Set wsExcel=wbExcel.ActiveSheet
Afin de ne pas être trop perdu je vous explique à quoi correspond chaque option ci-dessus :
Voici un exemple où vous souhaitez charger sur 3 colonnes. La première colonne commence à 0
(début de la feuille), la deuxième à la 10e colonne et la troisième à la 15e colonne. Le code obtenu
est FieldInfo:=Array(0,1), Array(10,1), Array(15,1)
Le prochain chapitre portera sur la navigation dans une feuille Excel et l'affectation des cellules.
Travailler avec Excel sous Visual Basic, ce n'est pas très compliqué. En effet tout est basé sur le
VBA. Toute la suite du cours sera en plus un cours sur VBA. En effet si vous souhaitez réaliser
une manipulation plus ou moins complexe avec Excel, je vous conseille de créer une macro sous
Excel. Pour cela vous allez dans le menu Outils -> Macro -> Nouvelle Macro...
Vous effectuez votre manipulation puis vous arrêtez votre macro avec le carré bleu de la barre
d'outils. Ensuite vous retournez dans le menu Outils -> Macro et vous sélectionnez Visual Basic
Editor (ou vous faites Alt+F11). Vous trouverez alors le code VBA de ce que vous venez de
réaliser. Il ne vous reste plus qu'à l'adapter à vos besoins.
Je vais tout de même vous montrez quelques bases comme la navigation dans une feuille Excel
avec sélection, affectation, copie, coupage, insertion, suppression.
Afin d'éviter d'avoir à s'embêter avec les lettres des colonnes, nous allons commencer par déclarer
un tableau contenant le nom des colonnes :
Option Base 1
Public colHeader As Variant
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", _
"AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN",
"AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", _
"BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO",
"BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", _
"CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CJ", "CK", "CL", "CM", "CN", "CO",
"CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ")
Je me suis arrêté à la colonne CZ mais vous pouvez en rajouter autant que vous le souhaitez. Je
vous conseille de mettre le code ci-dessus dans un module pour que toute votre application puisse
utiliser ce tableau.
Pour débuter ce chapitre nous allons sélectionné une feuille, et calculer la somme des cellules A3 à
F3 et mettre le résultat dans la cellule B4.
Dim i As Integer
Dim somme As Integer
somme = 0
'Parcours des cellules : A correspond à la première case de mon tableau et F à la sixième
For i = 1 To 6
'La propriété Cells(n°ligne,n°colonne) permet de sélectionner une seule cellule
somme = somme + sheet.Cells(3,i).Value
Next i
'La propriété Range(zone) permet de sélectionner une zone. La variable zone est une chaine de
caractère de la forme "B5:T20" (cellule du coin haut gauche et cellule bas droite séparée par le
caractère ':')
sheet.Range(colHeader(2) & "4:" & colHeader(2) & "4").Select
'La chaine formée par colHeader(2) & "4:" & colHeader(2) & "4" donne "B4:B4" ce qui
sélectionne une seule cellule
sheet.Selection.Value = somme
...
C'était un petit exemple qui vous montre comment accéder à une cellule directement (grâce à
Cells) et comment sélectionner un ensemble de cellule (grâce à Range).
Bien sûr vous pouvez sélectionner aussi bien une ligne qu'une colonne, mais avec la propriété
Range c'est assez embêtant car la première cellule on la connaît mais pas la dernière, à moins de
mettre les valeurs maximales d'Excel. Donc il existe deux propriétés qui sont Rows et Columns.
Pour sélectionner un ensemble de colonnes vous devez faire passez le nom de la première colonne
et celui de la dernière. Pour sélectionner les colonnes D à H vous faites :
sheet.Columns("D:H").Select
Comme vous n'avez que le numéro des colonnes et non pas les lettre vous faites :
Pour sélectionner un ensemble de colonnes vous devez faire passez le nom de la première colonne
et celui de la dernière. Pour sélectionner les lignes 25 à 43 vous faites :
sheet.Rows("25:43").Select
Pour sélectionner une seule ligne vous pouvez faire Rows("25").Select ou bien Rows(25).Select
Les techniques de sélection sont valables pour la copie, le coupage, le collage, la suppression et
l'insertion. Vous devez juste remplacer Select par Copy, Cut, Paste, Delete, Insert.
Vous pouvez soit récupérer une feuille spécifique soit récupérer la feuille active.
Rien de plus simple. Vous sélectionnez une feuille avec la méthode ci-dessus, puis vous faites :
sheet.Name = "NouveauNom"