Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 23h14   #1
Nouveau Membre du Club
 
Femme
Enseignant
Inscription : novembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2011
Messages : 44
Points : 26
Points : 26
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 ?
florianne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 23h26   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonsoir
Et où sont tes tentatives? je ne vois pas de début de code.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 09h10   #3
Nouveau Membre du Club
 
Femme
Enseignant
Inscription : novembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2011
Messages : 44
Points : 26
Points : 26
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 ?
florianne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 16h34   #4
Nouveau Membre du Club
 
Femme
Enseignant
Inscription : novembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2011
Messages : 44
Points : 26
Points : 26
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 :
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
Citation:
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é
florianne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 19h42   #5
Nouveau Membre du Club
 
Femme
Enseignant
Inscription : novembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2011
Messages : 44
Points : 26
Points : 26
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:
Citation:
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.
florianne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 18h12   #6
Nouveau Membre du Club
 
Femme
Enseignant
Inscription : novembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2011
Messages : 44
Points : 26
Points : 26
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 :
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
florianne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h02.


 
 
 
 
Partenaires

Hébergement Web