Creation d'une boucle sur une liste de fichiers dans exel

Résolu
sheyko Messages postés 5 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013 - 15 déc. 2008 à 12:20
sheyko Messages postés 5 Date d'inscription vendredi 28 décembre 2012 Statut Membre Derniè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"
               
            End Select
       
        Next i
       
        FichDossier.Sheets("TERRAIN").Activate
        FichDossier.Close SaveChanges:=True

    End If
'Next j
Next
End Sub

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

6 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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"
               
                End Select
       
            Next i
       
            FichDossier.Sheets("TERRAIN").Activate
            FichDossier.Close SaveChanges:=True

        End If
    End if
'Next j
Next
End Sub

Pour plus de detail sur les options de Scripting.FileSystemObject tu aller faire un tour ICI

A+
3
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
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.

Amicalement
3
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
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.


Amicalement
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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+
0

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

Posez votre question
sheyko Messages postés 5 Date d'inscription vendredi 28 décembre 2012 Statut Membre Derniè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.

je vais qd meme faire le test.

en tout cas merci beaucoup pour vos reponses

Je fais le test et vous tient au courant.
0
sheyko Messages postés 5 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013
16 déc. 2008 à 13:03
effectivement, c'est ce que je penser, il me repasse tous les fichiers modifier une deuxieme et derniere fois.

Ce qui je conçois est deja bcp mieux. mon seul soucis est que j'ai env. 3 000 fichier a modifier comme ca.

on verra bien ce que ca dit.

merci
0
Rejoignez-nous