Pb MAJ fichier Excel en mode lecture fichier fermé

Résolu
ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012 - 2 avril 2012 à 11:31
ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012 - 3 avril 2012 à 15:16
Bonjour,

Étant en train de développer une application VBA sur Excel 2007, je rencontre un problème lorsque je veux analyser un document Excel (contenant un tableau).
J'utilise la méthode de lecture de fichier Excel fermé: on utilise un objet ADO faisant intermédiaire entre l'application et le fichier Excel considéré comme base de donnée.

En effet je charge dans un recordset le contenu du tableau contenu dans le fichier excel avec le code suivant:

Sub RequeteClasseurFerme_Excel()
        
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    Set Rst = New ADODB.Recordset
    Dim Rst1 As ADODB.Recordset
    Set Rst1 = New ADODB.Recordset
    Dim tableauLTR() As ltrObjectif
    
    'Définit le classeur fermé servant de base de données
    Fichier = "P:\ltrsample2.xlsx"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "Feuil1"
    
    Set Cn = New ADODB.Connection
    
    '--- Connexion ---
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
    End With
    '-----------------
    'On définit la requête ...
    '
    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Rst.Open "SELECT * FROM [" & NomFeuille & "$]", Cn, adOpenDynamic, adLockOptimistic



Lorsque j'exécute ce code une première fois, tout se passe bien, à savoir que je lis bien le contenu du recordset.
Maintenant j'apporte des modifications manuelles (je vais dans le fichier excel modifier les informations à la main)au fichier et le sauve. Lorsque j'exécute une nouvelle fois ce code, le contenu de mon recodset correspond au fichier non modifié. En clair: les modifications du fichier ne sont pas prises en compte.

une idée d'où cela pourrait provenir ?

Je vous remercie d'avance

Thomas

3 réponses

ThomasFalguieres Messages postés 36 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 11 juillet 2012
3 avril 2012 à 15:16
Bonjour,

Désolé pour le retard.

J'ai finalement réussi à trouver pourquoi je n'avais pas de MAJ du fichier. Je fermais bien la connexion avec "set cn Nothing" mais j'avais oublié de détruire en même temps le recordset en écrivant "Set Rst Nothing". Du coup il restait plein en mémoire lors de la première exécution et me ressortait ce qu'il avait enregistré lors d'une seconde exécution.

Du coup votre idée de vider Cn était la bonne idée mais appliquée sur le recordset

Merci beaucoup de m'avoir aidé

Thomas
3
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
3 avril 2012 à 07:26
bonjour
on dirait une histoire de focus sur le fichier que tu as modifié.
il m'arrive souvent qu'aprés avoir lu un ficher dans un
repertoire je ne puisse plus renomé etc ce repertoire...
cependant aprés m 'etre ocupé d'un autre fichier, le
répertoire en question c'est libéré ??

peut etre fermer ?? par code le fichier avant de l'ouvrir??

@+JP
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
3 avril 2012 à 07:31
bonjour
encor moi

Set Cn = New ADODB.Connection


est ce que Cn pourait etre en cause? vider l'Objet Cn ?
ou autre Objet ?
@+JP
0
Rejoignez-nous