begin process at 2012 05 27 20:22:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > LECTURE D'UN FICHIER EXCEL EN VB

LECTURE D'UN FICHIER EXCEL EN VB


 Information sur la source

Note :
4 / 10 - par 1 personne
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Débutant Date de création :18/02/2004 Date de mise à jour :19/02/2004 09:42:41 Vu :19 646

Auteur : Oxilat

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Lecture d'un fichier Excel en VB

Source

  • Private Sub Command1_Click()
  • Dim sheet As Object
  • Dim exldoc As Object
  • Dim exlapp As Object
  • Dim i As Integer
  • Dim j As Integer
  • Set exlapp = CreateObject("excel.application")
  • Set exldoc = exlapp.workbooks.Open("C:\temp\3.save")
  • Set sheet = exlapp.ActiveWorkbook.ActiveSheet
  • sheet.Cells(1, 1).Value = 5 '.FormulaR1C1 = "=R[-1]C" 'écrire ds formule
  • Text1.Text = sheet.Application.ActiveSheet.Cells(2, 1).Value 'lie la celule
  • Text2.Text = sheet.Application.ActiveSheet.Cells(2, 1).FormulaR1C1 ' lie formule
  • exlapp.workbooks.Close
  • Set sheet = Nothing
  • Set exldoc = Nothing
  • Set exlapp = Nothing
  • End Sub
Private Sub Command1_Click()

Dim sheet As Object
Dim exldoc As Object
Dim exlapp As Object
Dim i As Integer
Dim j As Integer

    Set exlapp = CreateObject("excel.application")
    Set exldoc = exlapp.workbooks.Open("C:\temp\3.save")
    Set sheet = exlapp.ActiveWorkbook.ActiveSheet
    sheet.Cells(1, 1).Value = 5 '.FormulaR1C1 = "=R[-1]C" 'écrire ds formule

    Text1.Text = sheet.Application.ActiveSheet.Cells(2, 1).Value 'lie la celule
    Text2.Text = sheet.Application.ActiveSheet.Cells(2, 1).FormulaR1C1 ' lie formule
    exlapp.workbooks.Close
    
Set sheet = Nothing
Set exldoc = Nothing
Set exlapp = Nothing

End Sub



 Sources de la même categorie

ECLATER UN CLASSEUR EXCEL EN AUTANT DE FICHIERS QUE DE FEUIL... par GMY
Source avec Zip Source avec une capture Source .NET (Dotnet) MAGIC FILE NAME : RENOMMEZ VOS FICHIERS AUTOMAGIQUEMENT ! par Erudix
Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa

Commentaires et avis

Commentaire de Multiprise le 19/02/2004 01:51:28

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.


Commentaire de Oxilat le 19/02/2004 08:27:09

merci pour le consèle de plus ci tu pouvait me dire coment on fait pour changer de feuil sa serai simpa merci

Commentaire de BasicInstinct le 19/02/2004 12:29:04

'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

Commentaire de Belial le 19/02/2004 12:52:16

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")

Commentaire de Oxilat le 19/02/2004 13:29:28

oui mai mes contrinte   de travaille sont  VB5 et Excel et rien d'autre
donc sa limite

Commentaire de Multiprise le 20/02/2004 02:29:46

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


Commentaire de Oxilat le 20/02/2004 09:50:21

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

Commentaire de Multiprise le 21/02/2004 02:28:37

    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.

Commentaire de RcrivelliNET le 23/02/2004 03:01:43

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 ?

Commentaire de Oxilat le 24/02/2004 09:12:02

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

Commentaire de Oxilat le 04/03/2004 09:06:28

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

Commentaire de nihaoma le 09/02/2005 16:52:30

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

Commentaire de Galactus13 le 01/12/2008 02:39:08

Voila qui entre dans mes futur demandes ! Merci - 10/10 en explication !
pour tout le monde !

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales