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 :

Rapatriement de données de fichiers [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Par défaut Rapatriement de données de fichiers
    Bonjour à tous, je m'adresse à vous après de vaines tentatives pour résoudre un problème.


    Dans un fichier excel nommé Rapatriement.xlsx, j'ai dans la colonne A, le nom de 100 fichiers .xlsx, tous situés dans le même répertoire que Rapatriement.xlsx (C:\Documents and Settings\user\Bureau).
    Dans la colonne B, je souhaiterai placer le contenu de la cellule D5 de chacun des fichiers correspondants.


    Comment faire ?

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Et où sont tes tentatives? je ne vois pas de début de code.

  3. #3
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Par défaut
    Bonjour, merci de m'avoir répondu

    Voilà , j'ai appliqué telle quelle cette fonction qui répond en partie à ma question et qui est dans la faq excel: http://excel.developpez.com/faq/?pag...tClasseurFerme

    c'est la fonction Function LireCellule_ClasseurFerme( ....)_

    Celle-ci fonctionne bien quand le classeur source est ouvert. Cependant quand le classeur est fermé la fonction ne fonctionne plus.J'ai mis la fonction dans mon fichier rapatriement.xlsm et je l'applique comme dans l'exemple pour appeler une donnée du fichier source1;xlsx qui est fermé.

    Je ne vois pas d'où peut venir le problème, j'applique à la lettre ce qui m'est donné.

    Pouvez vous m'aider ?

  4. #4
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Par défaut
    Quelqu'un a t il utilisé la fonction LireCellule_ClasseurFerme() présentée dans la Faq ? Quand le classeur source est fermé, Elle ne fonctionne pas chez moi ?

    http://excel.developpez.com/faq/?pag...tClasseurFerme

    Si le classeur source est ouvert elle fonctionne.. mais elle a justement été crée pour palier à l'éventualité d'un fichier source 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
    Vous pouvez ensuite insérer ce type de formule dans une cellule :
    =LireCellule_ClasseurFerme(A1;A2;A3;G7)

    A1 correspond au chemin:
    C:\Documents and Settings\mimi\dossier

    A2 correspond au nom du classeur:
    ClasseurY.xls

    A3 correspond au nom de la feuille:
    Feuil1

    G7 correspond à la cellule qui doit être lue dans le classeur fermé

  5. #5
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Par défaut
    C'est bon, j'ai trouvé mon erreur
    Je la donne, histoire de faire avancer ceux qui seraient bloqués comme je l'ai été.

    J'ai écris dans le post précédent:
    Celle-ci fonctionne bien quand le classeur source est ouvert. Cependant quand le classeur est fermé la fonction ne fonctionne plus.J'ai mis la fonction dans mon fichier rapatriement.xlsm et je l'applique comme dans l'exemple pour appeler une donnée du fichier source1.xlsx qui est fermé.
    Pour que cette fonction donne le résultat il faut que le fichier source soit en .xls, ce qui n'était pas dit dans http://excel.developpez.com/faq/?pag...tClasseurFerme.
    C'est tout !
    C'était tout simple.

    J'ai donc pu répondre à ma question initiale pour les fichiers d'extensions en .xls

    Je vais maintenant pouvoir chercher pour ceux en .xlsx.

  6. #6
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Par défaut
    Bon, je termine le sujet en espérant qu'il soit utile aux débutants dont je fais partie.Voilà la solution:

    D'abord insérer dans la colonne A le nom des 100 fichiers avec leur extensions .xlsx

    Ensuite créer cette 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Function LireCellule_ClasseurFerme( _
            Fichier As String, _
            Cellule As String) As Variant
     
        Application.Volatile
     
     Dim Chemin As String
     Chemin = "C:\Documents and Settings\user\Bureau"
     
        Dim Cible As String, c As Range
        Dim Feuille As String
        Feuille = "Feuil1$"
     
        Cible = Cellule & ":" & Cellule
     
        'tester si Cible est bien une référence à cellule la testant dans la feuille active
        On Error Resume Next
        Set c = Range(Cible)
        'Si la cilbe n'est pas une addresse de cellule alors renvoyer l'erreur #Ref
        If c Is Nothing Then
            LireCellule_ClasseurFerme = CVErr(xlErrRef)
            Exit Function
        End If
     
     
        Dim Source As New ADODB.Connection
        Source.CursorLocation = adUseClient
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Chemin & "\" & Fichier & _
            ";Extended Properties=""Excel 12.0;HDR=No"";"
     
        If Source.State <> adStateOpen Then
            LireCellule_ClasseurFerme = CVErr(xlErrNull)
            Set Source = Nothing
            Exit Function
        End If
     
        Dim Rst As New ADODB.Recordset
        Rst.Open "SELECT * FROM [" & Feuille & Cible & "]", Source, adOpenStatic, adLockBatchOptimistic
     
        If Rst.State = adStateOpen Then
          LireCellule_ClasseurFerme = Rst(0).Value
          Rst.Close
        Else
          LireCellule_ClasseurFerme = CVErr(xlErrNA)
        End If
     
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
    End Function
    Ensuite dans la cellule B1 entrer =LireCellule_ClasseurFerme(A1;"D5")
    Utiliser la barre d'extensions pour aller jusqu'en B100

    Terminé....

    Finalement c'était pas compliqué

    Encore merci à kiki29 pour avoir répondu à mon premier post sur ce forum

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/07/2008, 11h47
  2. [Delphi]Base de donnée ou fichier normal ?
    Par Invité dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/10/2005, 19h27
  3. [MFC] [POCKETPC] Base de données ou fichiers ?
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 06/10/2005, 15h10
  4. Extraction de données depuis fichier .NDX ...
    Par Olif_C dans le forum WinDev
    Réponses: 4
    Dernier message: 30/08/2005, 11h57
  5. Stockage de xml : base de données ou fichiers
    Par ahebert dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 26/08/2005, 07h28

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