VB6 Excel

tapageur99 Messages postés 19 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 24 février 2009 - 21 févr. 2009 à 16:43
tapageur99 Messages postés 19 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 24 février 2009 - 21 févr. 2009 à 21:46
C'est peut être trop simple

En VB6, relié à un classeur Excel. J'extrais des données, je les
modifie, tout va bien.Dans une autre Form, je veux voir apparaître
les résultats. Avec Text1.Text = Rst.GetString, ça va pour les cellules
qui contiennent des données simples. Mais pour
une cellule qui contient le résultat d'une formule, ça ne fonctionne
pas.  Text1.Text = Rst(0).Value 
ne fonctionne pas non plus.

Il doit sûrement y avoir un moyen, mais comment?
Voici ce que je fais:

Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, feuille As String
    Dim Seul
     'Chemin complet du classeur fermé
    Fichier = "C:\DossierClient" & FmChoix.NomClient & ".xls"
     
   Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
  
   Cellule = "A84:A84"
    feuille = "Décl_C$"
    Set ADOCommand = New ADODB.Command
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & feuille & Cellule & "]"
    End With
     
  Set Rst = New ADODB.Recordset
   Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
      Set Rst = Source.Execute("[" & feuille & Cellule & "]")

   Text1.Text = Rst.GetString
   Rst.Close
   Set Rst = Nothing

Merci de votre aide

tapageur

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 févr. 2009 à 20:02
Salut
Un RecordSet ne s'utilise pas comme cela.
Après ceci :
   Set Rst = New ADODB.Recordset
   Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
il faut parcourrir le Recordset.
Un RecordSet est une sorte de tableau contenant plusieurs lignes et plusieurs colonnes
   With Rst
      If .RecordCount > 1 Then
         .MoveFirst
         Do While Not .EOF
            MsgBox .Fields(0).Value   ' (*)
            .MoveNext
         Loop
      End If
   End With
(*) Pas sûr que les colonnes, Fields, soient numérotées de 0 --> 1 ?

Ta syntaxe Set Rst = Source.Execute doit écraser le précédent Open --> Ligne à virer

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
tapageur99 Messages postés 19 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 24 février 2009
21 févr. 2009 à 21:46
Merci beaucoup Jack,

Mais ça ne réussi pas mieux. Dans les deux cas, ça n'affiche que les cellules qui contiennent des nombres insérés directement alors que rien ne s'affiche pour les cellules où les nombres proviennent d'une formule. Même si j'ai ajouté Application.Calculate dans mon code.

Je commence à désespérer, j'ai essayé toutes sortes de méthodes et rien à faire.
Au secours!

tapageur
0
Rejoignez-nous