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

Re



Non il faut écrire la chose comme ceci

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
With Sheets("WBook1").[A1]
        .AutoFilter 3, c, xlAnd
        .AutoFilter 6, f, xlAnd
    End With
Sheets("WBook2").[A1].AutoFilter 4, d, xlAnd
Sheets("WBook3").[A1].AutoFilter 5, e, xlAnd
ActiveWorkbook.Save
End Sub
 
Dernière édition:

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

eh beh oui, c'est un argument imparable !

ce qui m'amène à me poser la question de savoir comment faire pour forcer les filtres auto à False pour toutes les feuilles sans tenir compte de leur nom...
je vais chercher...
aldo
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Re, super !
tout m'a l'air de fonctionner à merveille !

En ce qui concerne les département :
Comment faire pour qu'un argument du filtre soit par exemple "deux caractères, quelque soient ces caractères" plutôt que "DSC" ou "AA" par exemple... parce que évidemment j'ai essayé avec le code ci-dessous mais il ne prend en compte que le dernier argument :

Code:
Sub Older_Out()
Dim c$, d$, f$, g$, i&
c = ">=01/12/2008"
d = ">=01/01/2008"
f = "AA*"
g = "B*"
For i = 1 To Worksheets.Count 
Sheets(i).AutoFilterMode = False
Next
With Sheets("WBook1")
.[A1].AutoFilter 3, c, xlAnd 'filtre 1
.[A1].AutoFilter 6, f, xlAnd 'filtre AA*
.[A1].AutoFilter 6, g, xlAnd 'filtre B*
End With
Sheets("WBook2").[A1].AutoFilter 4, d, xlAnd
ActiveWorkbook.Save
End Sub

aldo
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

arf,
ça ne fonctionne qu'en partie, j'ai seulement les B* en résultat et pas les A*...

sinon, peut-être une autre approche en ne prenant que les deux caractères comme avec la fonction LEFT(A:A,2), non?
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re



Ca marche pour moi comme dirait Rick

Code:
Sub Older_Out2()
Dim c$, d$, e$, f$, ff$, i&
c = "<=01/12/2006"
d = ">=01/01/2008"
e = ">=01/05/2008"
f = "=A*": ff = "=B*"
For i = 1 To 3
Sheets("WBook" & i).AutoFilterMode = False
Next
With Sheets("WBook1").[A1]
        .AutoFilter 3, c, xlAnd
        .AutoFilter 6, f, xlOr, ff
    End With
Sheets("WBook2").[A1].AutoFilter 4, d, xlAnd
Sheets("WBook3").[A1].AutoFilter 5, e, xlAnd
ActiveWorkbook.Save
End Sub


PS: en utilisant le macro recorder , tu aurais pu trouvé la soluce by yourself ;)
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie : filtre élaboré avec 1 ou 2 caractères

Bonjour forum,
bonjour vbacrumble,

effectivement,

donc, pour ce qui est de deux arguments ça va bien. J'ai cherché pour en ajouter plus, mais je ne trouve pas de solution qui va bien.
j'ai essayé d'ajouter un argument avec en fin de ligne :
Code:
xlOr, h,
mais j'ai une erreur 450.

parcequ'en fait, la liste des départements risque fort d'évoluer dans le temps, et je n'ai besoin que des deux premiers caractères ou du premier caractère s'il n'y en a qu'un. Actuellement si je ne tri que sur 1 lettre, je vais avoir 15 départements différents, si j'ajoute à ça la sélection des départements sur 2 lettres j'arrive à environ 90 départements différents pour lequel je dois extraire un fichier...

J'ai essayé de voir comment je pourrais inclure la fonction LEFT ("",2) dans le code, mais ça ressemble tellement à rien que je n'ose même pas poster le code. Je m'y perds un peu (beaucoup) entre les différences entree anglais/français/formules/vb, etc...

si quelqu'un comprend de quoi je parle, ce sera déjà pas mal.

PS: je modifie le titre aussi pour être plus clair sur la question du moment.
 

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Re,

merci vbacrumble, au moins je suis sur la bonne voie: les filtres élaborés.

En cherchant et ne trouvant pas la réponse au sujet de la bonne syntaxe à utiliser, je me dis que c'est peut-être à cause de la probable infinité de solutions qu'on peut mettre en place (et ça ne me rassure pas étant donné que je n'en ai pas une seule...:eek:)

Sur ce,
j'y retourne... je vais suivre ton conseil, vbacrumble, analyser comment ça marche et essayer de comprendre le code généré.

aldo
 

vbacrumble

XLDnaute Accro
Re : Challenge pour Expert qui s'ennuie

Re


Regardes la pièce jointe

(avec un fichier exemple au plus proche de la réalisé
(mais sans données confidentielles , l'aide apportée sera plus efficace) )
 

Pièces jointes

  • exo2.zip
    16.7 KB · Affichages: 24
  • exo2.zip
    16.7 KB · Affichages: 23
  • exo2.zip
    16.7 KB · Affichages: 25

aldo

XLDnaute Nouveau
Re : Challenge pour Expert qui s'ennuie

Bonjour,
cette question n'est plus d'actualité, le fichier a changé et les besoins ne sont plus les mêmes...
merci encore vbacrumble !

en revanche j'ouvre une autre discussion sur un autre sujet (j'espère pouvoir le résoudre avec votre aide...)

a+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

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