sheyko
Messages postés5Date d'inscriptionvendredi 28 décembre 2012StatutMembreDernière intervention 2 janvier 2013
-
15 déc. 2008 à 12:20
sheyko
Messages postés5Date d'inscriptionvendredi 28 décembre 2012StatutMembreDernière intervention 2 janvier 2013
-
16 déc. 2008 à 13:03
Bonjour,
J'aimerais creer une boucle dans exel qui me permette d'ouvrir tous les fichiers exel d'un repertoire et enregistre apres une petite modif
je met la partie de code deja faite (test de modif fait que sur un seul fichier d'ou le test du fichier FC5500.xls) :
Sub Macro2()
Dim i As Integer
Dim nb As Integer
Dim textbt As String
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("G:\facturation")
Set fc = f.Files
'nbfc = fc.Count
'For j = 1 To nbfc
For Each f1 In fc
If f1.Name = "FC5500.xls" Then
Set FichDossier = Workbooks.Open(f1)
nb = ActiveSheet.Shapes.Count
For i = 1 To nb
ActiveSheet.Shapes(i).Select
textbt = Selection.Characters.Text
Select Case textbt
Case "SAISIE BUREAU"
Selection.OnAction = "TEMPS.XLS!btSaisieFacture"
Case "SAISIE"
Selection.OnAction = "TEMPS.XLS!btSaisieFacture"
Case "FERMER FACTURE"
Selection.OnAction = "TEMPS.XLS!btFermerFacture"
Mon soucis et que dans le cas present la boucle ne s'arrete pas car apres avoir enregistrer mon fichier il le considere comme nouveau dans la liste et le reouvre.
j'aurais donc voulu savoir si je pouvais faire a la place de mon for each un for j=1 to fc.count ????
mais du coup je ne sais pas quoi mettre a la place de fi dans la ligne " Set FichDossier = Workbooks.Open(f1) ".
merci
A voir également:
Creation d'une boucle sur une liste de fichiers dans exel
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 15 déc. 2008 à 22:40
Re.
cela devrait faire un truc comme ça :
ub Macro2()
Dim i As Integer
Dim nb As Integer
Dim textbt As String
Dim fs, f, f1, fc, s
Dim StartingDate As Variant
StartingDate = Now
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("G:\facturation")
Set fc = f.Files
'nbfc = fc.Count
'For j = 1 To nbfc
For Each f1 In fc
If f1.DateLastModified < StartingDate Then
If f1.Name = "FC5500.xls" Then
Set FichDossier = Workbooks.Open(f1)
nb = ActiveSheet.Shapes.Count
For i = 1 To nb
ActiveSheet.Shapes(i).Select
textbt = Selection.Characters.Text
Select Case textbt
Case "SAISIE BUREAU"
Selection.OnAction = "TEMPS.XLS!btSaisieFacture"
Case "SAISIE"
Selection.OnAction = "TEMPS.XLS!btSaisieFacture"
Case "FERMER FACTURE"
Selection.OnAction = "TEMPS.XLS!btFermerFacture"
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 16 déc. 2008 à 02:21
Bonjour Bigfish_le_vrai
J'aime énormément ta solution et je la trouve très élégante.
Mais d'après les ennuis rencontrés par sheyko, il semble qu'il y ait quelque confusion dans la collection Files lorsque l'on met à jour des fichiers.
Ta modif est très bonne, puisqu'elle empêche un fichier d'être modifié plus d'une fois. Mais ne crois-tu pas que ce serait prudent de s'assurer à la fin que tous les fichiers ont été modifiés ? Simplement en comptant les fichiers lors de leur modification puis en comparant le nombre de fichiers modifiés avec le fc.Count initial ?
En effet, je me demande si, lorsqu'un fichier revient une deuxième fois dans la collection, ce n'est pas à la place d'un autre fichier...
Désolé, j'ai l'impression de ne pas être tellement clair.
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 15 déc. 2008 à 20:07
Bonjour sheyko
Je serais plutôt d'avis de dresser une liste des fichiers dans un tableau et de travailler sur cette liste : aucun risque d'ouvrir deux fois le même fichier.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 15 déc. 2008 à 22:16
Salut,
sinon tu pourrais verifier l'heure de creation ou de modification du fichier et la comparer a l'heure a la quelle tu as commencer ta boucle si l'heure est anterieur tu ouvre et tu modifi.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
sheyko
Messages postés5Date d'inscriptionvendredi 28 décembre 2012StatutMembreDernière intervention 2 janvier 2013 16 déc. 2008 à 12:57
Bonjour et merci a vous
Alors pour repondre a [auteur/OROHENA/1483575.aspx Orohena], c'est ce a quoi j'avais penser mais mon soucis est que je ne trouve pas la syntaxe qui va me remplacer f1.
j'ai essayer fc(i).name ou .item(i) et 2 3 autre mais ca me donne rien qui ressemble a la valeur de f1 creer par mon For Each f1 In fc qui est "C:\......\.....xls"
de plus j'ai fait le test sur 5 fichiers et en fait il me passe mes X (ex : 2) fichiers puis celui a modifier puis les X (ex: les 2 qui reste) autres puis il refait celui qu'il a modifier puis une fois fermer il le refait etc....
et pour repondre a [auteur/BIGFISHLEVRAI/510670.aspx bigfish_le vrai] c'est une solution a la qu'elle j'avais pas penser.
Mais je me demande si même en testant l'heure il ne va pas quand même repasser 1 fois de plus tous les fichiers modifier qui effectivement ne les réouvrira pas. Et donc ne les repassera pas une 3eme fois.
ceci dit il les repasseras tous quand meme une deuxieme fois.