Afficher les éléments d'un dossier

Résolu/Fermé
Paul - 31 juil. 2020 à 10:51
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 4 août 2020 à 09:40
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
A voir également:

10 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
31 juil. 2020 à 11:30
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!
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
3 août 2020 à 16:27
Bonjour,

Il faut deux "_" pour que ca donne le bon resulat.
Verifiez le nom du fichier
1
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
31 juil. 2020 à 15:56
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 ?
0
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
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
1 août 2020 à 17:25
l'erreur se produit sans doute parce qu'un fichier n'est pas nommé comme tu l'imagines, avec au moins deux "_".
0

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

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
1 août 2020 à 16:33
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?
0
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.
0
Et l'erreur porte sur la ligne :
onglet = Split(monFichier, "_")(2)
0
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
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
1 août 2020 à 20:07
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.
0
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.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
3 août 2020 à 16:58
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.
0
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 !
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
4 août 2020 à 09:40
peux-tu alors marquer la discussion comme résolue?
0