Problème code VBA gestion dossier
Bonjour,
j'ai besoin d'afficher un certains nombre de fichiers à partir de la date saisie par l'utilisateur. par exemple l'utilisateur saisit 01/01/2013, tous les fichiers dont la date de modification est supérieure à cette date doivent s'afficher.mon souci c'est que je n'arrive pas à contrôler le cas ou aucun fichier ne répond à ce critère.
voici un bout du code si ça peut servir.
If Date_Fic <= VBA.Int(VBA.CDate(FichierCourant.ModifDern)) Then
If VBA.InStr(FichierCourant.Proprietaire, "\") Then
Proprietaire = VBA.Split(FichierCourant.Proprietaire, "\")
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
'RgDeb.Offset(ICollec, COL_FICH_TYPE) = FichierCourant.Typ
'RgDeb.Offset(ICollec, COL_FICH_ATTRIB) = FichierCourant.Attrib
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
'RgDeb.Offset(ICollec, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = Proprietaire(1)
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSS) = FichierCourant.SousDoss
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSSRG) = FichierCourant.SousDossRg
'RgDeb.Offset(ICollec, COL_FICH_MODIF30) = FichierCourant.Modif30
'RgDeb.Offset(ICollec, COL_FICH_MODIF06) = FichierCourant.Modif06
comp = comp + 1
Else
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
comp = comp + 1
End If
If comp = 32000 Then
Call Feuillesuiv(nb)
comp = 1
nb = nb + 1
End If
End If
' If Date_Fic > VBA.Int(VBA.CDate(FichierCourant.ModifDern)) Then
'
' comp = 0
' MsgBox "Aucun fichier à afficher après cette date"
'
' End If
merci à vous
bonjour,
peux-tu fournir le code incluant la boucle ?
Ton test sur le nombre de fichiers correspondant au critère doit se faire après l'exécution de la boucle.
Voici le code incluant la boucle:
For ICollec = 1 To eCollectionFichier.Count
Set FichierCourant = eCollectionFichier.Item(ICollec)
Set fso = New Scripting.FileSystemObject
strFile = FichierCourant.Chemin
Set fle = fso.GetFile(strFile)
FichierCourant.ModifDern = fle.DateLastModified
If Date_Fic <= VBA.Int(VBA.CDate(FichierCourant.ModifDern)) Then
If VBA.InStr(FichierCourant.Proprietaire, "\") Then
Proprietaire = VBA.Split(FichierCourant.Proprietaire, "\")
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
'RgDeb.Offset(ICollec, COL_FICH_TYPE) = FichierCourant.Typ
'RgDeb.Offset(ICollec, COL_FICH_ATTRIB) = FichierCourant.Attrib
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
'RgDeb.Offset(ICollec, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = Proprietaire(1)
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSS) = FichierCourant.SousDoss
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSSRG) = FichierCourant.SousDossRg
'RgDeb.Offset(ICollec, COL_FICH_MODIF30) = FichierCourant.Modif30
'RgDeb.Offset(ICollec, COL_FICH_MODIF06) = FichierCourant.Modif06
comp = comp + 1
Else
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
comp = comp + 1
End If
If comp = 32000 Then
Call Feuillesuiv(nb)
comp = 1
nb = nb + 1
End If
End If
' If Date_Fic > VBA.Int(VBA.CDate(FichierCourant.ModifDern)) Then
'
' comp = 0
' MsgBox "Aucun fichier à afficher après cette date"
'
' End If
Next
bonjour,
voici comment j'adapterai ce code, sur base de l'info que tu as fournie, à tester
For ICollec = 1 To eCollectionFichier.Count
Set FichierCourant = eCollectionFichier.Item(ICollec)
Set fso = CreateObject("Scripting.FileSystemObject")
strFile = FichierCourant.Chemin
Set fle = fso.GetFile(strFile)
FichierCourant.ModifDern = fle.DateLastModified
If Date_Fic <= VBA.Int(VBA.CDate(FichierCourant.ModifDern)) Then
If VBA.InStr(FichierCourant.Proprietaire, "\") Then
Proprietaire = VBA.Split(FichierCourant.Proprietaire, "\")
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
'RgDeb.Offset(ICollec, COL_FICH_TYPE) = FichierCourant.Typ
'RgDeb.Offset(ICollec, COL_FICH_ATTRIB) = FichierCourant.Attrib
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
'RgDeb.Offset(ICollec, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = Proprietaire(1)
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSS) = FichierCourant.SousDoss
'RgDeb.Offset(ICollec, COL_FICH_SOUSDOSSRG) = FichierCourant.SousDossRg
'RgDeb.Offset(ICollec, COL_FICH_MODIF30) = FichierCourant.Modif30
'RgDeb.Offset(ICollec, COL_FICH_MODIF06) = FichierCourant.Modif06
comp = comp + 1
Else
RgDeb.Offset(comp, COL_FICH_NOM) = FichierCourant.Nom
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_NOM), Address:=FichierCourant.Chemin
RgDeb.Offset(comp, COL_FICH_CHEMIN) = FichierCourant.Chemin
RgDeb.Worksheet.Hyperlinks.Add anchor:=RgDeb.Offset(comp, COL_FICH_CHEMIN), Address:=FichierCourant.SousDossHyper
'RgDeb.Offset(ICollec, COL_FICH_DATECREATION) = FichierCourant.DateCreation
RgDeb.Offset(comp, COL_FICH_MODIFDERN) = FichierCourant.ModifDern
'RgDeb.Offset(ICollec, COL_FICH_ACCESDERN) = FichierCourant.AccesDern
RgDeb.Offset(comp, COL_FICH_PROPRIETAIRE) = FichierCourant.Proprietaire
RgDeb.Offset(comp, COL_FICH_TAILLE) = FichierCourant.Taille
comp = comp + 1
End If
If comp = 32000 Then
'Call Feuillesuiv(nb)
comp = 1
nb = nb + 1
End If
End If
Next
If comp = 0 And nb = 0 Then
MsgBox "Aucun fichier à afficher après cette date"
End Ifok merci pour votre aide.
le pb c'est que comp et nb sont initialisés à 1 dans ma déclaration et donc le message n'apparait pas si comp=0 et nb=0.
alade23 a écrit :ok merci pour votre aide.
le pb c'est que comp et nb sont initialisés à 1 dans ma déclaration et donc le message n'apparait pas si comp=0 et nb=0.
il faut donc changer ce test et remplacer le 0 par des 1.
Je voudrais revenir sur ce point
If comp = 1 And nb = 1 Then
MsgBox "Aucun fichier à afficher après cette date"
else
Msgbox comp -1 & "fichiers trouvés"
mon souci se trouve au niveau du else. quand le nombre de données à afficher dépasse une certaine valeur elles s'affichent sur un page suivante que j'ai défini.le pb c'est qu'au lieu de compter l'ensemble des données de toutes les pages, il ne prend en compte que le calcul de la dernière page. pour résumer le maxi d'une page est comp=32000 lorsqu'il plus d'une page comment gérer le comp -1 sur l'ensemble des pages;
Merci
alade23 a écrit :Je voudrais revenir sur ce point
If comp = 1 And nb = 1 Then
MsgBox "Aucun fichier à afficher après cette date"
else
Msgbox comp -1 & "fichiers trouvés"
Merci
par exemple tu remplaces l'instruction msgbox par
msgbox comp-1+(nb-1)*32000 & "fichiers trouvés"ça marche nickel, merci beaucoup pour ton aide.