Cellule excel vers VB 2005

Signaler
Messages postés
3
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
28 décembre 2008
-
Messages postés
3
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
28 décembre 2008
-
Bonjour,


Est-il possible de récupérer la cellule active de n'importe quel
classeur ouvert (actif) et de la stocker dans une variable a partir de VB 2005.


Et si oui pouvez vous me donner une piste


Merci

3 réponses

Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Salut,

Tu peux y parvenir avec l'exemple du code ci-dessous (je lance l'application Excel en étant invisible, je charge le fichier xls, je récupère la valeur d'une cellule et enfin je ferme Excel) :


<hr size= "2" width="100%" />






' Déclaration et initialisation d'une collection qui va contenir les Id des Processus Excel existants



Dim
 IdExcel As New System.Collections.Generic.List(Of String)

' Déclaration et Initialisation des variables
' Pour ouvrir un fichier excel
Dim oXL As New Object
Dim oBook As New Object
Dim oSheet As New Object

' Déclaration de la variable qui va contenir
' le contenu de la cellule du fichier excel
Dim var As String

' On parcoure tous les processus existants
For Each Proc As Process In Process.GetProcesses
     ' Si un processus "excel" existe
     If Proc.ProcessName  =  "excel"  Then
          ' On récupère son Id
          IdExcel.Add(Proc.Id)
     End If
Next

' Création de l'application Excel
oXL  =   CreateObject ("Excel.Application")
' Ouverture du fichier xls
oBook  =  oXL.Workbooks.Open( "D:\Test.xls" )
' On rajoute une feuille
oSheet  =  oBook.Worksheets( 1 )

' On récupère la valeur de la cellule
' 1° ligne, 1° colonne et on la
' stocke dans var
var  =  oSheet.Cells(11).Value

oXL.Quit()
oXL =   Nothing

' On parcoure les processus existants
For Each Proc As Process In Process.GetProcesses
     ' Si un processus "excel" existe
     If Proc.ProcessName  =  "excel"  Then
          ' On parcoure les Id des processus
          ' Existants avant l'ouverture du
          ' fichier xls
          For nb As Integer  =   0  To IdExcel.Count - 1
               ' Si l'un des Id du processus "excel"
               ' ne se trouve pas dans la liste
               ' il s'agit de celui qu'on a lancé
               If IdExcel.Contains(Proc.Id)  = False Then
                    ' On arrête immédiatement le processus
                    Proc.Kill()
               End If
          Next
     End If
Next



<hr size="2" width="100%" />




++

Fauve








<hr size="2" width="100%" />
Pensez : Réponse Acceptée 
Messages postés
3
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
28 décembre 2008

Effectivement ça fonctionne.

Ce n'est pas vraiment ça que je veux.
J'ai un fichier excel ouvert et dans ce fichier j'ai des codes articles. Mon application VB consiste a taper manuellement le code et ouvre le fichier associé à ce code (plan).

Je voudrait que l'opérateur sélectionne une cellule ou il y'a ce code et dans mon application vb j'ai un bouton "récupéré contenu cellule active"
sachant que les classeur excel porte différent nom et de même pour les feuilles.

Merci
Messages postés
3
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
28 décembre 2008

Voila j'ai réussi avec ce code la; le problème c'est que si j'ai plusieurs instance excel de lancer il me récupère la cellule active de l'instance lancer en 1er.
Si quelqu'un à une idée pour récupéré la cellule active dans n'importe quel classeur ouvert merci.

Dim appxls As Microsoft.Office.Interop.Excel.Application
    Dim workbook As Microsoft.Office.Interop.Excel.Workbook
    Dim sheet As Microsoft.Office.Interop.Excel.Workbook
    Dim var As String
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        appxls = GetObject(, "Excel.Application")
        workbook = appxls.ActiveWorkbook
        var = appxls.ActiveCell.Value
        MsgBox(var)
    End Sub