OVH Cloud OVH Cloud

fichier Excel de synthèse

19 réponses
Avatar
William
Bonjour,

Je souhaiterai faire un tableau de synthèse de données se trouvant sur
d'autres fichiers excel. Jusque là, vous allez dire que c'est fingers in the
nose.
But il y a une petite difficulté :
les fichiers qui me serviront de sources, ont pour nom une variable :
nom = Format(Now, "yyyy-MM-dd_hh""h""mm""m""ss""s") & _
ActiveSheet.Range("A1").Text & ActiveSheet.Name & ".xls"

Et je voudrais que le tableau de synthèse me donne les informations se
situant que sur les fichiers excel d'un même jour avec un seul type
d'informations qui se situe dans A1 et un nom de feuille spécifique.

A noter que dans A1 et le nom de feuille, il n'y a respectivement que 3 et 5
informations différentes CONNUES.

Le but de ce tableau de synthèse est d'avoir le suivi de production d'une
journée pour une machine (nom de feuille) d'un secteur (A1). Donc il faut
que mes informations s'inscrivent de façon chronologique ==> un paramètre
enregistré sur telle feuille, à côté du même paramètre enregistré mais de la
feuille h+1.

(jour J ; H) (jour J ;H+1)
Param1 5 5.5
Param2 5.1 5.4

D'où 2 problèmes :
- Comment appeler précisement une feuille avec une variable comme nom mais
dont on connaît une partie du nom (comme le jour et A1 et le nom de la
feuille).
- Quelle formule utilisée pour décalée la formule ci-dessus afin d'avoir le
tableau comme je le souhaite ?


William

9 réponses

1 2
Avatar
michdenis
Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle fait appel à une fonction extérieure pour
traitement, et bien au retour du traitement, la fonction Dir() et vide ... et la boucle s'arrête. Le fait d'utiliser une
fonction externe à la procédure fait perdre le "fil" au contenu renvoyer par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a une explication ?


C'était le problème que soulevait ces 2 procédures ! au lieu d'utiliser DIR(), j'ai choisi une approche avec FileSearch
et tout fonctionne normalement.


Salutations!

'---------------------------------------
sub LaSub()

file = Dir(Path & "*.xls")
Do While file <> ""
If Len(file) - Len(Application.Substitute(file, "_", "")) = 3 Then
If Val(Split(file, "_")(2)) = Jour Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
End If
End If
file = Dir()
Loop
End Sub

'------------------------
Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref) As Variant

'Traitement

End Function
'------------------------



"William" a écrit dans le message de news:
En fait, il fait le loop mais il met zéro en résultat dans B1



"William" a écrit dans le message de news:

Fichier exemple bien reçu

Bon, j'en connais un qui va s'arracher les cheveux

Mais avant de te dire le problème (je sens le stress qui monte...), je
suppose que la macro qu'il y a sur le fichier 2004-01-14....xls n'est pas
pour moi ?

En fait, ton exemple a bien marcher....(il y a un "mais" qui arrive)
Mais (j'avais raison!!!!) tu as pris comme variable le chiffre 14 présent
dans le fichier 2004-01-14...., j'ai donc voulu essayé avec un autre
fichier

sans le nombre 14 mais 2004-07-13.....
==> il me sors le nombre qui est en A1 de TON fichier càd 2004-01-14...

En fait, ca a très bien marché dès lors que j'ai vu qu'il fallait aussi
changé le 2ème "14" qui était passé inaperçu

En conclusion de ce premier problème, le fait de changer "Jour" par le
nombre recherché, a très bien fonctionné.

En revanche, le "loop" n'a pas fonctionné càd qu'il ne me marque qu'une
valeur en B1 et rien d'autre (pas les valeurs de A1 se situant dans les
autres fichiers contenant le nombre "13") ; je pense que ça vient du X+1

William

PS: pour ceux qui suivent la discussion, voici donc le code de michdenis
qui

a marché

'-------------------------------------------
Sub TrouverMaValeur()

Dim Path As String, file As String
Dim Feuille As String, Ref As String
Dim Jour As Integer, X As Integer

'*******Variables à déterminer********

Jour = 13 ' à déterminer
Path = "P:test" ' à déterminer
Feuille = "Fiche de travail RTB"
Ref = Range("A1").Address

'*******Variables à déterminer********
'merci à michdenis

file = Dir(Path & "*.xls")
Do While file <> ""
If Len(file) - Len(Application.Substitute(file, "-", "")) = 2 Then
If Val(Split(file, "-")(2)) = 13 Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("C" & X) = _
GetValue(Path, file, Feuille, Ref)
End If
End If
file = Dir()
Loop
End Sub
'-------------------------------------------------
Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref)
As

Variant

' Macro XL4 Merci à John Walkenbach
' ============================= > ' Retrieves a value from a closed workbook
Dim Arg As String
' Make sure the file exists
If Right(Path, 1) <> "" Then Path = Path & ""
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

' Create the argument
Arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(Ref).Range("A1").Address(, , xlR1C1)

'Execute an XLM macro
GetValue = Application.ExecuteExcel4Macro(Arg)
DoEvents
End Function
'-------------------------------------------





"michdenis" a écrit dans le message de news:


Fichier exemple envoyé.


Salutations!



"William" a écrit dans le message de
news:

Bonjour Michel,

je serais bien tenté par ta proposition de m'envoyer un exemple.

Je comprends pas ce qui cloche :
Je colle bien ton Sub et ta Public fonction, je renseigne les variables
entre les 2 lignes de ******* et j'exécute la macro TrouverMaValeur(),
mais

il ne marque rien!!! même pas un petit message d'erreur (qui sont
d'habitude si crispant)

Ne devrais-je pas changer les "sheet" de la Public Fonction ??
Est-ce que j'exécute mal le module ??

En espérant ne pas t'exaspérer...

William


"michdenis" a écrit dans le message de news:

Bonjour William,

Essaie ceci, j'ai seulement modifier un truc pour tenir compte de ta
chaîne de caractères des noms de fichiers.


Sur demande, je t'envoie un exemple...


'-------------------------------------------
Sub TrouverMaValeur()

Dim Path As String, file As String
Dim Feuille As String, Ref As String
Dim Jour As Integer, X As Integer

'*******Variables à déterminer********

Jour = 14 ' à déterminer
Path = "C:Excel" ' à déterminer
Feuille = "Fiche de travail RTB"
Ref = Range("A1").Address

'*******Variables à déterminer********

file = Dir(Path & "*.xls")
Do While file <> ""
If Len(file) - Len(Application.Substitute(file, "-", "")) = 2 Then
If Val(Split(file, "-")(2)) = 14 Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
End If
End If
file = Dir()
Loop
End Sub
'-------------------------------------------------
Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant

' Macro XL4 Merci à John Walkenbach
' ============================= > > > ' Retrieves a value from a closed workbook
Dim Arg As String
' Make sure the file exists
If Right(Path, 1) <> "" Then Path = Path & ""
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

' Create the argument
Arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(Ref).Range("A1").Address(, , xlR1C1)

'Execute an XLM macro
GetValue = Application.ExecuteExcel4Macro(Arg)
DoEvents
End Function
'-------------------------------------------


Salutations!




"William" a écrit dans le message de
news:

La procédure que tu m'as donné devrait, en effet, marcher. J'arrive à
la



suivre, à la comprendre mais je dois me rater qque part.

à cette fonction, j'ai ajouté la variable JOUR et cela était pour
extraire


seulement certains fichiers qui avaient dans
leur nom (format date) un jour (dd) particulier sans tenir compte du
mois


ou de l'année.

Exactement ce que je voulais.

Il me semble que c'est un problème de syntaxe des éléments que j'ai à
définir.

Concernant la cellule A1, 3 possibilités : groupe 3000, groupe 5000 et
groupe 7000 (donc toujours le mot "groupe")
Concernant l'apparence des noms des feuilles voici un exemple : "Fiche
de


travail RTB" les autres noms étant de cet accabit ; auccun mot
réccurent


mais les noms sont tous connues et c'est un des éléments qui me
permettra


une ségrégation des infos.

Et voici des noms de fichiers :
2004-07-09_17h01m45sGroupe 5000Fiche de travail RTB.xls
2004-07-09_16h56m32sGroupe 3000Fiche de travail RTB.xls
2004-07-09_16h41m04sGroupe 5000Fiche de travail RTB.xls


A noter que j'avais bien remplit les variables à déterminer, comme
ceci



:
Jour = 09 ' à déterminer
Path = "P:CONTROLESPRODUCTION"
Feuille = "Fiche de travail RTB"
Ref = Range("A1").Address ==> et pas "groupe 5000" comme dans
mon



post
précédent où il y a eu un mauvais couper-coller

Oublierais-je des choses à faire dans le reste de la formule?

j'espère que je n'oublie rien

William


"michdenis" a écrit dans le message de news:

Bonjour William,

Ceci détermine le nom de ton classeur :

nom = Format(Now, "yyyy-MM-dd_hh""h""mm""m""ss""s") & _
ActiveSheet.Range("A1").Text & ActiveSheet.Name & ".xls"


Si tu me donnais en clair à quoi ressemble la chaîne de caractères
représentant le nom de 2 ou 3 classeurs, cela

faciliterait la tâche pour savoir comment extraire le nom de la
feuille



de
l'ensemble de la chaîne. Que contient la
cellule A1 et quelle apprence ont le noms de tes feuilles ?

En principe c'est "facile" la procédure "TrouverMaValeur" extrait la
valeur d'un fichier à partir des paramêtres de

cette fonction : GetValue(Path, file, Feuille, Ref) , il s'agit
donc




que
tu renseignes (définissent) chaque élément de
cette fonctiion avant de l'appeler.

PATH = Chemin et répertoire où se trouve tes fichiers
File = Nom du fichier
Feuille = Nom de la feuille
Ref = référence à une adresse particulière d'une cellule.

à cette fonction, j'ai ajouté la variable JOUR et cela était pour
extraire


seulement certains fichiers qui avaient dans
leur nom (format date) un jour (dd) particulier sans tenir compte du
mois


ou de l'année.


'-------------------------------------------------
Sub TrouverMaValeur()

Dim Path As String, file As String
Dim Feuille As String, Ref As String
Dim Jour As Integer, X As Integer

'*******Variables à déterminer********

Jour = 25 ' à déterminer
Path = "C:Excel"
Feuille = "Feuil1"
Ref = Range("A1").Address

'*******Variables à déterminer********

file = Dir(Path & "*.xls")
Do While file <> ""
If Len(file) - Len(Application.Substitute(file, "-", "")) = Jour
Then


If Val(Split(file, "-")(2)) = Jour Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
End If
End If
file = Dir()
Loop
End Sub
'-------------------------------------------------
Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant

' Macro XL4 Merci à John Walkenbach
' ============================= > > > > ' Retrieves a value from a closed workbook
Dim Arg As String
' Make sure the file exists
If Right(Path, 1) <> "" Then Path = Path & ""
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

' Create the argument
Arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(Ref).Range("A1").Address(, , xlR1C1)

'Execute an XLM macro
GetValue = Application.ExecuteExcel4Macro(Arg)
DoEvents

End Function
'-------------------------------------------------


Salutations!


















Avatar
Alain CROS
Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref) As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news: e$
Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle fait appel à une fonction extérieure pour
traitement, et bien au retour du traitement, la fonction Dir() et vide ... et la boucle s'arrête. Le fait d'utiliser une
fonction externe à la procédure fait perdre le "fil" au contenu renvoyer par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a une explication ?



Avatar
michdenis
Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction benoîtement !!!

;-))


Salutations!



"Alain CROS" a écrit dans le message de news:
Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref) As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news: e$
Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle fait appel à une fonction extérieure pour
traitement, et bien au retour du traitement, la fonction Dir() et vide ... et la boucle s'arrête. Le fait d'utiliser
une

fonction externe à la procédure fait perdre le "fil" au contenu renvoyer par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a une explication ?



Avatar
William
Merci michel

ca marche très bien

je te remercie du mal que tu t'es donné

William

PS: je n'ai pas répondu avant car j'ai fait le pont


"michdenis" a écrit dans le message de news:

Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction
benoîtement !!!


;-))


Salutations!



"Alain CROS" a écrit dans le message de
news:

Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref)
As Variant

...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news:
e$

Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle
fait appel à une fonction extérieure pour


traitement, et bien au retour du traitement, la fonction Dir() et vide
... et la boucle s'arrête. Le fait d'utiliser


une
fonction externe à la procédure fait perdre le "fil" au contenu renvoyer
par la fonction dir()



C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a une
explication ?










Avatar
William
Bonjour,

A quel niveau dois-je changer la macro si, à la place du jour, je souhaite
trouver l'année ou le mois ou une autre chaîne de caractères (càd année+mois
ou mois+jour...) ?


Autre chose (mais juste par curiosité afin que je cerne mieux VB) :

Je comprens le début de la macro jusqu'à Nb = .FoundFiles.count
mais après je ne comprend pas les lignes qui suivent jusqu'à X = X+1 (que je
comprend).

Dans file = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A), "")))
que doit renvoyer le ?

Dans Len(file) - Len(Application.Substitute(file, "-", ""))
Que doit renvoyer (file, "-", "") ?

Pourquoi Len(file) - Len(Application.Substitute(file, "-", "")) doit être
égal à 2 ?

Encore une fois, ce n'est que de la curiosité....si ca doit demander 3
heures pour répondre, je me contenteraie de la macro : je peux m'arranger
pour trouver les données qu'il me faut en classant les fichiers par ordre
chrono.

William



"William" a écrit dans le message de news:

Merci michel

ca marche très bien

je te remercie du mal que tu t'es donné

William

PS: je n'ai pas répondu avant car j'ai fait le pont


"michdenis" a écrit dans le message de news:

Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction
benoîtement !!!


;-))


Salutations!



"Alain CROS" a écrit dans le message de
news:

Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news:
e$

Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle
fait appel à une fonction extérieure pour


traitement, et bien au retour du traitement, la fonction Dir() et vide
... et la boucle s'arrête. Le fait d'utiliser


une
fonction externe à la procédure fait perdre le "fil" au contenu
renvoyer



par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a
une



explication ?












Avatar
michdenis
Bonjour William,

Si le nombre de fichier trouvé >0
If .Execute(msoSortByFileName) > 0 Then
'Affecte nb du nombre de fichiers trouvés
Nb = .FoundFiles.Count
'Début de boucle pour tous les fichiers trouvés
For A = 1 To Nb
'Extrait le nom du fichier de la chaîne de caractères représentant
'Chemin du fichier et nom du fichier

'la fonction Split : Scinde la chaîne de caractère selon le symbole "" retenu
'Chaque section de la chaîne scindée est mise dans un tableau
File = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A), "")))

Une autre façon d'écrire la ligne précédente :
G contient un tableau de la chaîne chemin et fichier
G = Split(.FoundFiles(A), "")
for A = 0 to Ubound(G)
Msgbox G(a)
next

File = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A), "")))
'OU c'est la même chose
File = G(UBound(G))

'La ligne suivante c'est seulement le critère que j'ai retenu pour être
"certain" que tu avais une date (présence de 2 "-" dans le nom du fichier
If Len(File) - Len(Application.Substitute(File, "-", "")) = 2 Then

'Même chose que précédemment dans l'usage de la fonction split
'La présence de la fonction "Val" permet de retenir que le chiffre
'
'Split(File, "-")(2) Extrait cette chaîne
"09_17h01m45sGroupe 5000Fiche de travail RTB.xls"


Val(Split(File, "-")(2))
'En ajoutant la fonction "Val", on obtient 9,
'9 représente le jour.
'si tu veux extraire le mois, tu modifies le 2 pour 1
'Si tu veux extraire l'année, tu modifies le 2 pour 0
'Supplément d'info. de la fonction Val dans l'aide

If Val(Split(File, "-")(2)) = Jour Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, File, Feuille, Ref)
End If
End If
Next
End If



Salutations!


"William" a écrit dans le message de news:
Bonjour,

A quel niveau dois-je changer la macro si, à la place du jour, je souhaite
trouver l'année ou le mois ou une autre chaîne de caractères (càd année+mois
ou mois+jour...) ?


Autre chose (mais juste par curiosité afin que je cerne mieux VB) :

Je comprens le début de la macro jusqu'à Nb = .FoundFiles.count
mais après je ne comprend pas les lignes qui suivent jusqu'à X = X+1 (que je
comprend).

Dans file = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A), "")))
que doit renvoyer le ?

Dans Len(file) - Len(Application.Substitute(file, "-", ""))
Que doit renvoyer (file, "-", "") ?

Pourquoi Len(file) - Len(Application.Substitute(file, "-", "")) doit être
égal à 2 ?

Encore une fois, ce n'est que de la curiosité....si ca doit demander 3
heures pour répondre, je me contenteraie de la macro : je peux m'arranger
pour trouver les données qu'il me faut en classant les fichiers par ordre
chrono.

William



"William" a écrit dans le message de news:

Merci michel

ca marche très bien

je te remercie du mal que tu t'es donné

William

PS: je n'ai pas répondu avant car j'ai fait le pont


"michdenis" a écrit dans le message de news:

Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction
benoîtement !!!


;-))


Salutations!



"Alain CROS" a écrit dans le message de
news:

Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news:
e$

Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la boucle
fait appel à une fonction extérieure pour


traitement, et bien au retour du traitement, la fonction Dir() et vide
... et la boucle s'arrête. Le fait d'utiliser


une
fonction externe à la procédure fait perdre le "fil" au contenu
renvoyer



par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a
une



explication ?












Avatar
William
bonjour,

merci michel

William


"michdenis" a écrit dans le message de news:

Bonjour William,

Si le nombre de fichier trouvé >0
If .Execute(msoSortByFileName) > 0 Then
'Affecte nb du nombre de fichiers trouvés
Nb = .FoundFiles.Count
'Début de boucle pour tous les fichiers trouvés
For A = 1 To Nb
'Extrait le nom du fichier de la chaîne de caractères
représentant

'Chemin du fichier et nom du fichier

'la fonction Split : Scinde la chaîne de caractère selon le
symbole "" retenu

'Chaque section de la chaîne scindée est mise dans un tableau
File = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A),
"")))


Une autre façon d'écrire la ligne précédente :
G contient un tableau de la chaîne chemin et fichier
G = Split(.FoundFiles(A), "")
for A = 0 to Ubound(G)
Msgbox G(a)
next

File = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A),
"")))

'OU c'est la même chose
File = G(UBound(G))

'La ligne suivante c'est seulement le critère que j'ai retenu
pour être

"certain" que tu avais une date (présence de 2 "-" dans le nom
du fichier

If Len(File) - Len(Application.Substitute(File, "-", "")) = 2
Then


'Même chose que précédemment dans l'usage de la
fonction split

'La présence de la fonction "Val" permet de retenir
que le chiffre

'
'Split(File, "-")(2) Extrait cette chaîne
"09_17h01m45sGroupe 5000Fiche de travail RTB.xls"


Val(Split(File, "-")(2))
'En ajoutant la fonction "Val", on obtient 9,
'9 représente le jour.
'si tu veux extraire le mois, tu modifies le 2 pour 1
'Si tu veux extraire l'année, tu modifies le 2 pour 0
'Supplément d'info. de la fonction Val dans l'aide

If Val(Split(File, "-")(2)) = Jour Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, File, Feuille, Ref)
End If
End If
Next
End If



Salutations!


"William" a écrit dans le message de
news:

Bonjour,

A quel niveau dois-je changer la macro si, à la place du jour, je souhaite
trouver l'année ou le mois ou une autre chaîne de caractères (càd
année+mois

ou mois+jour...) ?


Autre chose (mais juste par curiosité afin que je cerne mieux VB) :

Je comprens le début de la macro jusqu'à Nb = .FoundFiles.count
mais après je ne comprend pas les lignes qui suivent jusqu'à X = X+1 (que
je

comprend).

Dans file = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A), "")))
que doit renvoyer le ?

Dans Len(file) - Len(Application.Substitute(file, "-", ""))
Que doit renvoyer (file, "-", "") ?

Pourquoi Len(file) - Len(Application.Substitute(file, "-", "")) doit être
égal à 2 ?

Encore une fois, ce n'est que de la curiosité....si ca doit demander 3
heures pour répondre, je me contenteraie de la macro : je peux m'arranger
pour trouver les données qu'il me faut en classant les fichiers par ordre
chrono.

William



"William" a écrit dans le message de news:

Merci michel

ca marche très bien

je te remercie du mal que tu t'es donné

William

PS: je n'ai pas répondu avant car j'ai fait le pont


"michdenis" a écrit dans le message de news:

Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction
benoîtement !!!


;-))


Salutations!



"Alain CROS" a écrit dans le message de
news:

Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news:
e$

Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la
boucle




fait appel à une fonction extérieure pour
traitement, et bien au retour du traitement, la fonction Dir() et
vide




... et la boucle s'arrête. Le fait d'utiliser
une
fonction externe à la procédure fait perdre le "fil" au contenu
renvoyer



par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un a
une



explication ?

















Avatar
William
Bonjour,

Histoire de montrer mes progrès en VBA, voici le code avec comme
modification, la possibilité de choisir un jour ET un mois.

Sub TrouverMaValeur()

Dim Path As String, file As String
Dim Feuille As String, Ref As String
Dim Jour As Integer, X As Integer
Dim A As Integer, Nb As Integer

'*******Variables à déterminer********

Jour = 20 ' à déterminer
mois = 7 ' à déterminer
Path = "P:CONTROLESPRODUCTION" ' à déterminer
Feuille = "Rinceuse tireuse boucheuse"
Ref = Range("A1").Address

'*******Variables à déterminer********

With Application.FileSearch
.NewSearch
.LookIn = Path
.FileType = msoFileTypeExcelWorkbooks
If .Execute(msoSortByFileName) > 0 Then
Nb = .FoundFiles.Count
For A = 1 To Nb
file = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A),
"")))
If Len(file) - Len(Application.Substitute(file, "-", "")) = 2
Then
If Val(Split(file, "-")(2)) = Jour Then
If Val(Split(file, "-")(1)) = mois Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
End If
End If
End If
Next
End If
End With

End Sub


Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal Ref) As
Variant

' Macro XL4 Merci à John Walkenbach
' ============================= ' Retrieves a value from a closed workbook
Dim Arg As String
' Make sure the file exists
If Right(Path, 1) <> "" Then Path = Path & ""
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

' Create the argument
Arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(Ref).Range("A1").Address(, , xlR1C1)

'Execute an XLM macro
GetValue = Application.ExecuteExcel4Macro(Arg)
DoEvents
End Function


ca peut paraître tout con pour des experts ès Excel mais pour un novice qui
a débuté le 1er juillet, je suis assez content d'avoir compris la logique
VBA.

En effet, le 1er juillet, alors que je n'y connaissais rien de rien en VBA,
j'ai demandé de butte-en-blanc comment créer un formulaire de contrôles
production avec pleins de checkbox, de macros et autres trucs bizarres.
Michdenis m'avait alors dit de procéder étape par étape et de poser des
questions au cas où.

20 jours plus tard, mon formulaire est créé (avec environs 10 users, des
checkbox qui se grisent quand on en coche d'autres, des boutons de
commandes, des liste...), il est opérationnel, s'enregistre sous la date et
l'heure du jour et un fichier de synthèse compile tout ça...de quoi
impressionner mon boss!!!!

Non, je ne dis pas ca pour me faire mousser mais pour remercier le MPFE et
toutes les personnes qui m'ont aidé à réaliser ce projet (et ce, dans des
délais que je n'imaginais pas aussi court!!!!).

Donc un grand merci à tous et en particulier à michdenis.

La prochaine étape, pour moi (au niveau de MPFE), est d'essayer de faire
comme ceux qui m'ont aidé, c'est-à-dire aider les autres.

William




"William" a écrit dans le message de news:
#
bonjour,

merci michel

William


"michdenis" a écrit dans le message de news:

Bonjour William,

Si le nombre de fichier trouvé >0
If .Execute(msoSortByFileName) > 0 Then
'Affecte nb du nombre de fichiers trouvés
Nb = .FoundFiles.Count
'Début de boucle pour tous les fichiers trouvés
For A = 1 To Nb
'Extrait le nom du fichier de la chaîne de caractères
représentant

'Chemin du fichier et nom du fichier

'la fonction Split : Scinde la chaîne de caractère selon le
symbole "" retenu

'Chaque section de la chaîne scindée est mise dans un
tableau


File = Split(.FoundFiles(A),
"")(UBound(Split(.FoundFiles(A),


"")))

Une autre façon d'écrire la ligne précédente :
G contient un tableau de la chaîne chemin et fichier
G = Split(.FoundFiles(A), "")
for A = 0 to Ubound(G)
Msgbox G(a)
next

File = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A),
"")))

'OU c'est la même chose
File = G(UBound(G))

'La ligne suivante c'est seulement le critère que j'ai
retenu


pour être
"certain" que tu avais une date (présence de 2 "-" dans le
nom


du fichier
If Len(File) - Len(Application.Substitute(File, "-", "")) 2
Then


'Même chose que précédemment dans l'usage de la
fonction split

'La présence de la fonction "Val" permet de retenir
que le chiffre

'
'Split(File, "-")(2) Extrait cette chaîne
"09_17h01m45sGroupe 5000Fiche de travail RTB.xls"


Val(Split(File, "-")(2))
'En ajoutant la fonction "Val", on obtient 9,
'9 représente le jour.
'si tu veux extraire le mois, tu modifies le 2 pour
1


'Si tu veux extraire l'année, tu modifies le 2 pour 0
'Supplément d'info. de la fonction Val dans l'aide

If Val(Split(File, "-")(2)) = Jour Then
X = X + 1
'Où la copie aura lieu ... à déterminer
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, File, Feuille, Ref)
End If
End If
Next
End If



Salutations!


"William" a écrit dans le message de
news:

Bonjour,

A quel niveau dois-je changer la macro si, à la place du jour, je
souhaite


trouver l'année ou le mois ou une autre chaîne de caractères (càd
année+mois

ou mois+jour...) ?


Autre chose (mais juste par curiosité afin que je cerne mieux VB) :

Je comprens le début de la macro jusqu'à Nb = .FoundFiles.count
mais après je ne comprend pas les lignes qui suivent jusqu'à X = X+1
(que


je
comprend).

Dans file = Split(.FoundFiles(A), "")(UBound(Split(.FoundFiles(A),
"")))


que doit renvoyer le ?

Dans Len(file) - Len(Application.Substitute(file, "-", ""))
Que doit renvoyer (file, "-", "") ?

Pourquoi Len(file) - Len(Application.Substitute(file, "-", "")) doit
être


égal à 2 ?

Encore une fois, ce n'est que de la curiosité....si ca doit demander 3
heures pour répondre, je me contenteraie de la macro : je peux
m'arranger


pour trouver les données qu'il me faut en classant les fichiers par
ordre


chrono.

William



"William" a écrit dans le message de
news:



Merci michel

ca marche très bien

je te remercie du mal que tu t'es donné

William

PS: je n'ai pas répondu avant car j'ai fait le pont


"michdenis" a écrit dans le message de news:

Bonjour Alain,


Merci de pour ton intervention. Tu as parfaitement raison.

C'est ce qui arrive lorsque l'on se contente de copier une fonction
benoîtement !!!


;-))


Salutations!



"Alain CROS" a écrit dans le message de
news:

Bonjour.

Le problème vient du fait que tu utilise 2 fois la fonction Dir.

Sub TrouverMaValeur()
...
file = Dir(Path & "*.xls")
Do While file <> ""
...
ThisWorkbook.Worksheets("Feuil1").Range("B" & X) = _
GetValue(Path, file, Feuille, Ref)
...
file = Dir()
Loop
End Sub

puis

Public Function GetValue(ByVal Path, ByVal file, ByVal sheet, ByVal
Ref)


As Variant
...
If Dir(Path & file) = "" Then
...
End Function

Dans la fonction Getvalue, le Dir est réinitialisé.

Alain CROS

"michdenis" a écrit dans le message de news:
e$

Dernier exemplaire du fichier envoyé avec correction.


Un appel lancé à tous : Est-ce que vous saviez que :

Si on utilise DIR() une boucle sur un répertoire donné, si la
boucle




fait appel à une fonction extérieure pour
traitement, et bien au retour du traitement, la fonction Dir() et
vide




... et la boucle s'arrête. Le fait d'utiliser
une
fonction externe à la procédure fait perdre le "fil" au contenu
renvoyer



par la fonction dir()

C'est quand même singulier comme phénomène ! Est-ce que quelqu'un
a





une
explication ?





















Avatar
jps
eh ben tu vois, william, moi c'est aussi le 1er juillet que j'ai démarré en
VBA...mais c'était en 1984 et je vais te dire, 20 ans plus tard, je n'arrive
toujours pas à créer le moindre formulaire, même que je fais venir michdenis
le québécois tout le mois d'août pour remplir ma tête...et vider ma cave...
jps

"William" a écrit dans le message de
news:%

Histoire de montrer mes progrès en VBA, voici le code avec comme
modification, la possibilité de choisir un jour ET un mois.
En effet, le 1er juillet, alors que je n'y connaissais rien de rien en
VBA,

j'ai demandé de butte-en-blanc....(NDLR : tu habites montmartre, william
ou bien?)

20 jours plus tard, mon formulaire est créé


1 2