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

Signaler
Messages postés
8
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
18 juillet 2007
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
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

Messages postés
8
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
18 juillet 2007

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"...
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
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 />
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
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 />
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
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 />
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
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 />
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
inverse simplement tes lignes :

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

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
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
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Oui bien vu
 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
8
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
18 juillet 2007

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

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
8
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
18 juillet 2007

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 ;)
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
8
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
18 juillet 2007

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

Bon je vois que mon absence m'a été fatal...





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