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 :

ADODB.Connection requête SQL sur fichier fermé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut ADODB.Connection requête SQL sur fichier fermé
    Bonjour,

    J'ai un petit soucis, je travaille en effet sur une macro qui permettrait d'extraire des information de fichiers Excel fermés à une place précise. La requête m'a été fait par une personne qui devait recensé des informations à une case précise sur plusieurs fichiers similaire d'un même répertoire assez régulièrement.
    Donc suite à des recherches, je me suis retourné vers ADODB que je ne vous cache pas, je maîtrise assez mal. On fournit à la fonction : adresse, nom de fichier, nom de feuille, cellule. Comme cela la fonction est plus flexible.

    Je ne vous cache pas que la méthode est très bien documenter pour les anciennes versions de Excel mais que pour 2013 j'ai eu du mal à faire fonctionner le code. Voici le code adapté à ma situation.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Function extractionValeurCelluleClasseurFerme(Adresse As String, NomWb As String, FeuilleCible As String, CelluleCible As String)
        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 = CelluleCible & ":" & CelluleCible
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = FeuilleCible & "$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
     
        If Not Right(Adresse, 1) = "/" And Not Right(Adresse, 1) = "\" Then 'Cette partie du code permet d'ajouter le / ou \ si non mis par l'utilisateur à la fin de l'adresse
            If InStr(1, Adresse, "\", 1) = 0 Then
                Adresse = Adresse & "/"
            Else
                Adresse = Adresse & "\"
            End If
        End If
     
        Fichier = Adresse & NomWb
     
        Set Source = New ADODB.Connection
        With Source
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
            .Open
        End With
     
        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 & "]")
        extractionValeurCelluleClasseurFerme = Rst.Fields(0).Value
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Function
    La fonction fonctionne correctement et est assez rapide. Par contre, elle ne fonctionne que sur des fichiers situer sur des arborescences Disque dur/Serveur (\\f-renoutet\... par exemple chez moi) alors que sur un fichier situé sur un Doc Center j'ai le message #Valeur. Hors dans mon entreprise, mes collègues travaillent beaucoup sur des Workspace et des Doc Center. Et je voulais savoir s'il était possible tout bonnement d'adapter la requête pour qu'elle fonctionne sur des fichiers archivés en Doc Center?

    Merci d'avance, et si cela n'existe pas, ce n'est pas grave c'était pour un soucis de flexibilité et faire profiter de la fonction à d'autres collègues qui aurait pu en avoir l'utilité.

    Si vous avez besoin de commentaires supplémentaires sur le code ou autres informations, n'hésitez pas à me questionner.

    Cordialement,

    DeathZarakai.

    P.S. : Merci à SilkyRoad pour son Tutoriel sur lequel je me suis aidé (lien)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    Désoler mais je me permet de remonter mon soucis car j'ai peur qu'il soit oublié dans les abysses de la page 2.

    Si ce que je demande est impossible ou mal explicité, faites le moi savoir.

    DeathZarakai.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    c'est quoi un DocCenter ? Peux-tu nous donner un exemple de chemin d'accès complet à un fichier ?

    si c'est un stockage en ligne ... il y a une authentification à faire ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    que tu sois en local ou en réseau ça ne change rien pour la connexion au fichier! ton code si il fonction en local il fonctionne en réseau.

    ce qu change c'est les droits utilisateur à ce serveur et de problème de latence qui génère de TimeOut .

    dans certains site il est préconisé d’effectuer une première connexion de test pour que les routeur est le temps d'appendre le parcours de IP!

    je ne l'ai jamais vérifier mai bon.

    peso je fais comme ça:

    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
     
    sub Test
     GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    set cn=OpenConnetion(GenereCSTRING)
    if TypeName(cn)="Nothing" then msgbox "Ko"
    end sub
     
    Public Function OpenConnetion(ConnecString)
    'Ouvre une connexion à  la base de données.
        set OpenConnetion = nothing
        On Error Resume Next
         Set Connexion = CreateObject("ADODB.Connection")
         Connexion.CommandTimeout = 500
        Connexion.Open ConnecString
    'ConnecString
        If Err = 0 Then
           set OpenConnetion= Connexion
        End If
    '    Debug.Print Err.Description
        Err.Clear
        On Error GoTo 0
     
    End Function
    Dernière modification par Invité ; 04/05/2016 à 13h30.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Par défaut
    Bonjour,

    C'est moi ou ce sujet revient sur le tapis toutes les semaines ces temps ci ?

    PS: si ça ne marche toujours pas, n'hésite pas à lire ce lien http://silkyroad.developpez.com/VBA/ClasseursFermes/

    Slooby

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    Citation Envoyé par Slooby Voir le message
    Bonjour,

    C'est moi ou ce sujet revient sur le tapis toutes les semaines ces temps ci ?

    PS: si ça ne marche toujours pas, n'hésite pas à lire ce lien http://silkyroad.developpez.com/VBA/ClasseursFermes/

    Slooby
    Si tu as lu mon message en entier je remercie ce tuto, qui est en grande partie obsolète pour excel 2010 et plus hélas. Non pas Obsolète besoin d'un coup de neuf on va dire, j'ai pas envie de salir le travail d'une personne qui m'a souvent sauver la vie.

    Je vais répondre aux questions :
    - chemin qui marche : \\f-renoutet\home4$\p079368\MyDocs\CAZALI\CAZA.xlsm
    - chemin qui ne marche pas : http://renault-workspace.share.renau...VRIL_2016.xlsm

    Pour répondre oui il y a un système de droits d'accès etc. Mais pour le coup j'ai les droits sur les 2 fichiers que je teste, le premier est sur mon pc dans un dossier qui se synchronise avec un serveur pour éviter les perte de données quand les employés font des bêtises. Et le second provient d'un DocCenter.

    - Pour répondre : un DocCenter et un serveur où l'ont peut stocker tout un tas de fichier pour les retrouver à distance et aussi et surtout les partagés. Par exemple, pendant mes études pour nos projets on utilisait un Google drive pour partager nos fichiers à distance, là c'est un peu pareil.

    - Je précise aussi que j'ai lu les autres sujets et que j'ai fait pas mal de recherches, je quémande pas juste en attendant le résultat. D'ailleurs je dois présenter mon programme que vendredi prochain donc j'ai encore le temps pour mes recherches.

    - Et je précise que quand je fais le test sur le document poster sur le DocCenter j'y suis déjà authentifier.

    - Merci pour vos réponses de plus je remercie rdurupt pour ta réponse, je vais tester et surtout analyser ta démarche. Car m'étant auto former aux macros j'ai forcément plusieurs lacunes, c'est aussi pour sa que je potasse ce forum. Et autant la gestion des erreurs, la POO etc j'arrive à maîtriser la bête, là les connection ADODB c'est du nouveau et j'ai un peu du mal à saisir les subtilités. J'ai repris le code de notre ami cité plus haut et adapté suivant ce que j'avais compris, mais je ne suis pas sûr d'avoir compris l'entièreté du code qu'il nous proposait.

    DeathZarakai.

    P.S. : Je tente de procéder ainsi car les méthodes = et INDIRECT ne répondent pas au besoin, je précise au cas où.

Discussions similaires

  1. [XL-2003] requêtes sur fichier fermé sous conditions
    Par mickisa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/11/2013, 15h58
  2. [adodbapi]Effectuer des requêtes SQL sur un fichier dbf
    Par Marie S. dans le forum Général Python
    Réponses: 5
    Dernier message: 22/10/2008, 12h57
  3. [VBA] Requête SQL sur un fichier excel ?
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2006, 23h06
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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