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 :

Lecture de champs d'une autre feuille :: Erreur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Par défaut Lecture de champs d'une autre feuille :: Erreur
    Bonjour,

    J'essaie de lire certains d'un classeur fermé avec le code suivant.

    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
     
        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
     
        'Adresse de la cellule contenant la donnée à récupérer
        'Cellule = "B4:B4"
          'Pour une plage de cellules, utilisez:
        Cellule = "G10:G15"
     
        Feuille = "Données$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = "C:\Documents and Settings\moi\Bureau\dossier\fichier.xls"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        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 & "]")
        Range("AO10").CopyFromRecordset Rst
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    Sa fonctionne très bien dans VBA, sa prend tout le contenu et la copie dans ma cellule AO10.

    Je veux pouvoir l'appeler via ma feuille excel, j'ai donc crée une fonction.

    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
     
    Private Function LireCellules()
        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
     
        'Adresse de la cellule contenant la donnée à récupérer
        'Cellule = "B4:B4"
          'Pour une plage de cellules, utilisez:
        Cellule = "G10:G15"
     
        Feuille = "Données$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = "C:\Documents and Settings\u3346\Bureau\Horaire Variable\Hor_Variable_JH_2010-05.xls"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        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 & "]")
        Range("AO10").CopyFromRecordset Rst
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
     
    End Function
    Le code est identique mais quand j'essaie de l'appeler en écrivant =LireCellule()

    Dans une cellule quelconque, sa me ressort l'erreur ::

    La méthode CopyFromRecordset de l'objet Range a échoué


    Quelqu'un aurait une idée du "pourquoi" ?

    Je vous remercit !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut JonathanMQ et le forum
    Je n'ai pas réellement chercher à lire tout ton code.
    Excel propose 2 types de macros : Sub() et Function()
    Si elles remplissaient les mêmes fonctions, pourquoi s'embêter à créer 2 types ?

    Function permet de réaliser une fonction au même titre que celles fournies dans la feuille de calcul : c'est à dire retourner une valeur. Elle ne sait pas agir, mais mais peut-être relancée à chaque recalcul de la feuille.

    Sub permet de réaliser un programme. Mais il faut déterminer comment la lancer.

    Tu ne manipules pas des données pour avoir un résultat, donc il te faut une macro Sub, et déterminer la manière dont tu vas la lancer.
    A+

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Par défaut
    Dans le fond vous avez ni lu le code, ni la question.

    Mais merci de votre "aide" ...

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour JonathanMQ,

    Peut-être serait-il intéressant de te poser la question de la pertinence de la réponse...

    Gorfael te donne les éléments permettant de comprendre pourquoi ça ne fonctionne pas.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    J'ajouterai qu'avant d'écrire :
    Dans le fond vous avez ni lu le code, ni la question.
    Mais merci de votre "aide" ...
    il faudrait peut-être relire vous-même votre question. Exemple :

    J'essaie de lire certains d'un classeur fermé avec le code suivant.
    Vous essayez de lire certains "quoi" ? Il faut qu'on le trouve en analysant votre code ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/02/2014, 15h34
  2. [XL-2003] Erreur code:copie de données non vides sur une autre feuille
    Par Razekiel_ dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/04/2013, 08h08
  3. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30
  4. afficher un champ d'une autre table, Help!
    Par chakan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2004, 23h20
  5. [CR] Afficher un champs lié à un champs d'une autre table
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/09/2003, 11h48

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