[VB6 et Excel] Probleme de séléction de feuille

cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 juillet 2007 - 15 juin 2007 à 12:20
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 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


'________________________________________________________________________


En vous remerciant par avance de vos reponses qui me seront fortes utiles.

Brebiou




 

16 réponses

cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 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 

Fermer_Excel

End Sub

Et dans cette case il y a le numero "91"...
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
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 />
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
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

End Function

'________________________________________________________________________

Public Function Fermer_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
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 />
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
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

End Function

'________________________________________________________________________

Public Function Fermer_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
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 />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
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

End Function

'________________________________________________________________________

Public Function Fermer_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

End Function

'________________________________________________________________________

 Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String

    Set WSExcel = WBExcel.Worksheets("Feuille ")
    Extraire = WSExcel.Cells(Col, Rangee)

End Function

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 juin 2007 à 12:39
inverse simplement tes lignes :

    Set WSExcel = WBExcel.ActiveSheet 'Récupération de la feuille
     
    Sheets(Feuille).Select  

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 juin 2007 à 12:40
oula, y'a eu des ajouts depuis que 'jai affiché la page ^^

 Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String

    Set WSExcel = WBExcel.Worksheets(Feuille)
    Extraire = WSExcel.Cells(Col, Rangee)

End Function

pas de guillemets là :
WBExcel.Worksheets("Feuille ")

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
15 juin 2007 à 12:42
Oui bien vu
 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 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

merci ;)
0
cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 juillet 2007
15 juin 2007 à 16:52
Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String




    Set WSExcel = WBExcel.Worksheets("Feuille ") Erreur
    Extraire = WSExcel.Cells(Col, Rangee)



End Function

Il me dit :"Variable objet ou variable bloc With non définie" (que je mette les guillemets ou pas autour de Feuille)

Meme ta technique d'inverser les lignes ne fonctionne pas, parce qu'il n'a pas de feuille de chargée et je lui demande de changer donc...

Arf c'est assez embetant...Je sais plus quoi faire...

En tout cas merci de votre aide
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 juillet 2007
19 juin 2007 à 17:12
Aie ca ne change pas, j'ai bien tout verifié, aucune erreur de frappe, et toujours le meme message...

J'accepte tout autre suggestion merci ;)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
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...

MPi
0
cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 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



'________________________________________________________________________



Public Function Ouvrir_Excel(CheminFichier As String)
   
'Ouverture de l'application
    Set appExcel = CreateObject("Excel.Application")
    appExcel.Workbooks.Open CheminFichier



End Function



'________________________________________________________________________



Public Function Fermer_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



End Function



'________________________________________________________________________


 Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String
 
    Set wsExcel = wbExcel.Worksheets(Feuille)
    Extraire = wsExcel.Cells(Col, Rangee)



End Function



'________________________________________________________________________



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?

Voila merci de votre aide pasée et future!
0
cs_Brebiou Messages postés 8 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 18 juillet 2007
18 juil. 2007 à 15:04
Bon je vois que mon absence m'a été fatal...





Tant pis et bonne continuation!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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

End Function

'________________________________________________________________________

Public Function Fermer_Excel()

    '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

End Function

'________________________________________________________________________

 Public Function Extraire(Col As Long, Rangee As Long, Feuille As String) As String
 
    Set wsExcel = wbExcel.Sheets(Feuille)

    Extraire = wsExcel.Cells(Col, Rangee).Value
    Set wsExcel = Nothing
End Function

'________________________________________________________________________

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>

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
Rejoignez-nous