IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro qui ne fonctionne plus sur 2010


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Macro qui ne fonctionne plus sur 2010
    Bonjour à tous,

    J'ai trouvé sur le net une macro qui me permet de lire une cellule d'un classeur fermé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Function LireCellule_ClasseurFerme( _
            Chemin As String, _
            Fichier As String, _
            Feuille As String, _
            Cellule As Variant) As Variant
     
     
        Application.Volatile
     
        Dim Source As Object, Rst As Object, ADOCommand As Object
        Dim Cible As String
     
        Feuille = Feuille & "$"
        Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
            Cellule.Address(0, 0, xlA1, 0)
     
        Set Source = CreateObject("ADODB.Connection")
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Chemin & "\" & Fichier & _
            ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = CreateObject("ADODB.Command")
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
        End With
     
        Set Rst = CreateObject("ADODB.Recordset")
        '1 = adOpenKeyset, 3 = adLockOptimistic
        Rst.Open ADOCommand, , 1, 3
        Set Rst = Source.Execute("[" & Feuille & Cible & "]")
     
        LireCellule_ClasseurFerme = Rst(0).Value
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Function
    Cette fonction marche très bien sur des fichiers créés en excel 2003, mais malheureusement pas pour des fichiers créés en excel 2010 (il faut alors que le classeur soit ouvert, la fonction perd donc tout son intérêt)...

    N'y connaissant rien du tout en VBA, je viens vous solliciter pour savoir si l'un d'entre vous aurait une solution à mon problème (j'imagine qu'il faut faire quelques petites modifs à ce code, mais je ne sais pas quoi...).

    Un grand merci pour votre aide !!!! Et bon week-end !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Charlie3

    Essaye ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    ' Fonction ADODB pour 2010
    Function LireCellule_ClasseurFerme( _
            Chemin As String, _
            Fichier As String, _
            Feuille As String, _
            Cellule As Variant) As Variant
     
        Application.Volatile
     
        Dim Source As Object, Rst As Object, ADOCommand As Object
        Dim Cible As String
     
        Feuille = Feuille & "$"
        Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
            Cellule.Address(0, 0, xlA1, 0)
     
        Set Source = CreateObject("ADODB.Connection")
          Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Chemin & "\" & Fichier & _
            ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
        Set ADOCommand = CreateObject("ADODB.Command")
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
        End With
     
        Set Rst = CreateObject("ADODB.Recordset")
        '1 = adOpenKeyset, 3 = adLockOptimistic
        Rst.Open ADOCommand, , 1, 3
        Set Rst = Source.Execute("[" & Feuille & Cible & "]")
     
        LireCellule_ClasseurFerme = Rst(0).Value
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Function
    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut BrunoM.45, merci de ton aide.

    J'ai essayé avec tes modifs, mais j'ai toujours le même problème (à savoir #VALUE! si le classeur xlsx n'est pas ouvert) ...

    Aurais-tu une autre suggestion ?

    Bon we !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re,

    Perso j'ai testé et ça fonctionne

    Pourrais-tu nous joindre tes 2 fichiers (sans données confidentielles) ?

    A+

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ok, j'ai fait un test, et voici le problème :

    Ma cellule contient par exemple la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LireCellule_ClasseurFerme(A1;A3;A2;INDIRECT(C2))
    La fonction "INDIRECT" fait effectivement buguer la fonction, puisque si je ne l'utilise pas, la fonction marche même si le classeur est fermé.

    Néanmoins la fonction INDIRECT ne pose pas de problème si le classeur est fermé lorsque celui-ci est en xls et pas en xlsx...

    J'utilisais la fonction INDIRECT pour éviter des problèmes de circularité, mais c'était inutile. Problème réglé donc !

    Merci encore Bruno !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro qui ne fonctionne pas sur un ordinateur
    Par Toug19 dans le forum Excel
    Réponses: 9
    Dernier message: 07/07/2015, 14h22
  2. [XL-2003] Macro qui ne Fonctionne PAS sur Excel 2003 mais Fonctionne sur Excel 2010
    Par CedResma34 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/01/2014, 10h05
  3. [WD-2003] Macro qui ne fonctionne plus depuis changement OS
    Par kinto dans le forum VBA Word
    Réponses: 2
    Dernier message: 16/11/2012, 15h06
  4. Réponses: 8
    Dernier message: 29/09/2008, 20h23
  5. DLL qui ne fonctionne plus sur un ordinateur
    Par Mikmacer dans le forum C++
    Réponses: 1
    Dernier message: 22/07/2008, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo