Numéros de jours à recoder pour certaines dates

Michael86

XLDnaute Nouveau
Bonjour à tous,

J'ai 20 fichiers Excel (à cause de la limite à environ 65 000 lignes). Il s'agit des prix journaliers des actions de 2000 entreprises sur environ 2.5 ans.

Je dois arriver à n'avoir que les prix hebdomadaires (pour chaque lundi si jour ouvré, sinon le mardi).

Lundi codé 1, mardi codé 2 ... vendredi codé 5. Les lundi fériés n'apparaissent pas dans ma BD. J'aimerais recoder les mardis suivant un lundi férié en 1 (au lieu de 2) pour pouvoir plus facilement éliminer les 3 jours restant dans la semaine qui ne me sont pas utiles.

J'ai une liste des mardis suivant les lundis fériés sous format .txt (11 en tout sur les 2.5 ans) (le mardi suivant un lundi férié est toujours ouvré).

Mes 2 colonnes à traiter:

Col C: dates du 03.01.1995 au 12.05.1997

Col B: numéro du jour de la semaine (lundi=1 jusqu'à vendredi=5). Pour ce faire j'ai utilisé la formule =JOURSEM(C2;2).

Ce que j'aimerais faire (je ne sais pas si c'est le mieux ni comment le faire):

- Insérer une fonction de type "SI" disant que si la cellule en C est une des onze dates de mardis suivant un lundi férié, il faut recoder le mardi (initialement 2) en 1.

- Ou alors, ça devrait être plus rapide, dire de supprimer tous les numéros 3 à 5 (mercredi à vendredi, car ça ne m'intéresse pas) ainsi que les 2, sauf les onze qui m'intéressent.

Craignant que mes explications soient difficilement compréhensibles j'ai attaché en exemple les données pour 1 entreprise.

Je vous remercie pour votre aide.
 

Pièces jointes

  • exemple entreprise 1.xlsx
    32.6 KB · Affichages: 74

Softmama

XLDnaute Accro
Re : Numéros de jours à recoder pour certaines dates

Bonjour Michael86, Paritec,

Si tu notes en feuil2, colonne A, les lundis fériés sur la période, la macro suivante réalise ce que tu souhaites :
VB:
Sub Lamacro()
On Error Resume Next
    With Range("F2:F" & Cells(Cells.Rows.Count, 1).End(xlUp).Row)
'D'abord on vire tout ce qui est ni lundi ni mardi ou qui fait partie de la liste nommée ListeLundisFériés
      .FormulaR1C1 = "=IF(WEEKDAY(RC[-3],2)>2,1,IF(ISERROR(MATCH(RC[-3],ListeLundisFériés,0)),"""",1))"
      .Value = .Value
      .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
    End With
    With Range("F2:F" & Cells(Cells.Rows.Count, 1).End(xlUp).Row)
'Puis on dégage les mardis qui suivent les lundis qui restent
      .FormulaR1C1 = "=IF(RC[-3]=R[-1]C[-3]+1,1,"""")"
      .Value = .Value
      .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
    End With
    Range("F:F").Clear
End Sub

A noter que la zone nommée ListeLundisFériés est nommée dynamiquement en colonne A, feuille2
 

Michael86

XLDnaute Nouveau
Re : Numéros de jours à recoder pour certaines dates

Merci beaucoup pour ta réponse Softmama!

Je ne connais strictement rien en VBA mais je vais essayer d'insérer ce que tu m'as donné.

Paritec, c'est vrai j'ai oublié de mettre les 11 dates.

Je te les mets maintenant au cas où tu aurais une autre solution à me proposer.

A+
 

Pièces jointes

  • Mardis suivant un lundi férié.xls
    23 KB · Affichages: 47
  • Lundis fériés.xls
    23 KB · Affichages: 48
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Numéros de jours à recoder pour certaines dates

Bonjour Michael Softmama:) le forum
Voilà donc la macro de Softmama dans ton classeur avec un bouton tu cliques
a+
papou:)
 

Pièces jointes

  • exemple entreprise 1.xlsm
    42.2 KB · Affichages: 55

JCGL

XLDnaute Barbatruc
Re : Numéros de jours à recoder pour certaines dates

Bonjour à tous,

Ta liste de Mardis nommée "Liste"
En B2 et suivantes :
=SI(OU(JOURSEM(C2;2)=1;NB.SI(Liste;C2));VRAI;"")
Ensuite tu filtres sur les "VRAI".

A + à tous

Édition : Salut Papou
 

Pièces jointes

  • JC exemple entreprise 1.xlsx
    40.4 KB · Affichages: 50
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Numéros de jours à recoder pour certaines dates

Re bonjour Michael86 Salut JC:)
si tu veux pour faire plus simple (à l'utilisation on peut te faire un fichier qui ira ouvrir traiter et refermer tes fichiers?
Pour cela il faudrait:
1) que tes fichiers à traiter soient dans le même dossier
2) que tu nous donnes le nom des fichiers pour voir si il y a des choses à recopier
3) que tu dises ou tu veux les résultats sur la même feuille ou sur une différente
le reste on va faire
a+
papou:)
 

Michael86

XLDnaute Nouveau
Re : Numéros de jours à recoder pour certaines dates

Merci JC, j'arrive à comprendre ta formule (contrairement au VBA).

Tu me simplifies encore la vie Paritec :), je ne pensais pas que c'était possible :eek:.

- J'ai mis tous mes fichiers dans un dossier nommé Permno
- Les fichiers s'appellent Permno1, Permno2,..., Permno20
- L'idéal serait d'avoir tous les résultats dans un même fichier
 

Michael86

XLDnaute Nouveau
Re : Numéros de jours à recoder pour certaines dates

Je ne crois pas non, les fichiers font plutôt environ 56000-59000 je crois (100 entreprises par fichiers pour les 2.5 ans). Malheureusement, ils n'ont pas tous le même nombre de lignes (données manquantes sur le site), j'espère que ça ne posera pas de problème.

A+
 

Paritec

XLDnaute Barbatruc
Re : Numéros de jours à recoder pour certaines dates

Re michael86 le forum
Bon alors voilà le fichier tu le mets dans le dossier ou tu as tes fichiers Permno1 Permno2 etc tu l'ouvres et tu cliques sur le bouton traiter, et là toutes tes feuilles filtrées seront ajoutées à ton fichier Michael1 et j'ai nommé les feuilles avec le nom des fichiers d’où la liste est extraite
ouvres teste et redis moi
a+
papou:)
 

Pièces jointes

  • Michael1.xls
    56.5 KB · Affichages: 62

Discussions similaires

Réponses
3
Affichages
416

Statistiques des forums

Discussions
312 279
Messages
2 086 722
Membres
103 378
dernier inscrit
phdrouart