OVH Cloud OVH Cloud

Lister les fichiers d'un répertoire ?

20 réponses
Avatar
LANIMAL
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:\Mon dossier\Musique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !

10 réponses

1 2
Avatar
Youky
Bonjour LANIMAL,
j'ai repris le code d'Isabelle et rajouté un for pour ouvrir avec un lien
ces fichiers.
reste écrit le nom du fichier avec l'extention.
Youky

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, I As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
Répertoire = "D:Mon dossierMusique" 'Modifie le répertoire
If Répertoire = "" Then Exit Sub
Set Dossier = fso.getfolder(Répertoire)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Fichier = File.Name
x = x + 1
Range("A" & x) = Fichier
Next
End If
For k = 1 To [A65536].End(3).Row
ActiveSheet.Hyperlinks.Add Anchor:Îlls(k, 1), Address:= _
"D:Mon dossierMusique" & Cells(k, 1), TextToDisplay:Îlls(k,
1).Value
'attention au répertoire ci-dessus
Next
End Sub

"LANIMAL" a écrit dans le message de news:
%23OtPXCI%
Bonsoir, et merci pour ta cordiale fidélité.
Oui, effectivement, mon "client", mon fils, qui craint que je m'ennuie,
m'occupe beaucoup - à titre gratuit bien sûr - et il fait évoluer son
projet.
Pour le .doc, j'avais compris.
J'avais aussi compris le Len(f)>0
Ton explication me permet "d'entrevoir" des choses, mais je bloque
encore... et j'arrive pas à décoincer, peut-être suis-je bouché ! ?
Je te rappelle donc le code en cause :
***************************
Sub ToutleRepertoire()
f = Dir("*.*")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
*****************************
Je te reprécise ci-dessous mon pb :
Avec f = Dir("*.*"), qqchose ne va encore pas :
Après exécution (en pas à pas) de f = Dir("*.*"), j'obtiens toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
(Documents MB est mon répertoire personnel dans la partition D:).
La macro est dans PERSO.XLS qui est aussi dans C:....
Alors, je me demande s'il ne faut pas spécifier dans la macro, le
répertoire dans lequel elle doit travailler.
Mais je ne sais où ni comment le spécifier.
Merci, à +

Bonsoir LANIMAL,

Oui je viens de lire.
L'autre jour ta question portait sur un ensemble de fichiers Word. D'où
le *.doc.
Pour tous fichiers Youky a donné la réponse *.*

Explication:
Lorsque tu appelle une première fois
f=dir("*.xls")
vient la liste des fichiers xls du répertoire en cours
mais en l'occurence le premier seul sera retenu.
Dans la boucle ( à la fin)
lorsque tu rappelle simplement
f=dir
le même critère est conservé mais
on passe au fichier suivant.

Le len(f)>0
mesure la longuer de chaine de f, ceci permet de s'arrêter lorsqu'il n'y
a plus de fichiers.

Cordialement.

lSteph




LANIMAL a exprimé avec précision :
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:Mon dossierMusique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !







Avatar
lSteph
Re,

Pour reprendre le fil , ce code je le rappelle était pour Word et
répondait à une demande et un contexte précis, et l'occurence
fonctionnait pour cela.

d'où le Documents.Open
et le *.doc (et en aucun cas *.*)

Le précédent equivaudrait à pour excel
Workbooks.open
et *.xls

Le besoin que tu définis maintenant est visiblement bien différent
il n'en va pas moins que *.* soit tel qu'indiqué par Youky un joker
pour tous fichiers...
et c'est uniquement ce que j'ai confirmé.
Car en effet ce n'est pas pour autant que l'on puisse ouvrir n'importe
quelle sorte de fichier depuis Word ou depuis Excel.
Donc les lister Ok mais les inclure dans une macro qui les ouvre et
agit dessus non!

Exemple pour "Lister les fichiers d'un répertoire" dans excel:

Sub ToutleRepertoire()
Dim f As String
f = Dir("*.*")
Do While Len(f) > 0
[a65536].End(xlUp)(2) = f
f = Dir
Loop
End Sub


Cordialement.

lSteph




Bonsoir, et merci pour ta cordiale fidélité.
Oui, effectivement, mon "client", mon fils, qui craint que je m'ennuie,
m'occupe beaucoup - à titre gratuit bien sûr - et il fait évoluer s on
projet.
Pour le .doc, j'avais compris.
J'avais aussi compris le Len(f)>0
Ton explication me permet "d'entrevoir" des choses, mais je bloque
encore... et j'arrive pas à décoincer, peut-être suis-je bouché ! ?
Je te rappelle donc le code en cause :
***************************
Sub ToutleRepertoire()
f = Dir("*.*")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoir e)
f = Dir
Loop
End Sub
*****************************
Je te reprécise ci-dessous mon pb :
Avec f = Dir("*.*"), qqchose ne va encore pas :
Après exécution (en pas à pas) de f = Dir("*.*"), j'obtiens toujo urs
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
(Documents MB est mon répertoire personnel dans la partition D:).
La macro est dans PERSO.XLS qui est aussi dans C:....
Alors, je me demande s'il ne faut pas spécifier dans la macro, le
répertoire dans lequel elle doit travailler.
Mais je ne sais où ni comment le spécifier.
Merci, à +

Bonsoir LANIMAL,

Oui je viens de lire.
L'autre jour ta question portait sur un ensemble de fichiers Word. D'o ù
le *.doc.
Pour tous fichiers Youky a donné la réponse *.*

Explication:
Lorsque tu appelle une première fois
f=dir("*.xls")
vient la liste des fichiers xls du répertoire en cours
mais en l'occurence le premier seul sera retenu.
Dans la boucle ( à la fin)
lorsque tu rappelle simplement
f=dir
le même critère est conservé mais
on passe au fichier suivant.

Le len(f)>0
mesure la longuer de chaine de f, ceci permet de s'arrêter lorsqu'il n'y
a plus de fichiers.

Cordialement.

lSteph




LANIMAL a exprimé avec précision :
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:Mon dossierMusique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répert oire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !







Avatar
LANIMAL
Si tu ne connaissais pas Pénible, maintenant, tu le connais ! ! !
Oui, c'est vrai que le projet a évolué, comme je te le disais hier,
et c'est vrai aussi que je me suis embrouillé les neurones, car en
effet, dans le nouveau besoin, je n'ai plus besoin d'ouvrir les fichiers.

Mais j'ai voulu (pour apprendre) comprendre ce qui se passait à la 3ème
ligne du code en question (sans aller jusau'à "Open").
Rappel du code en cause (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après exécution (en pas à pas) de f = Dir("*.xls"), on obtient toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le chemin doit être spécifié : f = Dir(chemin & "*.xls").
Ce faisant, plus de pb sur cette ligne :
f contient bien les fichiers du répertoire spécifié dans chemin.
Par contre, il faut aussi définir le répertoire avant d'ouvrir le
fichier f. Le code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche, maintenant je crois être clair...
... jusqu'à la prochaine fois !
J'ai aussi vu l'utilisation de End(xlUp)dans ta dernière proposition
pour atteindre la cellule suivante de la liste,
astuce que je ne connaissais pas.
Merci encore pour ton aide à partir duquel j'ai un peu ramé,
mais je suis heureux d'avoir appris.

LANIMAL


Re,

Pour reprendre le fil , ce code je le rappelle était pour Word et
répondait à une demande et un contexte précis, et l'occurence
fonctionnait pour cela.

d'où le Documents.Open
et le *.doc (et en aucun cas *.*)

Le précédent equivaudrait à pour excel
Workbooks.open
et *.xls

Le besoin que tu définis maintenant est visiblement bien différent
il n'en va pas moins que *.* soit tel qu'indiqué par Youky un joker
pour tous fichiers...
et c'est uniquement ce que j'ai confirmé.
Car en effet ce n'est pas pour autant que l'on puisse ouvrir n'importe
quelle sorte de fichier depuis Word ou depuis Excel.
Donc les lister Ok mais les inclure dans une macro qui les ouvre et
agit dessus non!

Exemple pour "Lister les fichiers d'un répertoire" dans excel:

Sub ToutleRepertoire()
Dim f As String
f = Dir("*.*")
Do While Len(f) > 0
[a65536].End(xlUp)(2) = f
f = Dir
Loop
End Sub


Cordialement.

lSteph




Bonsoir, et merci pour ta cordiale fidélité.
Oui, effectivement, mon "client", mon fils, qui craint que je m'ennuie,
m'occupe beaucoup - à titre gratuit bien sûr - et il fait évoluer son
projet.
Pour le .doc, j'avais compris.
J'avais aussi compris le Len(f)>0
Ton explication me permet "d'entrevoir" des choses, mais je bloque
encore... et j'arrive pas à décoincer, peut-être suis-je bouché ! ?
Je te rappelle donc le code en cause :
***************************
Sub ToutleRepertoire()
f = Dir("*.*")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
*****************************
Je te reprécise ci-dessous mon pb :
Avec f = Dir("*.*"), qqchose ne va encore pas :
Après exécution (en pas à pas) de f = Dir("*.*"), j'obtiens toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
(Documents MB est mon répertoire personnel dans la partition D:).
La macro est dans PERSO.XLS qui est aussi dans C:....
Alors, je me demande s'il ne faut pas spécifier dans la macro, le
répertoire dans lequel elle doit travailler.
Mais je ne sais où ni comment le spécifier.
Merci, à +

Bonsoir LANIMAL,

Oui je viens de lire.
L'autre jour ta question portait sur un ensemble de fichiers Word. D'où
le *.doc.
Pour tous fichiers Youky a donné la réponse *.*

Explication:
Lorsque tu appelle une première fois
f=dir("*.xls")
vient la liste des fichiers xls du répertoire en cours
mais en l'occurence le premier seul sera retenu.
Dans la boucle ( à la fin)
lorsque tu rappelle simplement
f=dir
le même critère est conservé mais
on passe au fichier suivant.

Le len(f)>0
mesure la longuer de chaine de f, ceci permet de s'arrêter lorsqu'il n'y
a plus de fichiers.

Cordialement.

lSteph




LANIMAL a exprimé avec précision :
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:Mon dossierMusique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !









Avatar
LANIMAL
Merci, Youky
Peut-être es-tu intéressé par ma réponse de 16:48 à lSteph.
Je n'ai pas le tps de regarder de près ta dernière proposition, mais je
ne manquerai pas de le faire, c'est comme ça que j'apprends le mieux.
Merci,
LANIMAL

Bonjour LANIMAL,
j'ai repris le code d'Isabelle et rajouté un for pour ouvrir avec un lien
ces fichiers.
reste écrit le nom du fichier avec l'extention.
Youky

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, I As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
Répertoire = "D:Mon dossierMusique" 'Modifie le répertoire
If Répertoire = "" Then Exit Sub
Set Dossier = fso.getfolder(Répertoire)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Fichier = File.Name
x = x + 1
Range("A" & x) = Fichier
Next
End If
For k = 1 To [A65536].End(3).Row
ActiveSheet.Hyperlinks.Add Anchor:Îlls(k, 1), Address:= _
"D:Mon dossierMusique" & Cells(k, 1), TextToDisplay:Îlls(k,
1).Value
'attention au répertoire ci-dessus
Next
End Sub

"LANIMAL" a écrit dans le message de news:
%23OtPXCI%
Bonsoir, et merci pour ta cordiale fidélité.
Oui, effectivement, mon "client", mon fils, qui craint que je m'ennuie,
m'occupe beaucoup - à titre gratuit bien sûr - et il fait évoluer son
projet.
Pour le .doc, j'avais compris.
J'avais aussi compris le Len(f)>0
Ton explication me permet "d'entrevoir" des choses, mais je bloque
encore... et j'arrive pas à décoincer, peut-être suis-je bouché ! ?
Je te rappelle donc le code en cause :
***************************
Sub ToutleRepertoire()
f = Dir("*.*")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
*****************************
Je te reprécise ci-dessous mon pb :
Avec f = Dir("*.*"), qqchose ne va encore pas :
Après exécution (en pas à pas) de f = Dir("*.*"), j'obtiens toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
(Documents MB est mon répertoire personnel dans la partition D:).
La macro est dans PERSO.XLS qui est aussi dans C:....
Alors, je me demande s'il ne faut pas spécifier dans la macro, le
répertoire dans lequel elle doit travailler.
Mais je ne sais où ni comment le spécifier.
Merci, à +

Bonsoir LANIMAL,

Oui je viens de lire.
L'autre jour ta question portait sur un ensemble de fichiers Word. D'où
le *.doc.
Pour tous fichiers Youky a donné la réponse *.*

Explication:
Lorsque tu appelle une première fois
f=dir("*.xls")
vient la liste des fichiers xls du répertoire en cours
mais en l'occurence le premier seul sera retenu.
Dans la boucle ( à la fin)
lorsque tu rappelle simplement
f=dir
le même critère est conservé mais
on passe au fichier suivant.

Le len(f)>0
mesure la longuer de chaine de f, ceci permet de s'arrêter lorsqu'il n'y
a plus de fichiers.

Cordialement.

lSteph




LANIMAL a exprimé avec précision :
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:Mon dossierMusique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !










Avatar
lSteph
Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son
fonctionnement.


Cordialement.

lSteph


LANIMAL a pensé très fort :
Si tu ne connaissais pas Pénible, maintenant, tu le connais ! ! !
Oui, c'est vrai que le projet a évolué, comme je te le disais hier,
et c'est vrai aussi que je me suis embrouillé les neurones, car en effet,
dans le nouveau besoin, je n'ai plus besoin d'ouvrir les fichiers.

Mais j'ai voulu (pour apprendre) comprendre ce qui se passait à la 3ème ligne
du code en question (sans aller jusau'à "Open").
Rappel du code en cause (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après exécution (en pas à pas) de f = Dir("*.xls"), on obtient toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le chemin doit être spécifié : f = Dir(chemin & "*.xls").
Ce faisant, plus de pb sur cette ligne :
f contient bien les fichiers du répertoire spécifié dans chemin.
Par contre, il faut aussi définir le répertoire avant d'ouvrir le fichier f.
Le code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche, maintenant je crois être clair...
... jusqu'à la prochaine fois !
J'ai aussi vu l'utilisation de End(xlUp)dans ta dernière proposition pour
atteindre la cellule suivante de la liste,
astuce que je ne connaissais pas.
Merci encore pour ton aide à partir duquel j'ai un peu ramé,
mais je suis heureux d'avoir appris.

LANIMAL


Re,

Pour reprendre le fil , ce code je le rappelle était pour Word et
répondait à une demande et un contexte précis, et l'occurence
fonctionnait pour cela.

d'où le Documents.Open
et le *.doc (et en aucun cas *.*)

Le précédent equivaudrait à pour excel
Workbooks.open
et *.xls

Le besoin que tu définis maintenant est visiblement bien différent
il n'en va pas moins que *.* soit tel qu'indiqué par Youky un joker
pour tous fichiers...
et c'est uniquement ce que j'ai confirmé.
Car en effet ce n'est pas pour autant que l'on puisse ouvrir n'importe
quelle sorte de fichier depuis Word ou depuis Excel.
Donc les lister Ok mais les inclure dans une macro qui les ouvre et
agit dessus non!

Exemple pour "Lister les fichiers d'un répertoire" dans excel:

Sub ToutleRepertoire()
Dim f As String
f = Dir("*.*")
Do While Len(f) > 0
[a65536].End(xlUp)(2) = f
f = Dir
Loop
End Sub


Cordialement.

lSteph




Bonsoir, et merci pour ta cordiale fidélité.
Oui, effectivement, mon "client", mon fils, qui craint que je m'ennuie,
m'occupe beaucoup - à titre gratuit bien sûr - et il fait évoluer son
projet.
Pour le .doc, j'avais compris.
J'avais aussi compris le Len(f)>0
Ton explication me permet "d'entrevoir" des choses, mais je bloque
encore... et j'arrive pas à décoincer, peut-être suis-je bouché ! ?
Je te rappelle donc le code en cause :
***************************
Sub ToutleRepertoire()
f = Dir("*.*")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
*****************************
Je te reprécise ci-dessous mon pb :
Avec f = Dir("*.*"), qqchose ne va encore pas :
Après exécution (en pas à pas) de f = Dir("*.*"), j'obtiens toujours
f = "D:Documents MB.lnk", même quand je viens d'ouvrir un fichier du
répertoire C:Mes Documents qui est donc le répertoire en cours.
(Documents MB est mon répertoire personnel dans la partition D:).
La macro est dans PERSO.XLS qui est aussi dans C:....
Alors, je me demande s'il ne faut pas spécifier dans la macro, le
répertoire dans lequel elle doit travailler.
Mais je ne sais où ni comment le spécifier.
Merci, à +

Bonsoir LANIMAL,

Oui je viens de lire.
L'autre jour ta question portait sur un ensemble de fichiers Word. D'où
le *.doc.
Pour tous fichiers Youky a donné la réponse *.*

Explication:
Lorsque tu appelle une première fois
f=dir("*.xls")
vient la liste des fichiers xls du répertoire en cours
mais en l'occurence le premier seul sera retenu.
Dans la boucle ( à la fin)
lorsque tu rappelle simplement
f=dir
le même critère est conservé mais
on passe au fichier suivant.

Le len(f)>0
mesure la longuer de chaine de f, ceci permet de s'arrêter lorsqu'il n'y
a plus de fichiers.

Cordialement.

lSteph




LANIMAL a exprimé avec précision :
Bonjour
Un domaine nouveau pour moi, et je ne m'en sort pas !
1 - Je voudrais lister tous les fichiers (.pdf, .mid .mp3 etc.)
du dossier D:Mon dossierMusique
dans la colonne A:A d'un classeur (par exemple : Toto.xls)
à créer sur le Bureau.

2 - Plus tard dans mon exploitation, il me faudra ouvrir Toto.xls
(qui entre temps aura peut-être été fermé)
Quel est le code qui permet de savoir si Toto est déjà ouvert ?
afin d'utiliser dans ce cas l'instruction "Activate", et non "Open".

3 - Si qqun a un peu de tps pour m'expliquer cet exemple de l'aide VBA :
**************
Sub AfficherListeDossiers(specdossier)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(specdossier)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
****************
Je n'arrive pas à exécuter cet exemple
Que faut-il mettre à la place de specdossier ?

4 - L'autre jour lSteph (j'espère qu'il me lira) m'a suggéré le code
ci-dessous :
##########################
Sub ToutleRepertoire()
f = Dir("*.doc")
Do While Len(f) > 0
Documents.Open (f)
'ChangeLh (Exécution d'une macro dans chaque fichier du répertoire)
f = Dir
Loop
End Sub
#########################
La boucle "Do" ne se fait jamais car f = "", probablement parce que je
ne mets pas ce qu'il faut à la place de "*.doc"

IL Y A LONGTEMPS QUE JE NE ME SUIS PAS SENTI AUSSI NUL :-(((
Merci pour votre aide, d'autant que je me sens exigeant aujourd'hui !







--
- -





Avatar
LANIMAL
Bonsoir
Je crois que maintenant on a un pb de communication ;-)
Je suis d'accord, sans réserve, avec tout ce que tu m'as dit dans tes
derniers messages, et je t'en remercie car ils m'ont appris des choses.
Je disais tout à l'heure que, pour apprendre, je me suis intéressé à ta
proposition du 22.10 à 10:21, qui ne fonctionnait pas chez moi, et je
voulais savoir pourquoi.
Ta proposition est rappelée ci-dessous, je l'ai juste transposée de Word
à Excel, pour des raisons de commodité tout à fait secondaires.
Si tu es intéressé, oublie le reste du fil,
les lignes qui suivent, à elles seules, résument le pb que j'ai eu, et
la solution que j'ai trouvée.

RAPPEL DU CODE EN CAUSE (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après l'exécution (en pas à pas) de f = Dir("*.xls")
(sans aller jusqu'à la ligne Workbooks.Open (f) ),
la valeur de f n'est jamais le nom d'un fichier .xls du répertoire courant.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le "chemin" doit être spécifié :
Il faut écrire f = Dir(chemin & "*.xls")
et alors, le pb disparaît, et les valeurs successives de f correspondent
bien aux fichiers du répertoire spécifié dans chemin.
De plus, il faut aussi définir le répertoire avant d'ouvrir le fichier
f. Le code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche.
J'ai essayé d'être + clair et + simple dans le présent message,
si tu ne me comprends pas, c'est certainement que je m'explique mal.
De toute façon, merci encore pour tes réponses qui m'ont appris des choses.
LANIMAL


Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son fonctionnement.


Cordialement.

lSteph


Avatar
lSteph
Re,
Non , c'est simplement que je ne suis pas d'accord!!!
f = Dir(chemin & "*.xls")
permet effectivement de spécifier un chemin avant le Dir
Mais
Dir("*.xls"), en prenant le code tel que je l'ai indiqué
liste bien les fichiers du répertoire en cours!

1-Pour t'en convaincre fais ceci

Avec un nouveau classeur (colonne A) vide
place le code dans un module, ferme VBE.
Dans Excel
(par le menu d'excel)
Fichier ouvrir
juste pour voir où tu es (sur quel répertoire)
puis annuler
Ensuite lance la macro celle que j'ai donnée et pas une autre

Sub ToutleRepertoire()
Dim f As String
f = Dir("*.*")
Do While Len(f) > 0
[a65536].End(xlUp)(2) = f
f = Dir
Loop
End Sub

2-Tu peux ensuite verifier les fichiers listés en colonne A
sont bien ceux du répertoire en cours.

3-Au cas où tu doive relancer la macro il vaut mieux toutefois prévoir
l'effacement de la colonne A

Sub ToutleRepertoire()
Dim f As String
[a:a].clearcontents
f = Dir("*.*")
Do While Len(f) > 0
[a65536].End(xlUp)(2) = f
f = Dir
Loop
End Sub

4-Tu peux alors recommencer l'opération, en passant par fichier ouvrir,
change de répertoire puis fais annuler

Lance la macro.
...

@+

lSteph


LANIMAL a émis l'idée suivante :
Bonsoir
Je crois que maintenant on a un pb de communication ;-)
Je suis d'accord, sans réserve, avec tout ce que tu m'as dit dans tes
derniers messages, et je t'en remercie car ils m'ont appris des choses.
Je disais tout à l'heure que, pour apprendre, je me suis intéressé à ta
proposition du 22.10 à 10:21, qui ne fonctionnait pas chez moi, et je voulais
savoir pourquoi.
Ta proposition est rappelée ci-dessous, je l'ai juste transposée de Word à
Excel, pour des raisons de commodité tout à fait secondaires.
Si tu es intéressé, oublie le reste du fil,
les lignes qui suivent, à elles seules, résument le pb que j'ai eu, et la
solution que j'ai trouvée.

RAPPEL DU CODE EN CAUSE (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après l'exécution (en pas à pas) de f = Dir("*.xls")
(sans aller jusqu'à la ligne Workbooks.Open (f) ),
la valeur de f n'est jamais le nom d'un fichier .xls du répertoire courant.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le "chemin" doit être spécifié :
Il faut écrire f = Dir(chemin & "*.xls")
et alors, le pb disparaît, et les valeurs successives de f correspondent bien
aux fichiers du répertoire spécifié dans chemin.
De plus, il faut aussi définir le répertoire avant d'ouvrir le fichier f. Le
code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche.
J'ai essayé d'être + clair et + simple dans le présent message,
si tu ne me comprends pas, c'est certainement que je m'explique mal.
De toute façon, merci encore pour tes réponses qui m'ont appris des choses.
LANIMAL


Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son fonctionnement.


Cordialement.

lSteph



--
- -


Avatar
lSteph
;-)...par ailleurs il serait absurde d'avoir un pb de communication!

:| Non mais kékcékst'histoire



:D Amicalement.

@+

lSteph
LANIMAL avait écrit le 26/10/2006 :
Bonsoir
Je crois que maintenant on a un pb de communication ;-)
Je suis d'accord, sans réserve, avec tout ce que tu m'as dit dans tes
derniers messages, et je t'en remercie car ils m'ont appris des choses.
Je disais tout à l'heure que, pour apprendre, je me suis intéressé à ta
proposition du 22.10 à 10:21, qui ne fonctionnait pas chez moi, et je voulais
savoir pourquoi.
Ta proposition est rappelée ci-dessous, je l'ai juste transposée de Word à
Excel, pour des raisons de commodité tout à fait secondaires.
Si tu es intéressé, oublie le reste du fil,
les lignes qui suivent, à elles seules, résument le pb que j'ai eu, et la
solution que j'ai trouvée.

RAPPEL DU CODE EN CAUSE (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après l'exécution (en pas à pas) de f = Dir("*.xls")
(sans aller jusqu'à la ligne Workbooks.Open (f) ),
la valeur de f n'est jamais le nom d'un fichier .xls du répertoire courant.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le "chemin" doit être spécifié :
Il faut écrire f = Dir(chemin & "*.xls")
et alors, le pb disparaît, et les valeurs successives de f correspondent bien
aux fichiers du répertoire spécifié dans chemin.
De plus, il faut aussi définir le répertoire avant d'ouvrir le fichier f. Le
code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche.
J'ai essayé d'être + clair et + simple dans le présent message,
si tu ne me comprends pas, c'est certainement que je m'explique mal.
De toute façon, merci encore pour tes réponses qui m'ont appris des choses.
LANIMAL


Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son fonctionnement.


Cordialement.

lSteph



--
- -


Avatar
LANIMAL
Ecoute...
Tu m'as tellement bien convaincu, que maintenant, je n'arrive plus à
reproduire le dysfonctionnement que j'ai constaté (je ne l'ai pourtant
pas rêvé !).
Mais comme tu as compris que je suis accrocheur, je reprendrai demain
pour comprendre.
Pour l'honneur, je te dirai, et je pense qu'on pourra alors casser le fil.
Bonne nuit.

;-)...par ailleurs il serait absurde d'avoir un pb de communication!

:| Non mais kékcékst'histoire



:D Amicalement.

@+

lSteph
LANIMAL avait écrit le 26/10/2006 :
Bonsoir
Je crois que maintenant on a un pb de communication ;-)
Je suis d'accord, sans réserve, avec tout ce que tu m'as dit dans tes
derniers messages, et je t'en remercie car ils m'ont appris des choses.
Je disais tout à l'heure que, pour apprendre, je me suis intéressé à
ta proposition du 22.10 à 10:21, qui ne fonctionnait pas chez moi, et
je voulais savoir pourquoi.
Ta proposition est rappelée ci-dessous, je l'ai juste transposée de
Word à Excel, pour des raisons de commodité tout à fait secondaires.
Si tu es intéressé, oublie le reste du fil,
les lignes qui suivent, à elles seules, résument le pb que j'ai eu, et
la solution que j'ai trouvée.

RAPPEL DU CODE EN CAUSE (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après l'exécution (en pas à pas) de f = Dir("*.xls")
(sans aller jusqu'à la ligne Workbooks.Open (f) ),
la valeur de f n'est jamais le nom d'un fichier .xls du répertoire
courant.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le "chemin" doit être spécifié :
Il faut écrire f = Dir(chemin & "*.xls")
et alors, le pb disparaît, et les valeurs successives de f
correspondent bien aux fichiers du répertoire spécifié dans chemin.
De plus, il faut aussi définir le répertoire avant d'ouvrir le fichier
f. Le code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche.
J'ai essayé d'être + clair et + simple dans le présent message,
si tu ne me comprends pas, c'est certainement que je m'explique mal.
De toute façon, merci encore pour tes réponses qui m'ont appris des
choses.
LANIMAL


Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son
fonctionnement.


Cordialement.

lSteph







Avatar
LANIMAL
Bonjour lSteph
E P I L O G U E :-) :-) :-)
Enfin !...
Le pb que j'avais est le suivant :
J'ai l'habitude de toujours ouvrir l'explorateur au démarrage du PC,
et d'y double-cliquer les fichiers que je désir ouvrir. Et ça, tu ne
pouvais le deviner.
Contrairement à ce que je croyais ( sans avoir jamais eu besoin de le
vérifier), cette méthode ne positionne pas le répertoire du fichier
ouvert comme "courant".
Le répertoire courant demeure ce qu'il était avant.
Voilà donc pourquoi, en ouvrant (par double-clic dans l'explorateur),
le classeur "Tests_macros.xls" dans un autre répertoire (D:...), je
listais souvent les fichiers de C:Mes Documents
Je découvre donc que seule,la méthode d'ouverture par
Menu Fichier / Ouvrir positionne le répertoire correspondant comme étant
le répertoire courant.
Mon explication est un peu prolixe pour te dire ce que tu aurais compris
en 3 mots... mais maintenant je fais attention d'être précis quitte à
être un peu long.
Excuse-moi d'avoir pris beaucoup de ton tps. Quant à moi, en persistant,
j'ai appris qqchose, qui m'explique maintenant qq curiosités que j'avais
déjà remarquées, sans les avoir comprises.
Une fois de +, Merci lSteph (je me répète encore !)
LANIMAL

;-)...par ailleurs il serait absurde d'avoir un pb de communication!

:| Non mais kékcékst'histoire



:D Amicalement.

@+

lSteph
LANIMAL avait écrit le 26/10/2006 :
Bonsoir
Je crois que maintenant on a un pb de communication ;-)
Je suis d'accord, sans réserve, avec tout ce que tu m'as dit dans tes
derniers messages, et je t'en remercie car ils m'ont appris des choses.
Je disais tout à l'heure que, pour apprendre, je me suis intéressé à
ta proposition du 22.10 à 10:21, qui ne fonctionnait pas chez moi, et
je voulais savoir pourquoi.
Ta proposition est rappelée ci-dessous, je l'ai juste transposée de
Word à Excel, pour des raisons de commodité tout à fait secondaires.
Si tu es intéressé, oublie le reste du fil,
les lignes qui suivent, à elles seules, résument le pb que j'ai eu, et
la solution que j'ai trouvée.

RAPPEL DU CODE EN CAUSE (re-situé dans Excel):
*****************************
Sub ToutleRepertoire()
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
*****************************

Après l'exécution (en pas à pas) de f = Dir("*.xls")
(sans aller jusqu'à la ligne Workbooks.Open (f) ),
la valeur de f n'est jamais le nom d'un fichier .xls du répertoire
courant.
Ne trouvant nulle part d'info sur Dir [:-( ], je suis allé sur :
http://www.clubinfolongueuil.qc.ca/ateliervbaexcel.html
où j'ai vu que le "chemin" doit être spécifié :
Il faut écrire f = Dir(chemin & "*.xls")
et alors, le pb disparaît, et les valeurs successives de f
correspondent bien aux fichiers du répertoire spécifié dans chemin.
De plus, il faut aussi définir le répertoire avant d'ouvrir le fichier
f. Le code devient alors :
****************
Sub ToutleRepertoire()
f = Dir(chemin & "*.xls")
Do While Len(f) > 0
ChDir chemin
Workbooks.Open (f)
'changeLh (macro qui ferme le fichier en fin d'exécution)
f = Dir
Loop
End Sub
***************
Bien évidemment, les 2 lignes
ChDir chemin
Workbooks.Open (f)
peuvent être remplacées par :
Workbooks.Open Filename:=chemin & f

C'est testé, ça marche.
J'ai essayé d'être + clair et + simple dans le présent message,
si tu ne me comprends pas, c'est certainement que je m'explique mal.
De toute façon, merci encore pour tes réponses qui m'ont appris des
choses.
LANIMAL


Bonsoir,
Désolé, je ne saisis plus quel code dont en cause ,

celui que j'ai donné pour lister les fichier du répertoire
en cours fonctionne, correctement il me semble.

Changer de chemin reste une faculté qui n'empêche pas son
fonctionnement.


Cordialement.

lSteph







1 2