En masse recuperer dans cellule la partie du titre du fichier

anthooooony

XLDnaute Occasionnel
Bonjour à toutes et à tous,

J'automatise certains travaux que je reçois quotidiennement. Cependant, sur un rapport je n'ai pas la date de l'extraction ce qui pour un suivi est très embêtant.

Je voulais savoir s'il était possible de mettre en colonne D pour toutes les lignes présentes en A les 10 derniers chiffres(LA DATE) qui se trouve dans le titre de CHAQUE fichier qui se trouve dans un répertoire?

COLONNE A COLONNE B COLONNE C COLONNE D
Classe de documents Total factures % exportées auto
Factures de FRANCE SAS (52797) 1318 92

Suivi Top 50 - production 10 derniers jours (Avec commande) 27-11-2012.xls


Merci d'avance de votre aide


Anthooooony
 

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Bonjour anthooooony,

Pas sûr d'avoir tout compris mais voyez le fichier joint avec cette formule en D2 :

Code:
=REPT(GAUCHE(DROITE(A2;14);10);ESTNUM(-GAUCHE(DROITE(A2;14);10)))&REPT(GAUCHE(DROITE(A2;15);10);ESTNUM(-GAUCHE(DROITE(A2;15);10)))
Fonctionne avec des extensions de 3 ou 4 caractères (xls, xlsx...).

A+
 

Pièces jointes

  • Date fichier(1).xls
    24 KB · Affichages: 54

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Re,

Avec DATEVAL on est sûr d'avoir une date :

Code:
=REPT(GAUCHE(DROITE(A2;14);10);ESTNUM(DATEVAL(GAUCHE(DROITE(A2;14);10))))&REPT(GAUCHE(DROITE(A2;15);10);ESTNUM(DATEVAL(GAUCHE(DROITE(A2;15);10))))
Fichier (2).

A+
 

Pièces jointes

  • Date fichier(2).xls
    24 KB · Affichages: 48

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Re,

Finalement une formule meilleure avec un seul REPT :

Code:
=REPT(GAUCHE(DROITE(A2;14+(GAUCHE(DROITE(A2;5))="."));10);ESTNUM(DATEVAL(GAUCHE(DROITE(A2;14+(GAUCHE(DROITE(A2;5))="."));10))))
Fichier (3).

A+
 

Pièces jointes

  • Date fichier(3).xls
    24 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Re,

Puisque vous êtes sur Excel 2007 vous pouvez utiliser SIERREUR :

Code:
=SIERREUR(DATEVAL(GAUCHE(DROITE(A2;14+(GAUCHE(DROITE(A2;5))="."));10));"")
Et mettre la colonne D au format jj-mm-aaaa

Fichier (4).

A+
 

Pièces jointes

  • Date fichier(4).xlsx
    10.3 KB · Affichages: 48
Dernière édition:

anthooooony

XLDnaute Occasionnel
Re : En masse recuperer dans cellule la partie du titre du fichier

Bonjour Job75,

Merci pour tes multiples retours :)

Par contre j'ai mal du formuler ma demande.

En faite, je souhaite écrire sur chaque fichier que j'ai dans un répertoire en D la date qui se trouve dans l'intitulé de son propre fichier..

J'ai mis un exemple dans la pièce jointe dans un onglet en Vert, et en rouge le document tel que je le reçois.

Désolé de vous avoir fait perdre sur du temps sur une demande erronée(quoi que je l'ai mis de coté:D )

Bien à vous,

Anthooooony
 

Pièces jointes

  • Suivi Top 50 - production 10 derniers jours (Avec commande) 01-04-2013.xls
    42 KB · Affichages: 45

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Re,

Je comprends que pour chaque fichier il suffit de trouver la date qui se trouve dans son nom.

Donc pour chaque fichier à importer entrez en D2 la formule :

Code:
=DATEVAL(STXT(CELLULE("filename";D2);CHERCHE(".xls*]";CELLULE("filename";D2))-10;10))
et la tirer vers le bas, la colonne D étant au format jj-mm-aaaa.

Si vous importez les données par macro tout cela peut se faire bien sûr automatiquement.

Montrez-nous alors cette macro.

Fichier joint.

Edit : pour tester enregistrez le fichier sur le bureau (avec son nom d'origine) avant de l'ouvrir.

A+
 

Pièces jointes

  • Suivi Top 50 - production 10 derniers jours (Avec commande) 01-04-2013.xls
    45 KB · Affichages: 55
Dernière édition:

anthooooony

XLDnaute Occasionnel
Re : En masse recuperer dans cellule la partie du titre du fichier

Rebonjour Job75,

Encore un merci pour recommencer, de ta patience et ton implication..

J'ai un semblant de code, qui ouvre chaque fichier d'un repertoire donnée en lancant la macro du bas "test".
Je lui ai écris date en colonne D comme ça si je recupere en tcd ou dans une table access il ne m'embetera pas.
Et après il faudrait que j'adapte ta formule avec un code qui lui dis d'aller jusqu'a la derniere ligne de chaque fichier.

j'ai un peu de difficulté mais à forcer de chercher je vais trouver!! je ne suis plus très loin grace à toi

Anthooooony


Sub Traitement(ByVal Repertoire As String)
Dim Fso As Object, SourceFolder As Object, SubFolder As Object, FileItem As Object
Dim Wbk As Workbook

On Error GoTo Traitement_Error
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(Repertoire)
'Boucle sur tous les fichiers du répertoire

For Each FileItem In SourceFolder.Files
If InStr(FileItem.Name, ".xls") > 0 Then
Set Wbk = Workbooks.Open(FileItem)
With Wbk.Worksheets(1)
.Cells(1, 4).Value = "Date"
.Cells(2, 4).Value = "19/04/2013"
End With
Wbk.Close True
Set Wbk = Nothing
End If
Next FileItem

'--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
For Each SubFolder In SourceFolder.subfolders
Traitement SubFolder.Path
Next SubFolder

Traitement_Error:
Application.DisplayAlerts = True
Set SourceFolder = Nothing
Set Fso = Nothing
End Sub

Sub Test()

Traitement "C:\Documents and Settings\RC1194\Desktop\test\testons"
End Sub
 

job75

XLDnaute Barbatruc
Re : En masse recuperer dans cellule la partie du titre du fichier

Re,

Dans votre macro il suffit d'utiliser ce code :

Code:
If FileItem.Name Like "*##-##-####.xls*" Then
  Set Wbk = Workbooks.Open(FileItem)
  With Wbk.Worksheets(1)
    .[D:D].ClearContents 'RAZ
    .[D1] = "Date"
    .[D:D].NumberFormat = "dd-mm-yyyy"
    .Range("D2:D" & .Range("A" & .Rows.Count).End(xlUp).Row).FormulaR1C1 = _
    "=DATEVALUE(MID(CELL(""filename"",RC),SEARCH("".xls"",CELL(""filename"",RC))-10,10))"
  End With
  Wbk.Close True
End If
A+
 
Dernière édition:

anthooooony

XLDnaute Occasionnel
Re : En masse recuperer dans cellule la partie du titre du fichier

Merci beaucoup FAB75 tu m'as fait gagner beaucoup de temps et d'énergie !
Je vais récupérer ce code sur 5 extractions que je reçois quotidiennement !

En te remerciant du temps passé sur mon problème.

Ci dessous le code fonctionnel

Code:
Sub Traitement(ByVal Repertoire As String)
Dim Fso As Object, SourceFolder As Object, SubFolder As Object, FileItem As Object
Dim Wbk As Workbook

On Error GoTo Traitement_Error
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(Repertoire)
'Boucle sur tous les fichiers du répertoire

For Each FileItem In SourceFolder.Files
If FileItem.Name Like "*##-##-####.xls*" Then
  Set Wbk = Workbooks.Open(FileItem)
  With Wbk.Worksheets(1)
    .[D:D].ClearContents 'RAZ
    .[D1] = "Date"
    .[D:D].NumberFormat = "dd-mm-yyyy"
    .Range("D2:D" & .Range("A" & .Rows.Count).End(xlUp).Row).FormulaR1C1 = _
    "=DATEVALUE(MID(CELL(""filename"",RC),SEARCH("".xls"",CELL(""filename"",RC))-10,10))"
  End With
  Wbk.Close True
End If
Next FileItem

'--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
For Each SubFolder In SourceFolder.subfolders
Traitement SubFolder.Path
Next SubFolder

Traitement_Error:
Application.DisplayAlerts = True
Set SourceFolder = Nothing
Set Fso = Nothing
End Sub

Sub Test()

Traitement "C:\Users\toto\Desktop\testons"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 171
Messages
2 085 931
Membres
103 049
dernier inscrit
plt