Lien entre 2 fichies excel

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
Configuration: Windows XP

7 réponses

  1. 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
    1. 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
      1. oki oki
        j'essaie ca lundi et je te tiens au courant du resultat.
        Merci beaucoup
        0
    2. ok n'hesite pas a me demander de l'aide si tu n'as jamais fais de macro en vba.
      0
      1. 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
    3. La date contenu dans chaque fichier se trouve a quelle adresse (feuille+cellule) ?
      0
      1. 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
    4. 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
      1. 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
    5. 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
      1. Merci pour tout,
        ON peut cloturer le sujet maintenant.
        0
    6. 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