LECTURE D'UN FICHIER EXCEL EN VB

cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013 - 19 févr. 2004 à 01:51
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 - 1 déc. 2008 à 02:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20544-lecture-d-un-fichier-excel-en-vb

Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
1 déc. 2008 à 02:39
Voila qui entre dans mes futur demandes ! Merci - 10/10 en explication !
pour tout le monde !
cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010
9 févr. 2005 à 16:52
j'ai 2 petites questions
tout d'abord, j'essais de dev une petite app afin de récupérer les valeurs d'un tableau excel pour les envoyer vers un serveur SQL...grace au code décrit plus haut, tout marche à peu près sauf que:
- je n'ai aucun moyen de savoir quelle version d'Excel sera installé sur la machine qui va exécuter l'app, alors comment faire pour les référence ? (mais je suis sur qu'il y aura au moins un excel)
- comment faire pour ne récupérer que les lignes qui sont renseigner sans etre obligé de se taper un FOR sur les 6300 (à peu pres) ligne possible dans un tableau en sachant qu'il est possible qu'il y est des ligne vide au milieu des lignes renseignée (donc po possible de faire un FOR en testant si y'a quelque chsoe dans la premier case) ?

merci par avance
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
4 mars 2004 à 09:06
Apprêt 2,5 semaine intensive de VB Excel j'arrive a lire et écrire sans prob mai pare contre quand une personne change de classeur pendent l'exécution de mon programme sa plante.
Et aussi je n'arrive pas a chargé plusieurs cellule en nems temps.
merci pour tout
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
24 févr. 2004 à 09:12
merci pour tout avec sa j'ai pu persque tout faire et j'ai exel 2000 donc Excel 9.00 Object Library au mieu
que j'utilise actuellement je referait ma source a la fin de mon stage
mai sous VB 5.0 la sintaxe est légerement diférente
ex:
MonXl.ActiveWorkbook.Close (True) 'pour fermer en enregistrant mai sans les parentaise sa fait une rreur
RcrivelliNET Messages postés 41 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 12 août 2008
23 févr. 2004 à 03:01
Hello, je suis un tout débutant en Progra mais,
je me demande s'il nest pas plus simple d'ajouter la référance Excel 10.0 Object Library a ton projet et de travailler avec ?
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
21 févr. 2004 à 02:28
Salut, j'ai du mal à te suivre, je comprend un mot sur 2,
je vais être obligé de réviser Champolion. Si ma pauvre prof
de français lisait ce que tu écris elle deviendrait verte, arc en ciel même.
Ca m'étonne que la sélection des colonnes ne fontionne pas
Pour ce qui concerne le tri, je t'ai mis un exemple en fin
de page et également un exemple pour le filtrage par colonnes
ce sont en quelque sorte des mini requêtes.
Ci-dessous d'autres fonctions très utiles.

'sélectionner l'ensemble des cellules de la feuille 1
Xl.Worksheets(1).Cells.Select
'fixer la police pour l'ensemble des cellules
Xl.Selection.Font.Name = "Arial"
Xl.Selection.Font.FontStyle = "Normal"
Xl.Selection.Font.Size = 9
'texte justifié à droite
Xl.Selection.HorizontalAlignment = xlLeft
'selectionne la colonne D (4eme)
Xl.Columns("D:D").select
'fixer la largeur de colonne
Xl.Columns("D:D").ColumnWidth = 8
'centrer le texte de la 4 eme colonne
Xl.Columns("D:D").HorizontalAlignment = xlCenter
'forcer le type de données (ici @ signifie texte)
Xl.Columns("D:D").NumberFormat = "@"
'ajoute un commentaire sur la cellule D1 (4eme colonne 1ere ligne)
Xl.Sheets(1).Range("D1").AddComment
'Indique si le commentaire reste affiché ou non
Xl.Sheets(1).Range("D1").Comment.Visible = False
'Texte du commentaire affecté à la cellule
Xl.Worksheets(1).Range("D1").Comment.Text Text:="Mon commentaire"

'positionner les volets
Xl.ActiveWindow.SplitRow = 0.733
Xl.ActiveWindow.SplitColumn = 1.94

'Figer les volets
Xl.ActiveWindow.FreezePanes = True

'mise en place du filtrage automatique
'Important, il ne faut pas que la fenêtre soit réduite sinon echec
Xl.Application.WindowState = xlNormal
Xl.Worksheets(1).Cells.Select
Xl.Selection.AutoFilter

' Tri des enregistrements
Xl.Worksheets(1).Cells.Select
Xl.Selection.Sort Key1:=Xl.Worksheets(1).Range("A1"), Order1:=xlAscending, Key2:=Xl.Worksheets(1).Range("D1") _
, Order2:=xlAscending, Key3:=Xl.Worksheets(1).Range("E1"), Order3:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

' Filtrage sur colonne 4 (recherche les cellules qui contiennent le mot "neuf"
Xl.Selection.AutoFilter Field:=4, Criteria1:="=*neuf*", Operator:=xlAnd
' Filtrage sur colonne 14 (recherche les cellules qui sont égales à "Stock"
Xl.Selection.AutoFilter Field:=14, Criteria1:="Stock"
' Filtrage sur colonne 15 (recherche les cellules dont la valeur est différentes de zéro)
Xl.Selection.AutoFilter Field:=15, Criteria1:="<>0"

Bonne nuit et t'endors pas sur tes palmes.



Académiques Bien sûr.
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
20 févr. 2004 à 09:50
merci presque tout marche (pa la séléction des colonne)

j'aurait besouin de faire des trie pour finire mon aplication
mai pour se faite je doi exécuter des macro excel depuit VB mai je sai paci sai feusable ou ci il y a un autre cistaime

et encore merci pour tout
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
20 févr. 2004 à 02:29
Non l'objet Excel ne bug Pas, seulement il est important de libérer correctement les instances d'objets qui ne servent plus et de ne pas ouvrir 50 fois excel . Et c'est bien là l'intérêt de la fonction getobject.
Pour ce qui concerne les ojets sheets, workbook, etc .. il est pas forcément nécessaire de les créer car ils sont déjà disponibles à partir de l'objet déclaré par Set XL = Getobject(,"Excel.application). Poue être clair, il suffit de déclarer qu'un objet Excel. Et comme un exemple vaut mieux qu'un discour je t'en met une poignée en espérant que tu trouveras ton bonheur.
'
Dans le menu Projet, sélectionnez Références. La boîte de dialogue que vous découvrez présente tous les programmes compatibles OLE Automation présents sur votre PC. Si Word est installé vous trouverez et cocherez la case "Microsoft Word 8 Object Library".

Dans la zone General-Declarations d'un module, créez une variable publique:
Public MonWd as Word.Application ' Pour Word
Public MonXl as Word.Application 'Pour Excel

'Déclaration des Variables
Dim MonXl As Variant
'Ceci initialise la variable et charge Excel en arrière plan
Set MonXl = New Excel.Application
ou Set MonXl = CreateObject("Excel.Application") ' Pour Excel
ou Set MonWd = CreateObject("Word.Application") ' Pour Word

'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
MonXl.Visible = True
'Ouverture d'un Classeur Existant
MonXl.Workbooks.Open FileName:="C:\Documents and Settings\Administrateur\Mes documents\Classeur1.xls"
'sélection d'une feuille du classeur en cours
MonXl.Sheets("E.MAIL DIRECTION").Select
MonXl.Sheets(1).Select 'selectionne la premiere feuille du classeur
'Ajoute un nouveau classeur
MonXl.Workbooks.Add
'ajoute une feuille à la fin du classeur
Dim newSheet As Variant
Dim nbfeuille As Integer
nbfeuille = MonXl.Worksheets.Count
Set newSheet = MonXl.Sheets.Add(after:=MonXl.Worksheets(nbfeuille), Type:=xlWorksheet)
'renvoi le nom de la premiere feuille du classeur ou attribu un nom à une feuille
NomFeuille= MonXl.Sheets(1).Name
MonXl.Sheets(1).Name = "Feuille Ajoutée"
'renseigne la valeur d'une cellule
MonXl.Range("A1").Value = "XY"
'teste la valeur d'une cellule
If MonXl.Range("A3").Value <> "" Then
'sélection d'une colonne entière et supprime le contenu des cellules
MonXl.Columns("F:F").Select
MonXl.Selection.ClearContents
MonXl.Selection.Clear

'Assure la sélection des trois cellules
MonXl.Range("A1:A3").Select
'assure la selection d'un bloc de lignes et colonne de la feuille Sheet1
MonXl.Worksheets("Sheet1").Range("A1:C10").selected
'effectuer un copier-coller d'une colonne à l'autre
MonXl.Columns("F:F").Select
MonXl.Selection.Copy
MonXl.Columns("G:G").Select
MonXl.ActiveSheet.Paste
'modifie la hauteur de la ligne n°1
MonXl.Rows("1:1").RowHeight = 39
'active un classeur (lorsque plusieurs sont chargés)
MonXl.Windows("E MAIL POINT AU 23 MARS 2002 PAR DISTRICT.xls").Activate
' sauvegarde le classeur en cours
MonXl.ActiveWorkbook.Save
'sauvegarde le classeur en cours sous un autre nom
MonXl.ActiveWorkbook.SaveAs Filename:="E:\Mes documents\DOC EXCEL\E MAIL POINT AU 23 MARS 2002 PAR DISTRICT2.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
'ferme le classeur en cours
MonXl.ActiveWindow.Close
'se positionner sur la premiere feuille
MonXl.ActiveWindow.ScrollWorkbookTabs Position:=xlFirst ou bien MonXl.Worksheets(1).Activate
' Fixe la largeur de la colonne selectionnée
MonXl.Selection.ColumnWidth = 26
' Fixe la largeur d'une colonne
MonXl.Columns("F:F").ColumnWidth = 40.14
'Selectionne une ligne complete,active une cellule de la ligne et revoi le nombre de lignes sélectionnées
MonXl.Rows("13:13").Select
Monxl.Range("B13").Activate
NbLignes=MonXl.rows.Count
NbLignes=Monxl.Columns.Count
'selectionne une colonne puis active le fitre automatique et applique un filtre
MonXl.Columns("F:F").Select
Monxl.Selection.AutoFilter
'doit contenir dir dans le texte
Monxl.Selection.AutoFilter Field:=1, Criteria1:= "=*dir*", Operator:=xlAnd
'doit contenir magasin ou se terminer par dir
MonXl.Selection.AutoFilter Field:=1, Criteria1:="=*magasin*", Operator:=xlOr,Criteria2:="=*dir"
'Ne doit pas commencer par B et ne doit pas finir par X
MonXl.Selection.AutoFilter Field:=6, Criteria1:="<>b*", Operator:=xlAnd, Criteria2:="<>*x"

'supprime une ligne
MonXl.Worksheets("Sheet1").Rows(3).Delete
MonXl.Range("G:G").Count 'affiche 65536 (nb maxi de lignes)
MonXl.Range("G:G").Item(1) 'affiche le texte contenu dans la cellule
MonXl.Range("G:G").Item(1).Value 'Equivalent à la ligne précédente
MonXl.Range("G:G").Item(1).Address(ReferenceStyle:=xlR1C1) 'affiche les coordonnées de la cellule $G$1255
MonXl.Range("G:G").Item(1).Address(ReferenceStyle:=xlA1) 'affiche les coordonnées de la cellule R1C7
MonXl.Range("G:G").Item(1).Address(RowAbsolute:=False, ColumnAbsolute:=False) ' affiche les coordonnées de la cellule sans les $ : G1244
MonXl.Range("G:G").Item(1).Address(external:=True) 'affiche le nom du classeur la feuille en cours et les coordonnées de la cellule en cours
'affiche la feuille dans sa taille maxi et positionne le curseur sur l'angle sup gauche
MonXl.ActiveWindow.WindowState = xlMaximized
MonXl.ActiveWindow.ScrollRow = 1
MonXl.ActiveWindow.ScrollColumn = 1
'Modifie la taille et la position de la fenêtre Windows Excel
Application.Left = 75.25
Application.Top = 1
Application.Width = 649.5
Application.Height = 474

'Cet exemple montre comment supprimer des lignes dans la zone en cours de la feuille de calcul 1 où la valeur de la cellule 1 de la ligne est la même que celle de la cellule 1 de la ligne précédente.
dim rw as variant

For Each rw In MonXl.Worksheets(1).Cells(1, 1).CurrentRegion.Rows
this = rw.Cells(1, 1).Value
If this = last Then rw.Delete
last = this
Next

'Cet exemple montre comment faire défiler la fenêtre du classeur jusqu'à ce que la sélection 'apparaisse dans le coin supérieur gauche de la fenêtre.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveWindow
.ScrollRow = Target.Row
.ScrollColumn = Target.Column
End With
End Sub
Cet exemple montre comment attribuer la valeur « 3.14159 » à la cellule A1 de la feuille « Sheet1 ».
Worksheets("Sheet1").Range("A1").Value = 3.14159
Cet exemple montre comment créer une formule dans la cellule A1 de la feuille « Sheet1 ».
Worksheets("Sheet1").Range("A1").Formula = "=10*RAND()"
Cet exemple montre comment exécuter une boucle sur les cellules A1:D10 de la feuille « Sheet1 ». Si une des cellules a une valeur inférieure à 0,001, le code remplace cette valeur par 0 (zéro).
For Each c in Worksheets("Sheet1").Range("A1:D10")
If c.Value < .001 Then
c.Value = 0
End If
Next c
Cet exemple montre comment exécuter une boucle sur la plage appelée « TestRange » et comment afficher le nombre de cellules vides de la plage.
numBlanks = 0
For Each c In Range("TestRange")
If c.Value = "" Then
numBlanks = numBlanks + 1
End If
Next c
MsgBox "There are " & numBlanks & " empty cells in this range"
Cet exemple montre comment affecter le style italique à la police des cellules A1:C5 de la feuille « Sheet1 ». L'exemple utilise la Syntaxe 2 de la propriété Range.
Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True

Sub OuvreExcel()
'Déclaration des Variables
Dim MonXl As Variant

'Initialise la variable et charge Excel en arrière plan
Set MonXl = New Excel.Application
'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
MonXl.Visible = True
'Definition du répertoire Courant
ChDir "E:\Mes documents\DOC EXCEL" 'Change des répertoire Actif
'Ouvre un Fichier Excel
MonXl.Workbooks.Open Filename:= _
"E:\Mes documents\DOC EXCEL\E MAIL POINT AU 23 MARS 2002 PAR DISTRICT.xls"
'Selectionne La feuille Nommée TOUS
MonXl.Sheets("TOUS").Select
'Copie la feuille en cours Nommée TOUS et en cré une autre au début du classeur
MonXl.Sheets("TOUS").Copy Before:=Sheets(1)
'Selectionne un Bloc de Cellules
MonXl.Range("A4:F1223").Select
'Copie la Sélection en cours
MonXl.Selection.Copy
'Ajoute une feuille au classeur
MonXl.Sheets.Add
'Colle la sélection sur la feuille active en cours
MonXl.ActiveSheet.Paste
' renvoi le nom de la feuille active
NomFeuille = MonXl.ActiveSheet.Name
'Annule le mode Couper ou Copier et supprime la marque de sélection.
Application.CutCopyMode = False
'sélection du filtre automatique
MonXl.Selection.AutoFilter
'renvoi le nombre de lignes ou le nombre de colonnes dans la selection
NbLignes = MonXl.Selection.Rows.Count
NbLignes = MonXl.Selection.Columns.Count
'ferme le classeur en cours
MonXl.ActiveWindow.Close
'quitte Excel
MonXl.Quit
End Sub


Private Sub Command1_Click()
Dim MonXl As Variant
Dim retour As Integer
Dim MsgOulk As Variant
Dim myitem As Variant
Dim myrecipient As Variant
Dim destadresse As Variant
Dim message As Variant
'retour = Shell("C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto:dtmdp@wanadoo.fr?subject=mon sujet&Body=" & Text1.Text, vbHide)
Set MsgOulk = CreateObject("Outlook.Application")
Set message = MsgOulk.CreateItem(olMailItem)
message.Recipients.Add ("FR1226")
message.AddressList.AddressEntries(1).Address = ""
Debug.Print message.Recipients(1)
Debug.Print message.Recipients(1).AddressEntry.Address

message.Name = "dtmdp"
message.Subject = "toto"
message.Send


Set MonXl = New Excel.Application 'Ceci initialise la variable et charge Excel en arrière plan
MonXl.Visible = True 'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
'Ouverture d'un Classeur Existant
MonXl.Workbooks.Open FileName:="C:\Documents and Settings\Administrateur\Mes documents\Classeur1.xls"
MonXl.Workbooks.Add 'Ajoute un nouveau classeur
MonXl.Range("A1").Value = "XY" 'Envoie le contenu des textboxes dans les cellules
MonXl.Range("A2").Value = "ZT"
MonXl.Range("A3").Value = "RT"
If MonXl.Range("A3").Value <> "" Then Beep
MonXl.Range("A1:A3").Select 'Assure la sélection des trois cellules
'MonXl.Charts.Add 'Ajoute un graphique au classeur courant en s'inpirant des données sélectionnées
'MonXl.ActiveChart.ChartType = XL3DPie 'Transforme le graphique en Secteur 3D
'MonXl.ActiveWorkbook.Close False 'Ferme le classeur sans enregistrer
'MonXl.Quit 'Quitte Excel
End Sub
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
19 févr. 2004 à 13:29
oui mai mes contrinte de travaille sont VB5 et Excel et rien d'autre
donc sa limite
cs_Belial Messages postés 13 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 23 février 2004
19 févr. 2004 à 12:52
c bien et suis d'accord avec Multiprise, vaut mieux être prudent et utiliser l'objet Excel. (ça a tout de même tendance a bugger rapidement cet objet.)

sinon pour changer de feuille, il suffit de remplacer :

Set sheet = exlapp.ActiveWorkbook.ActiveSheet
par :
Set sheet = exldoc.Worksheets("nom de la feuille")
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
19 févr. 2004 à 12:29
'Lut

Il y a déjà des codes dans ce style sur le site ;)

tu selectionnes ta feuille comme ca :

exldoc.worksheets(2).Select

une plage :

exldox.range(cells(1,1),cells(5,5)).select ' A1 E5

ou

exldox.range("A1","E5").select

....

@++

BasicInstinct

PS: Gaffe aux fautes d'orthographes svp
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
19 févr. 2004 à 08:27
merci pour le consèle de plus ci tu pouvait me dire coment on fait pour changer de feuil sa serai simpa merci
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
19 févr. 2004 à 01:51
C'est pas mal pour un début de programme mais si je peux me permettre un avis, il vaudrait mieux utiliser l'objet excel s'il est déjà en cours d'exécution ou au moins le tester avec:
'
On Error resume next
Set exlapp = getobject(,"excel.application")
Si Excel n'est pas en cours d'utilisation on cré l'ojet
if err.number <>0 then Set exlapp = CreateObject("excel.application")
err.clear
'
De plus il est conseillé de déclarer en liaison précoce:
les accès sont plus rapides et surtout, l'éditeur VB te proposera les
propriétés et les méthodes de l'objet.
'
Dim exlapp As Excel.Application

'
Enfin pour terminer, il serait bon, et même fortement conseillé de libérer en fin de procédure, le ou les objets préalablement créés.
merci pour la mémoire.
'
set sheet = nothing
set exldoc =nothing
set exlapp = nothing


A Tchao Oxilat et bon pianotage.
Rejoignez-nous