cs_Brebiou
Messages postés8Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention18 juillet 2007
-
15 juin 2007 à 12:20
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
18 juil. 2007 à 15:38
Bonjour a tous,
Voila je realise actuellement une application et j'ai un souciavec Excel...
Je veux aller chercher une valeur dans une cellule, pour cela j'ouvre Excel, je pioche dans la cellule et je referme. Tout cela marchai bien jusqu'a il y a peu, quand il a fallu gerer plusieurs feuilles Excel...
J'utilise : Sheets("Ma feuille").Select mais cela n'a aucun effet je ne recupere rien du tout...
Après de longues recherche autant sur le Net qu'ailleurs(MSDN n'offrant rien de ce coté la malheureusement) , je me suis résigné a demander de l'aide...
Je vous joins mon code:
Option Explicit
Public Function Ouvrir_Excel(CheminFichier As String)
'Déclaration des variables
Dim appExcel As excel.Application 'Application Excel
Dim WBExcel As excel.Workbook 'Classeur Excel
Dim WSExcel As excel.Worksheet 'Feuille Excel
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open CheminFichier
'Récupération du classeur
'Set wbExcel = appExcel.ActiveWorkbook
'Récupération de la feuille
'Set wsExcel = wbExcel.ActiveSheet
End Function
Public Function Fermer_Excel()
'Déclaration des variables
Dim appExcel As excel.Application 'Application Excel
Dim WBExcel As excel.Workbook 'Classeur Excel
Dim WSExcel As excel.Worksheet 'Feuille Excel
Set appExcel = GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par Ouvrir_Excel)
Set WBExcel = appExcel.ActiveWorkbook 'Récupération du classeur
Set WSExcel = WBExcel.ActiveSheet 'Récupération de la feuille
WBExcel.Save 'Sauvegarde du classeur Excel
WBExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation de la mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on reutilise ces fonctions)
Set WSExcel = Nothing
Set WBExcel = Nothing
Set appExcel = Nothing
End Function
Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String
'Déclaration des variables
Dim appExcel As excel.Application 'Application Excel
Dim WBExcel As excel.Workbook 'Classeur Excel
Dim WSExcel As excel.Worksheet 'Feuille Excel
Set appExcel = GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par Ouvrir_Excel)
Set WBExcel = appExcel.ActiveWorkbook 'Récupération du classeur
Set WSExcel = WBExcel.ActiveSheet 'Récupération de la feuille
Sheets(Feuille).Select
Extraire = WSExcel.Cells(Col, Rangee)
End Function
cs_Brebiou
Messages postés8Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention18 juillet 2007 15 juin 2007 à 12:27
Oups j'ai oublié de vous donner le reste:
Private Sub Command1_Click()
Ouvrir_Excel (App.Path + "\Test.xls")
Label3.Caption = Extraire(31, 222, "Feuille Semelle")
If Label3 "" Then Label3 "Ca marche pooooo -_-" 'Petit message histoire de voir si ca a echoué ou pas
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 15 juin 2007 à 12:29
Salut,
tu peux faire comme ça :
Set XlsFeuil1 = WBExcel.Worksheets("Ma feuille")
A partir de là, tu peux manipuler ce que tu veux sur cette feuille
Fiko ;-)
La reponse vous convient pensez > Accepter < <hr />
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 15 juin 2007 à 12:34
Option Explicit
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private WBExcel As excel.Workbook 'Classeur Excel
Private WSExcel As excel.Worksheet 'Feuille Excel
Public Function Ouvrir_Excel(CheminFichier As String)
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open CheminFichier
WBExcel.Save 'Sauvegarde du classeur Excel
WBExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation de la mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on reutilise ces fonctions)
Set WSExcel = Nothing
Set WBExcel = Nothing
Set appExcel = Nothing
End Function
Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String
'Déclaration des variables
Dim appExcel As excel.Application 'Application Excel
Dim WBExcel As excel.Workbook 'Classeur Excel
Dim WSExcel As excel.Worksheet 'Feuille Excel
Set appExcel = GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par Ouvrir_Excel)
Set WBExcel = appExcel.ActiveWorkbook 'Récupération du classeur
Set WSExcel = WBExcel.Worksheets("Feuille ")
Extraire = WSExcel.Cells(Col, Rangee)
End Function
Fiko ;-)
La reponse vous convient pensez > Accepter < <hr />
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 15 juin 2007 à 12:35
J'ai oublié un truc :
Option Explicit
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private WBExcel As excel.Workbook 'Classeur Excel
Private WSExcel As excel.Worksheet 'Feuille Excel
Public Function Ouvrir_Excel(CheminFichier As String)
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open CheminFichier
WBExcel.Save 'Sauvegarde du classeur Excel
WBExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation de la mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on reutilise ces fonctions)
Set WSExcel = Nothing
Set WBExcel = Nothing
Set appExcel = Nothing
End Function
Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String
Set appExcel = GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par Ouvrir_Excel)
Set WBExcel = appExcel.ActiveWorkbook 'Récupération du classeur
Set WSExcel = WBExcel.Worksheets("Feuille ")
Extraire = WSExcel.Cells(Col, Rangee)
End Function
Fiko ;-)
La reponse vous convient pensez > Accepter < <hr />
Vous n’avez pas trouvé la réponse que vous recherchez ?
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 15 juin 2007 à 12:37
Vraiment désolé :
Option Explicit
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private WBExcel As excel.Workbook 'Classeur Excel
Private WSExcel As excel.Worksheet 'Feuille Excel
Public Function Ouvrir_Excel(CheminFichier As String)
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open CheminFichier
WBExcel.Save 'Sauvegarde du classeur Excel
WBExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation de la mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on reutilise ces fonctions)
Set WSExcel = Nothing
Set WBExcel = Nothing
Set appExcel = Nothing
cs_Brebiou
Messages postés8Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention18 juillet 2007 15 juin 2007 à 16:40
Oui mais non parce que Feuille est ma variable pour la fonction, si je met les "" il vas me prendre ca comme du texte non?
Public Function
Extraire(Col As Long, Rangee As Long, FeuilleAs String) As String
Sinon oui fiko j'avais oublié de preciser que je pouvais mettre
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private WBExcel As excel.Workbook 'Classeur Excel
Private WSExcel As excel.Worksheet 'Feuille Excel
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 15 juin 2007 à 17:02
Salut,
faut pas de guillemets..
Si t'as une erreur sans, c'est que le nom de ta feuille est mal orthographiée (attention aux espaces dans tes onglets, au début ou a la fin, c'est traitre et ça ne saute pas aux yeux)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 20 juin 2007 à 01:44
Où en est rendu ton code ?
Quels changements y as-tu apporté ?
Si je regarde ton premier post, le mot Excel est en minuscule donc tu n'as probablement pas créé de référence à Excel dans ton projet. Tu devrais donc déclarer tes objets Excel As Object plutôt que Excel.Application
Si tu crées une référence, utilise
Dim xlApp As New Excel.Application
Si tu ne crées pas de référence
Dim xlApp as Object
xlApp = CreateObject("Excel.Application")
Autre chose, tu déclarais plusieurs fois ces objets... ce n'est pas nécessaire. Ça risque juste de te causer des problèmes. En fait, ça dépend où tu les déclares et où tu les fermes...
cs_Brebiou
Messages postés8Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention18 juillet 2007 10 juil. 2007 à 17:26
Désolé de ne pas avoir donné de suite, j'ai eu des soucis avec Internet
Bref j'ai continuer a devlopper a coté, et donc la j'en reviens a ce probleme
Voila ou en est mon code (grace a vous )
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private wbExcel As excel.Workbook 'Classeur Excel
Private wsExcel As excel.Worksheet 'Feuille Excel
wbExcel.Save 'Sauvegarde du classeur Excel
wbExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation de la mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on reutilise ces fonctions)
Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Public Function Inscrire(Valeur As Variant, Col As Long, Rangee As Long, Feuille As Integer) As Boolean
Set appExcel = GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par Ouvrir_Excel)
Set wbExcel = appExcel.ActiveWorkbook 'Récupération du classeur
Set wsExcel = wbExcel.ActiveSheet 'Récupération de la feuille
wbExcel.ActiveSheet = Feuille
wsExcel.Cells(Col, Rangee) = Valeur
End Function
Donc toujours ce probleme de selection de feuille lorsque que je veux extraire ou inscrire une donnée dans le classeur (sachant que pour extraire je n'ai pas encore ecrit le code pour la selection de la feuille, je me concentre deja sur la fonction inscrire)
Je precise que ce code marche très bien lorsque j'ai une seule feuille a gérer, donc je me demandai si je pouvai tou faire sur des fichiers séparés et les groupé avant d'imprimer le rapport?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 18 juil. 2007 à 15:38
salut,
dans Extraire, ta feuille est déclarée en tant que String, alors que dans Inscrire, c'est de type Integer. Il faut que ce qoit de type String.
Voici une variante, je t'ai modifié un peu ton code, et mis 2 ou 3 commentaires :
'Déclaration des variables en globale
Private appExcel As excel.Application 'Application Excel
Private wbExcel As excel.Workbook 'Classeur Excel
Private wsExcel As excel.Worksheet 'Feuille
Excel
Public Function Ouvrir_Excel(CheminFichier As
String)
'Ouverture de l'application
'Set
appExcel = CreateObject("Excel.Application")
Set appExcel = New excel.Application 'c'est
mieux qu'un CreateObject
Set wbExcel = appExcel.Workbooks.Open CheminFichier
' cette ligne, au dessus, t'évitera de pointer dans chaque
fonction
'wbExcel.Save
'Sauvegarde du classeur Excel
'Inutile,
regarde la ligne suivante, le paramètre True ;)
wbExcel.Close True 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de
l'application Excel
'Désallocation de la
mémoire (ce qui evite de laisser le prossecus Excel encore actif
'dans le gestionnaires des taches, car cela pose problème si on
reutilise ces fonctions)
'Set wsExcel =
Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Public Function Inscrire(Valeur As Variant, Col As Long, Rangee As Long, Feuille As String) As Boolean
On Error GoTo Err_Handler
'Set appExcel =
GetObject(, "Excel.Application") 'Handler sur Excel (Préalablement ouvert par
Ouvrir_Excel)
' ... comme tu dis, déjà ouvert, pas
besoin de repointer vers l'appli
'Set
wbExcel = appExcel.ActiveWorkbook 'Récupération du
classeur
Set wsExcel = wbExcel.Sheets(Feuille) 'Récupération de la feuille
'wbExcel.ActiveSheet = Feuille
'ActiveSheet est en lecture seule, il te donne le nom de la
feuille _
sélectionnée, tu ne peux pas lui donner de
param
wsExcel.Cells(Col, Rangee) = Valeur
Set wsExcel = Nothing
Inscrire = True: Exit Function
Err_Handler
Set wsExcel = Nothing
Inscrire = False
End Function
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>