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 :

Utilisation d'ADO pour récupérer des données des cellules biens définies et non une plage de cellules [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Utilisation d'ADO pour récupérer des données des cellules biens définies et non une plage de cellules
    Bonjour à tous!

    Besoin d'aide svp !!!!!

    Je dois faire une maintenance d'un fichier excel qui utilise cette fameuse fonction GetValueWithADO pour récupérer des données dans des fichiers excels fermés

    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
     
    Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
    'renvoie la valeur de la cellule Cell de la feuille Feuille
    'du classeur fermé Classeur
    Dim RcdSet As Object
    Dim strConn As String
    Dim strCmd As String
    Dim dummyBase As Range
     
      'prépare une "base de données" bidon pour la clause SELECT
      '(une entête fictive et une ligne de données)
      Set dummyBase = Cell.Resize(2)
     
      'prépare les commandes ADO et SQL
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & Classeur & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
      strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
     
      'crée l'objet Recordset
      Set RcdSet = CreateObject("ADODB.Recordset")
     
      'va chercher l'info
      RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
     
      'et la renvoie
      GetValueWithADO = Application.Clean(RcdSet(0))
     
      'autre syntaxe possible
    '  GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))
     
      'nettoyage
      Set RcdSet = Nothing
    End Function
    Après avoir étudié le code, la chaine de requête SELECT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
    prend l'addresse d'une plage de 2 cellules parce qu'on a affecté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set dummyBase = Cell.Resize(2)
    Or moi, je dois récupérer juste une cellule bien défini pour chaque fichier et non une plage parce que j'ai analysé que parfois une cellule non renseigné dans une plage entraîne des falsifications des données.

    J'ai déjà essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCmd = "SELECT * FROM [" & Feuille & "$" & Cell.Address(0, 0) & "]"
    mais me renvoie une erreur
    Je croyais que c'était une erreur de syntaxe, alors j'ai modifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCmd = "SELECT * FROM [" & Feuille & "!" & Cell.Address(0, 0) & "]"
    mais me renvoie encore une erreur du genre "le moteur de la base de données ne peut pas trouver 'Formulaire!Q12' (feuille nommée Formulaire et Cellule à récupérer = Q12)

    Je vous demande alors si c'est possible de récupérer une seule cellule en donnant son addresse via la chaine strCmd si oui, pourriez-vous svp m'aider à trouver le bon syntaxe ou existe-t-il d'autres façons pour récupérer via ADO la valeur d'une cellule d'un fichier fermé!!


    Merci dejà pour vos réponses

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Pour une seule cellule, avec "ExecuteExcel4Macro" :
    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
     
    Sub RecuperationDonnees()
     
        'adapter le chemin, le nom du classeur, le nom de la feuille et la cellule
        MsgBox RecupValeur("D:\Mon Dossier 1\Mon Dossier 2\", "Classeur1.xls", "Feuil1", "A1")
     
    End Sub
     
    Function RecupValeur(Chemin As String, _
                         NomClasseur As String, _
                         NomFeuille As String, _
                         Cellule As String)
     
        Dim Arg As String
     
                'vérifie si l'anti slash existe sinon le rajoute
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
                'si c'est une plage, affiche
                'un message et fin de procédure
        If InStr(Cellule, ":") Then
     
            MsgBox "Une seule cellule en argument", , "Cellule unique."
            Exit Function
     
        End If
                'ignore l'erreur si la plage est déjà en référence R1C1
        On Error Resume Next
                'transforme la référence en style R1C1
        Cellule = Range(Cellule).Address(, , xlR1C1)
     
                'construit l'argument
            Arg = "'" & Chemin & "[" & NomClasseur & "]" _
                  & NomFeuille & "'!" & Cellule
     
                'passe la valeur à la fonction
        RecupValeur = Application.ExecuteExcel4Macro(Arg)
     
    End Function
    Hervé.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 13
    Points : 11
    Points
    11
    Par défaut ça marche !!
    ExecuteExcel4Macro fonctionne très bien !!!
    Mille merci Hervé!

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, avec retard, mais bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Function ExtraireValeur(ByVal Dossier As String, ByVal fichier As String, _
                                    ByVal feuille As String, ByVal Cellule As String)
    Dim argument As String
        Dossier = Replace(Dossier, "'", "''")
        fichier = Replace(fichier, "'", "''")
        feuille = Replace(feuille, "'", "''")
        argument = "'" & Dossier & "[" & fichier & "]" & feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
        ExtraireValeur = ExecuteExcel4Macro(argument)
    End Function

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/07/2013, 08h01
  2. ADO recordset récupérer et écrire des données
    Par sab_info dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/01/2013, 11h04
  3. Problème d'utilisation de uiwait pour récupérer des données
    Par gtitou12 dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 06/01/2011, 11h36
  4. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 15h17

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