Afficher les éléments d'un dossier

Résolu
Bonjour,

J'ai conçu un petit bout de code dont l'objectif est d'aller récupérer des valeurs présentes dans un onglet nommé Feuil1 dans des fichiers, tous présents dans un dossier.
Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[monfichier.xlsx]Feuil1'!R" & i & "C" & j

Le souci que j'ai avec cette ligne, c'est que j'aimerais que mon script parcours tous mes fichiers et pas que un fichier précis. Le seul problème étant que je bloque sur la conception de cette ligne, j'ai tenté comme-ceci, mais sans succès...

Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\" & [Fichier] & "Transient!'R" & i & "C" & j


Code complet :
Sub acces()
'For i = 1 To 4
'For j = 1 To 6
 '   Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[source.xlsx]Feuil1'!R" & i & "C" & j
'Next
'Next


Dim Dossier As String, Fichier As String, i As Integer

Dossier = "C:\Users\xxxx\" & "\"

i = 0

Fichier = Dir(chemin & "*.xlsx", vbNormal)

Do While Fichier <> ""

  For i = 1 To 1
  For j = 1 To 1
    Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[DTS_EPR2-PZR_cat2-T01A_rev1_MECH.xlsx]Transient'!R" & i & "C" & j
    'Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\" & [Fichier] & "Transient!'R" & i & "C" & j
  Next
  Next

  'i = i + 1

  'Sheets("Feuil1").Range("A" & i) = Fichier

  'Fichier = Dir

Loop

End Sub




Configuration: Windows / Chrome 80.0.3987.132

10 réponses

  1. C'est bon j'ai trouvé, en plaçant le Debug.Print monFichier avant la ligne 19.

    Et le programme prend en compte le nom du fichier sur lequel se lance la macro, qui lui ne possède pas (2) "_"

    Merci à tous les deux pour votre aide, j'ai enfin compris !
    1. Contributeur
      peux-tu alors marquer la discussion comme résolue?
  2. Bonjour,

    Il faut deux "_" pour que ca donne le bon resulat.
    Verifiez le nom du fichier
    1. Bonjour,

      Veuillez m'excuser pour mon délais et la non réponse à votre précédente question.

      Concernant la valeur de monFichier, j'ai utilisé la commande
      Debug.Print monFichier
      et cela me renvoie tout simplement tous les noms de fichier présent dans mon dossier, et pour la dernière ligne, le nom du dernier fichier.

      Voici mon code complet, j'ai peut être omis de vous spécifier quelques informations qui ont une importance dans la boucle :

      Sub toto()
      Dim monFichier As String
      Dim wb As Workbook
      Dim chemin As String
      Dim i As Integer
      Dim nom As String
      Set wb = Workbooks(ThisWorkbook.Name) 'classeur reception
      ' On a besoin du chemin absolu du dossier
      ' Doit se terminer par \
      chemin = ThisWorkbook.Path & "\"
      ' La fonction Dir(chemin, mode) permet de parcourir un dossier
      ' Ici je rajoute à mon chemin "*.xlsx",
      ' pour ne retrouver que mes fichiers Excel
      ' vbNormal permet de ne récupérer que des fichiers,
      ' vbDirectory récupère tout (dossiers et fichiers)
      monFichier = Dir(chemin & "*.xlsx", vbNormal)
      
      Do While monFichier <> ""
          onglet = Split(monFichier, "_")(2)
          wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
          'Debug.Print onglet
          Debug.Print monFichier
          monFichier = Dir
      
      Loop
      End Sub
      


      Ligne de l'erreur à la fin de l’exécution du code :
      onglet = Split(monFichier, "_")(2)


      Merci encore pour votre aide.
      1. Contributeur
        comme tu as mis la ligne debug.print (19) après la ligne qui donne l'erreur (22), tu n'as évidement pas le nom du fichier qui donne l'erreur.
        au moment où tu as l'erreur, il suffit de passer en mode "debogage", puis de mettre le curseur sur la variable monFichier.
    2. Do While monFichier <> ""
         wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Split(monFichier, "_") (2) 
      ' Permet de passer au fichier suivant
      onglet = Split(monFichier, "_")(2)
      monFichier = Dir
      Loop
      End Sub


      Voici la boucle complète
      1. Contributeur
        difficile à suivre avec un code qui change tout le temps. difficile de croire que l'erreur porte sur une ligne qui ne fait que partiellement ce que fait la ligne précédente.
        à quoi sert la variable onglet?
        n'est-il pas préférable de faire:
        onglet = Split(monFichier, "_")(2)
        wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet

        tu n'as-toujours pas répondu à la question:
        Au moment de l'erreur, quelle est la valeur de monFichier? sais-tu comment obtenir la valeur d'une variable après une erreur? si non, demande-nous, ne néglige pas notre question.
    3. Bonjour,

      Et merci à tous les deux pour vos réponses.
      Elle affiche bien le nom du dernier fichier dans un onglet, mais me renvoie l'erreur juste après : "L'indice n'appartient pas à la section" erreur d'execution 9. Je me suis fourvoyé dans mon précédent poste.
      1. Bonjour,

        dès qu'il ne trouve plus de fichiers
        Desole, mais si plus de fichier, la variable Fichier="", donc pas de passage dans la boucle

        Au moment de l'erreur, quelle est la valeur de Fichier?
        1. Bonjour,

          Merci pour ta réponse, en faite j'effectue une boucle avec une copie des noms des fichiers, présents dans un dossier, en les mettant en onglet dans mon fichier ou s’exécute ma macro.

          Avec ce code :
          Do While monFichier <> ""
             wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Split(monFichier, "_") (2) 
          ' Permet de passer au fichier suivant
          monFichier = Dir
          Loop
          End Sub
          


          Mais du coup dès qu'il ne trouve plus de fichiers, il s'arrête avec l'erreur "indice non défini" sur cette ligne :
          wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Split(monFichier, "_") (2) 
          ' Permet de passer au fichier suivant
          1. Contributeur
            l'erreur se produit sans doute parce qu'un fichier n'est pas nommé comme tu l'imagines, avec au moins deux "_".
        2. Bonjour,

          Merci beaucoup pour ta réponse, c'est parfait !

          J'aurais juste une autre petite question, quand ma boucle While parcours mon dossier elle s'arrête avec un message d'erreur (j'imagine parce qu'elle a parcouru tous les fichiers du dossier).

          J'ai regardé sur la doc Microsoft pour sortir de ma boucle s'il n'y a plus de fichier à ajouter mais je n'arrive pas à l’implémenter à mon code..

          Merci d'avance
          1. Re,

            Ben, si vous avez ce code, ca doit le faire:

            Fichier = Dir(chemin & "*.xlsx", vbNormal)
            
            Do While Fichier <> ""
            .
            .
            .
            .
                 Fichier=Dir
            Loop


            Quelle erreur avez-vous ?
        3. Bonjour,

           Cells(i, j).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[" & Fichier & "]Feuil1'!R" & i & "C" & j


          Vous n'allez pas chercher les valeurs, vous creez un lien entre les cellules de fichiers et votre fichier!