Challenge pour Expert qui s'ennuie

aldo

XLDnaute Nouveau
Bonjour à toutes et tous,
Le titre est juste là pour attirer (pas sûr que ça marche vraiment d'ailleurs) mais ce sont plusieurs aspects qu'il me faut traiter en même temps.

J'avance, j'apprends en vous lisant, j'arrive à assembler du code glâner par-ci, par-là donc déjà merci.

Mais voilà mon problème

constat de départ :
je reçois 3 fichiers zippés qui sont générés par un autre outil qui ont un onglet chacun.
Chaque fichier et chaque onglet est nommé suivant ce modèle : Nom_du_Fichier_YYYYMMDD.xls
ils ne sont pas forcément générés au même moment ni reçus en même temps, donc n'ont pas forcément la même date dans le nom (du fichier et de l'onglet)
Chaque onglet est généré de la même façon:
exemple très simplifié attaché avec les colonnes "Num","Title","Date1","Date2","Date3","Dept"

voilà la problématique :
Je dois réussir à concaténer l'onglet de chacun des trois fichiers en un fichier unique avec la même structure plus un onglet avec des stats (les stats, ça c'est bon)
pour l'instant vous allez me dire, à part l'histoire de la date qui change et à la limite ça ne me dérange pas de renommer et de construire à la main ce fichier brut, ce n'est pas très dur.
Mais voilà où j'atteints mes limites : une fois ce fichier "global" constitué,je dois fabriqué un nouveau fichier par départements ("Dept"), en vrai il y en a presque une centaine différents,donc je voudrais faire un fichier par département en considérant seulement les 2 premières lettres (mais il peut n'y en avoir qu'une).
Pour corser le tout et à condition qu'Excel ne me joue pas de tour avec les format, je dois enlever les enregistrements plus vieux que 01/01/2008 par exemple pour la colonne Date1 de l'onglet 1 et plus vieux que 01/01/2009 pour la colonne Date2 de l'onglet 2 et plus vieux que 01/06/2008 pour la colonne Date3 de l'onglet 3.

Je pensais que les filtres avancés aurait pu suffire mais je n'y arrive pas.
Je dois évidemment garder les enregistrements en entier (par ligne)

le champ titre peut-être très long (je ne sais pas combien de caractères max.
Il peut y avoir plusieurs fois la même valeur dans la colonne Num

en vrai, j'ai environ 10000 lignes par onglet sur une quarantaine de colonnes.

je dois toujours penser à tout automatiser (et aussi à générer un fichier par département sans macro) parce que c'est quelque chose que je dois faire toute les semaines environ...

J'espère avoir été assez explicite...:eek:
ci-joint le fichier exemple.
J'utilise Excel2000

Merci beaucoup pour voir aide.
aldo
 

Pièces jointes

  • aldo.xls
    28.5 KB · Affichages: 83
  • aldo.xls
    28.5 KB · Affichages: 89
  • aldo.xls
    28.5 KB · Affichages: 89

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Bonjour


Ton fichier (généré par ton outil) contient combien d'onglets ?

Un seul ?

Tu n'as pas déjà de code VBA sous la main pour combiner l'onglet d'un classeur vers un classeur maitre ? (glané sur le forum, car plusieurs fils de discussion relatifs à ce problème existent sur le forum)

(Car ton classeur ne contient aucune macro)
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Bonjour vbacrumble,

arf, j'ai pas été assez précis.

pour combiner les fichier en un seul à plusieurs onglets, ça je sais faire (enfin avec l'enregistreur + nettoyage) mais pour cette partie j'ai un soucis avec la date qui est complètement aléatoire bien que toujours au même endroit.

mon soucis est plus pour générer un fichier par département en ne prenant que les deux premières lettres avec pour chaque onglet avec la restriction sur les dates...

Pour l'instant je n'ai de macro que pour combiner les fichiers à un seul onglet chacun vers un nouveau fichier, ça fonctionne bien à condition de renommer fichier et onglet à la main d'abord. Mais ça au pire ça me prendra 4min par semaine...

aldo
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re


Justement, tu pouvais mettre ton code VBA dans ton exemple

(car cela pourra servir à d'autres)

Histoire que le partage des connaissances se fassent des deux côtés ;)

edition: bonjour Gruick
 
Dernière édition:

Gruick

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Salut Aldo (la classe donc !),

Bon, il faudrait nous préciser des choses :
- d'abord les dates sont au format français et tu nous écrit que les dates sont YYYYMMDD.
- puis, il y a beaucoup de départements qui ont les deux premières lettres similaires, essaies avec "CO" par exemple (pour corser justement).
- tes 3 fichiers reçus concernent-ils le même département ?

Je ne comprends pas trop ce que tu veux faire, car il y a 3 dates identiques pour chaque ligne dans ton fichier joint. Il faudrait nous poster les diverses étapes de ton raisonnement. avec le départ et l'arrivée.

N'étant pas expert, ni ne m'ennuyant aucunement, j'espère néanmoins avoir fait avancer le schmilblick.

Et ça rime avec...

Gruick
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Bonjour,

je reviens avec un fichier exemple qui contient des macros.

pour ce qui est des précisions :
les dates sont au format français dans les fichiers DD/MM/YYYY mais pas dans le nom des fichiers que je reçois : Nom_du_Fichier_YYYYMMDD.xls.

pour les dates, ici c'est juste un fichier d'exemple, je vais faire quelques modifs au hasard quand même (...) c'est fait.

Oui, c'est normal qu'il y ai plusieurs occurrences du département "CO", c'est ce que j'essaie d'avoir en fait, le moins d'occurrences possibles pour regrouper et n'avoir qu'un nombre limité de fichiers à générer toutes les semaines.

est-ce que je suis plus clair ou pas? faut pas hésiter à reposer des questions parce que j'arrive à m'embrouiller tout seul... ;)

là, le fichier ne contenait au départ que l'onglet "Stats" et j'ai importé avec la macro Recup_files les 3 autres onglets qui on été renommés.

Je ne suis pas sûr que le tri fonctionne bien avec la macro Older_out (j'ai l'impression qu'une fois cette macro exécutée,je ne peux plus agir sur les filtre quand je retourne dans mon fichier...
 

Pièces jointes

  • exo.xls
    41 KB · Affichages: 59
  • exo.xls
    41 KB · Affichages: 61
  • exo.xls
    41 KB · Affichages: 65

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Bonjour


Merci d'avoir tenu compte de ma remarque.

Voici une proposition (que j'avais utilisé dans un autre fil ) pour compiler tes feuilles

Dis-moi ce que tu en penses
Code:
Sub compilationClasseursII()
Dim W As Workbook, WL As Workbook, s As Worksheet, i&, j As Byte
Application.ScreenUpdating = False
On Error Resume Next
Set W = ThisWorkbook
With Application.FileSearch
    .NewSearch
    .LookIn = "C:\Tempi"
    .FileType = msoFileTypeExcelWorkbooks
 
If .Execute > 0 Then
    For i = 1 To .FoundFiles.Count
        Set WL = Workbooks.Open(.FoundFiles(i), 0)
        For j = 1 To WL.Worksheets.Count
        If WL.Sheets(j).Name Like "Sheet*" Then
        WL.Sheets(j).Copy After:=W.Sheets(W.Sheets.Count)
        End If
        Next
        W.ActiveSheet.Name = Replace(W.ActiveSheet.Name, "Sheet", "WBook")
        WL.Close False
    Next i
End If
End With

On Error GoTo 0
Application.ScreenUpdating = True

Set W = Nothing
Set WL = Nothing
End Sub
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

vbacrumble,
de rien pour la remarque, je suis complètement d'accord sur le principe des forums : obtenir/partager. J'aurais dû le faire directement sans qu'on me le fasse remarquer.:(

pour ta proposition:
premier sentiment : Ouh làà !! j'y comprends rien.
deuxième sentiment : je comprend pas tout mais un peu :
ce code permet de lire les fichiers dans le répertoire C:\Tempi et si il existe un fichier et qu'un onglet de ce fichier contient "Sheet" alors il le copie à la fin du fichier ouvert. puis il le renomme en remplaçant "Sheet" par "WBook" et passe au suivant s'il existe...
est-ce que j'ai bon ?

aldo
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re



Excuse , j'ai oublié de préciser qu'il faut adapter le nom du dossier

d'après ton code initial
Remplacer C:\Tempi
par
C:\*\TEST\

Et j'ai testé avec des classeurs nommés Book1.xls Book2.xls Book3.xls
ne contenant qu'une seule feuille contenant dans leur nom Sheet
(cad Sheet1 Sheet2 Sheet 3 )

Le code que je te propose est censé faire la même chose que ta macro recup_files
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

oui, OK, donc j'avais compris le principe, maintenant dire que j'ai compris comment ça marche étape par étape... euh là non je ne peux pas.

autre point :
effectivement quand j'utilise le code ci-dessous(qui n'a pas l'air de faire grand chose d'ailleurs), je ne peux plus agir sur les filtres : le clic sur les petites flèches ne fait rien, je suis obligé d'enlever les filtres auto avant de les remettre...
Code:
    Sheets("WBook1").Select
    Rows("1:1").Select
    Selection.AutoFilter Field:=3, Criteria1:=">=01/12/2008", Operator:= _
        xlAnd
    ActiveWorkbook.Save

...
aldo
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Re,

merci vbacrumble !
ton code marche super une fois adapté ! malin le coup de prendre seulement la constante dans le nom plutôt que de traiter avec les variables !

aldo (content !):D
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re


Modifiée ainsi , ta macro fonctionne (en tout cas sur le fichier exemple de ton post c'est ok)


Code:
Sub Older_Out()
Dim c$, i&
c = ">=01/12/2008"
For i = 1 To 3
Sheets("WBook" & i).AutoFilterMode = False
Next
Sheets("WBook1").[A1].AutoFilter 3, c, xlAnd
Sheets("WBook2").[A1].AutoFilter 4, c, xlAnd
Sheets("WBook3").[A1].AutoFilter 5, c, xlAnd
ActiveWorkbook.Save
End Sub
 
Dernière édition:

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Re,

super !! merci !

j'ai adapté ainsi :
Code:
Sub Older_Out()
Dim c$, d$, e$, i& 'definitions des variables
c = "<=01/12/2006"
d = ">=01/01/2008"
e = ">=01/05/2008"
For i = 1 To 3 'pour la différences des noms des WBook ?
Sheets("WBook" & i).AutoFilterMode = False
Next
Sheets("WBook1").[A1].AutoFilter 3, c, xlAnd 'filtre sur la colonne 3 de la feuille WBook1 avec le parametre c
Sheets("WBook2").[A1].AutoFilter 4, d, xlAnd 'filtre sur la colonne 4 de la feuille WBook2 avec le parametre d
Sheets("WBook3").[A1].AutoFilter 5, e, xlAnd 'filtre sur la colonne 5 de la feuille WBook3 avec le parametre e
ActiveWorkbook.Save
End Sub

est-ce que j'ai bon pour les commentaires ?
dans la mesure où tu mets Sheets ("WBook1") en dur dans le code, à quoi sert la ligne Sheets ("WBook" & i) ?

aldo

PS : j'avance plus vite ce matin que toute la semaine dernière !! merci beaucoup, vraiment !
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re



Ca sert à être sur que le filtre automatique n'est pas actif

Code:
For i = 1 To 3 'pour la différences des noms des WBook ?
c.AutoFilterMode = False
Next

et si tu préfères tu peux écrire à la place
Code:
Sheets("WBook1").AutoFilterMode = False
Sheets("WBook2").AutoFilterMode = False
Sheets("WBook3").AutoFilterMode = False
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Re,

ah bah oui, d'accord, compris.

si je veux combiner les filtres pour chaque feuille, est-ce que je peux adapter comme suit ?
Code:
Sub Older_Out()
Dim c$, d$, e$, f$, i&
c = "<=01/12/2006"
d = ">=01/01/2008"
e = ">=01/05/2008"
f = "DSC"
For i = 1 To 3
Sheets("WBook" & i).AutoFilterMode = False
Next
Sheets("WBook1").[A1].AutoFilter 3, c, xlAnd.[A1].Autofilter 6, f, xlAnd 'pour ajouter un paramètre de filtre ?
Sheets("WBook2").[A1].AutoFilter 4, d, xlAnd 
Sheets("WBook3").[A1].AutoFilter 5, e, xlAnd 
ActiveWorkbook.Save
End Sub

aldo
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry