[Déplacé VB6 -> .NET]Activation d'un classeur Excel avec Visual Basic 2010 Edito [Résolu]

Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
- - Dernière réponse : hflo
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
- 16 sept. 2011 à 19:00
Bonjour à vous!

Je dévellope une petite application sous VB6 pour envoyer des informations dans un classeur Excel.
Pour cela j'ai créé une Form avec un Textbox et un Bouton (rien de plus basic).
Quand on actionne sur le Bouton les informations sont écrit dans une cellule du classeur.

Mon problème ce trouve on moment où il faut écrire ses données. En effet quand on agit sur le Bouton il ne doit pas créer un classeur Excel ni même en ouvrir un. En rélité cette Form et directement chargée grâce à un bouton dans le dit classeur (avec Shell). Je veux donc juste écrire dans le classeur qui est déjà ouvert (ça me parraisais simple!).

Pour cela j'ai pensé à activer le classeur (avec AppActivate) et écrire tout bêtement dedans (J'ai essayé avec SendKeys mais il me marque: "SendKeys est un type et ne peut pas être utilisé en tant qu'expression."). Ensuite j'ai essayé de trouver une fonction qui me permet d'activer le classeur comme dans VBA mais sans succès.

Bon voici mon code (il tient très peu de place):

Imports Microsoft.Office.Interop.Excel
Public Class frmTest
Private Sub butEnvoyer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butEnvoyer.Click
Dim Valeur As String
AppActivate("Microsoft Excel - Essai")
Valeur = txtValeur.Text
SendKeys(Valeur)
End Sub
End Class

Alors si vous avez quelques idées ou piste je suis preneur!!! :D

PS: Ne me demander pourquoi j'utilise pas tout simplement une Userform svp :)
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Qu'as-tu trouvé comme exemple ?
Je suppose avec CreateObject ?
Si Excel est déjà ouvert ===>> utilise GetObject !
Et Lis donc CECI de MSDN
Et on ne pilote pas à coups de SendKeys , NON !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 184 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,

Ce que tu cherches à faire s'appelle "piloter Excel".

Et les exemples à ce sujet ne manquent pas sur ce forum (ils sont même foison).
Utilise s'il te plait le moteur de recherche de ce site.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
0
Merci
re bonjour,

hum, je vous remercie pour l'infos, mais tous les sujets que j'ai trouvé parter toujours du principe qu'Excel n'était pas ouvert! Et après avoir cherché pendant une journée sur internet, je me suis dit pourquoi pas demander. Car honnêtement je ne sais pas du tout comment piloter Excel!

Bon j'ai finalement réussi à envoyé les données de ma textbox dans une cellule avec: SendKeys.SendWait(Valeur + "{Enter}").
Je réussi aussi à cibler celle-ci grâce à VBA.

Maintenant je cherche à lire une valeur dans une cellule dont je connais la position. Il me manque juste la fonction à écrire!
Alors si vous pouviez me mettre sur l'avoir je vous en serez reconnaisssant!
Commenter la réponse de hflo
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
0
Merci
Bonjour,
Merci pour GetObject, cette fonction a l'air très pratique! Euh un exemple pour?

Par contre pourquoi ne pas utiliser les SendKeys?
Commenter la réponse de hflo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Euh un exemple pour


Tu rigoles ou quoi ? Tu en as un exemple dans le lien MSDN !
Si tu veux dire : pour ce qui suit ce getobject ===>> exactement ce qui suivait dans les exemples de pilotage que tu dis avoir trouvés avec CreateObject !

Par contre pourquoi ne pas utiliser les SendKeys?

parce que ce n'est plus du pilotage, mais de la simulation de touches !
Pilotage veut dire : une fois l'objet/appli-concernée défini et obtenu, faire exactement (VBA compris) comme si on s'y trouvait "plongé". Cela implique que tes connaissances en VBA/Excel sont bonnes.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
0
Merci
Hum en faite c'est ta première question que j'ai pas trops saisi! Désolé.
Hum d'accord j'ai compris la subtilité du pilotage. Bon après mes connaissances en VBA comme en VB sont toutes fraiches!! .
Commenter la réponse de hflo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bon après mes connaissances en VBA comme en VB sont toutes fraiches!!

Mais ... === >> Il va te falloir perfectionner LES DEUX !
Tout "pilotage" est si non, totalement Exclu (cela va de soi !)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
0
Merci
Lol c'est ce que je fais depuis maintenant 5 mois. Avec en prime les mals de crane.
Commenter la réponse de hflo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Je te conseille alors d'apprendre d'abord à faire ce que tu veux faire dans Excel, à partir du VBA de Excel (donc pas "en pilotage").
Une fois ceci réglé, ce sera un jeu d'enfant de le faire en "pilotage"
Tu as pour cela, je te le rappelle, une section VBA dans ce forum.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
jeudi 15 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
0
Merci
Et bien merci pour tous tes conseils ils m'ont vraiment aidé. . Bon je pense qu'avec le projet que je développe sous VBA, je progresserai bien!!!

Bon voilà les quelques lignes de codes que j'ai développé grâce à ton aide! (Bon c'est vraiment des actions basiques, mais je préférais partir sur de bonne base avant de continuer mon projet)
Si t'as des remarque n'hésite pas!!!

---------------------------------------------------------------------------------------------
Ici je demande au programme d'écrire dans la cellule B1 la valeur que j'écris dans un textbox

Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop

Public Class frmtest
Private sub butEcrire_click (...)
Dim valeur As String
Dim XlApp As Application
Dim Classeur As Workbook
Dim Continu_cells As Range

XlApp = CType(GetObject(, "Excel.Application")
Classeur = CType(GetObject("C:\Essai\Essai.xlsm")
Valeur = txtValeur.Text
contenu_cells = CType(classeur.worksheets.Application.Cells(1,"B"), Range)
contenu_cell.FormulaR1C1 = valeur
end
end sub

---------------------------------------------------------------------------------
Ensuite je voulais lire une valeur dans la cellule B1 et la mettre dans un label

Private sub butLecture_Click(...)

Dim XlApp As Application
Dim Classeur As Workbook
Dim Continu_cells As Range
Dim Lue As String

XlApp = CType(GetObject(, "Excel.Application")
Classeur = CType(GetObject("C:\Essai\Essai.xlsm")
contenu_cell = CType(classeur.worksheets.Application.Cells(1,"B"), Range)
lue = Cstr(contenu_cells.value)
lblLecture.text = Lue
end
end sub

----------------------------------------------------------------------------------
Finalement je voulais finir par changer de feuille dans mon classeur

Private sub butChange_Click(...)

Dim XlApp As Application
Dim Classeur As Workbook
Dim Feuille As WorkSheet
Dim Continu_cells As Range

XlApp = CType(GetObject(, "Excel.Application")
Classeur = CType(GetObject("C:\Essai\Essai.xlsm")
Feuille = CType(Classeur.Worksheet.Application.Sheet("Feuil2"), Worksheet)
Feuille.Activate()
end
end sub

end class
Commenter la réponse de hflo