Afficher les éléments d'un dossier [Résolu]

Signaler
-
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
-
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

Messages postés
15267
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 août 2020
1 323
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!
Messages postés
15267
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 août 2020
1 323
Bonjour,

Il faut deux "_" pour que ca donne le bon resulat.
Verifiez le nom du fichier
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
Messages postés
15267
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 août 2020
1 323
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 ?
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
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
l'erreur se produit sans doute parce qu'un fichier n'est pas nommé comme tu l'imagines, avec au moins deux "_".
Messages postés
15267
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 août 2020
1 323
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?
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.
Et l'erreur porte sur la ligne :
onglet = Split(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
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
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.
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.
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
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.
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 !
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
peux-tu alors marquer la discussion comme résolue?