Lien entre 2 fichies excel

jujutouch -  
santiago69 Messages postés 485 Statut Membre -
Bonjour,

J'ai un dossier"a1" avec plusieurs fichier excel, chaque fichier excel a un nom et contient une date (le nom et la date ont toujours la meme cellule dans tous mes fichiers).
Je souhaiterais prendre chaque nom et chaque date de ces fichiers et de les integrer a un tableau.

Le probleme est que pour un dossier ca reste simple, mais la je dois repeter l'operation pour plus de 100 fois.
Et vu que j'ai pas envie d'y passer toute ma vie, je me demande si il existe une macro ou kelke chose de réalisable dans un temps correct.

Dans le cas present j'ai un dossier "A" avec a l'interieur des dossier "a1" "a2" "a3" "a4" "a5"
et dans chaque fichier "a1" "a2" "a3".. j'ai 8 fichiers excel.
Donc au final je souhaite avoir un tabelau avec la date et le nom de chaque fichier.

(la date du fichier excel evolue donc il faut un lien entre chaque date du tableau et chaque date du fichier concerné.

J'espere avoir eté clair

Merci d'avance pour votre aide
A voir également:

7 réponses

santiago69 Messages postés 485 Statut Membre 209
 
Allons y par etapes.
Sais tu ecrire une macro en VBA ?
Voila un code a coller dans un module.
Execute le, il devrait t'afficher la liste des fichiers excel contenu dans le repertoire C:\A et tous ses sous repertoires. Dis moi si ca marche et on passe a l'etape suivante

Sub main()
    scan "C:\A"
End Sub

Sub scan(Path As String)
    Dim FSO As Object, Folder As Object, Item As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.getfolder(Path)
    For Each Item In Folder.Files
        If Right(Item.Name, 4) = ".xls" Then MsgBox Item.Name
    Next
    For Each Item In Folder.subfolders
        scan Item.Path
    Next
End Sub


2
santiago69 Messages postés 485 Statut Membre 209
 
Nouvelle version de la fonction :
Tu copie colle ca dans ton module (en ecrasant ce que je t'avais file avant).
Tu n'as que 3 valeurs a changer dans les 3 premieres lignes :
Path=Le chemin du repertoire qui va etre scanne
SheetName=Le nom de la feuille ou se trouve la date
CellAddress=L'adresse de la cellule ou se trouve la date

Execute la macro sur une feuille vide, un tableau va etre cree avec en colonne A la liste des feuilles excel trouves dans le repertoire general et en colonne B la liste des date contenues dans ces fichiers.
Const Path As String = "C:\A"
Const SheetName As String = "Feuil1"
Const CellAddress As String = "A1"

Sub main()
    scan Path
End Sub

Sub scan(Path As String)
    Static i As Long
    Dim FSO As Object, Folder As Object, Item As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.getfolder(Path)
    For Each Item In Folder.Files
        If Right(Item.Name, 4) = ".xls" Then
            i = i + 1
            Cells(i, 1) = Item.Path
            Cells(i, 2) = "='" & Left(Item.Path, InStrRev(Item.Path, "\")) & _
                          "[" & Item.Name & "]" & SheetName & "'!" & CellAddress
        End If
    Next
    For Each Item In Folder.subfolders
        scan Item.Path
    Next
End Sub


0
jujutouch
 
oki oki
j'essaie ca lundi et je te tiens au courant du resultat.
Merci beaucoup
0
santiago69 Messages postés 485 Statut Membre 209
 
ok n'hesite pas a me demander de l'aide si tu n'as jamais fais de macro en vba.
0
jujutouch
 
Pour tout te dire je suis pas un pro des macros.
J'ai reussi a transferer la macro, mais il me marque erreur 400 et me marque sur ma feuille excel que le chemin de mon dossier.
Si les feuilles de mes fichier excel n'ont pas le meme nom, je serai obliger de relancer la macro en modifiant le nom?

Merci
0
santiago69 Messages postés 485 Statut Membre 209
 
La date contenu dans chaque fichier se trouve a quelle adresse (feuille+cellule) ?
0
jujutouch
 
C'est bien la le probleme.
le nom de mes feuilles n'est pas le meme dans tt mes fichiers.
Il faut que j'harmonise le nom de la feuille?

Bon c bon j'ai harmonisé le nom de la feuille, elle s'appelle FIO et la cellule c'est S8 (en faite la date est dans des cellule fusionner (STUVW 8)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
santiago69 Messages postés 485 Statut Membre 209
 
Et la cellule ? est ce toujours la meme ?
Et pour la feuille, est elle toujours a la meme position (premiere ou derniere) ?
Lache le plus possible d'info et donne des exemples, ca ira plus vite.

0
jujutouch
 
Ca marche nikel, ca me sort le chemin de la feuille est la date que je veux.
Si je souhaite recupere un autre info dans une cellule (S6).
Peux tu juste me dire koi rajouter dans la macro et où.

Merci beaucoup
0
santiago69 Messages postés 485 Statut Membre 209
 
Le programme devient :
En ligne 3, tu peux demander toutes les cellules que tu veux (separees par des virgules)
Si ca t'interesse, c'est en ligne 15 que cette liste est transformee en tableau.
En ligne 21, il est demande de parcourir chaque element du tableau (S8 puis S6)
En lignes 22 et 23, il est demande d'ecrire une formule du style ='chemin[fichier]feuille'!cellule

Const Path As String = "C:\A"
Const SheetName As String = "FIO"
Const CellAddress As String = "S8,S6"

Sub main()
    scan Path
End Sub

Sub scan(Path As String)
    On Error Resume Next
    Static i As Long
    Dim FSO As Object, Folder As Object, Item As Object, CellAddressTab
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.getfolder(Path)
    CellAddressTab = Split(CellAddress, ",")
    For Each Item In Folder.Files
        With Item
            If Right(.Name, 4) = ".xls" Then
                i = i + 1
                Cells(i, 1) = .Path
                For j = 0 To UBound(CellAddressTab)
                    Cells(i, j + 2) = "='" & Left(.Path, InStrRev(.Path, "\")) & _
                        "[" & Item.Name & "]" & SheetName & "'!" & CellAddressTab(j)
                Next
            End If
        End With
    Next
    For Each Item In Folder.subfolders
        scan Item.Path
    Next
End Sub

0
jujutouch
 
Merci pour tout,
ON peut cloturer le sujet maintenant.
0
santiago69 Messages postés 485 Statut Membre 209
 
OK, dans ce cas, tu dois definir le statut de la conversation comme "resolu"
Il n'y a que toi qui puisse le faire puisque c'est toi qui a demarre le sujet.
Bonne chance pour la suite.
0