Macro - creation date a partir du nom de fichier

banpo

XLDnaute Junior
Bonjour,

J'aurai besoin d'aide pour realiser une macro.
J'ai plusieurs dizaines de fichiers a traiter. Le nom de chaque fichier est sous la forme :"textYYYY". Le texte "text" est different selon les fichiers mais les 4 derniers caracteres "YYYY" sont un nombre correspondant a l'annee du fichier( ex: 1999, 2004,..). .
Chaque fichier comporte douze feuilles, une pour chaque mois. Le nom de chaque feuille est le nom complet du mois (ex: "janvier", "fevrier",...).
Chaque feuille comporte 4 colonnes A, B, C et D.

je souhaite realiser une macro qui me permettrait pour chaque fichier de rajouter une colonne E dans chaque feuille avec la date ecrite sous la forme "01/MM/YYYY" ou MM correspond au mois de la feuille (ex: 1 pour janvier, 2 pour fevrier,..).
Je patauge un peu cote code VBA pour connais tres peu le traitement des chaine de caractere. Quelqu'un pourrait-il me mettre sur la piste ? Merci par avance.

Je joins un fichier pour illustration.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro - creation date a partir du nom de fichier

Bonjour Banpo, bonjour le forum,

Cette macro pour un seul fichier. Elle est adaptable pour tous les fichiers mais il faudrait connaître leur chemin exact et savoir s'il n'y a que ces fichiers là dans le dossier spécifique...
Code:
Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim y As Byte 'déclare la variable y
Dim mois As String 'déclare la variable mois
Dim an As String 'déclare la variable an
 
an = Mid(Right(ThisWorkbook.Name, 8), 1, 4) 'définit la variable an
 
For x = 1 To 12 'boucle 1 : sur les 12 onglets
    mois = CStr(x) & "/" 'définit la variable mois
    Sheets(x).Select 'sélectionne l'onglet
    Range("E1").Value = "Date" 'édite "Date" dans la cellule A1 (peut-être pas nécessaire ???)
 
    For y = 2 To 16 'boucle 2 : dans les 15 cellules de la colonne E
        Cells(y, 5).Value = CDate("01/" & mois & an) 'place la date dans la cellule
    Next y 'prochaine cellule de la boucle 2
 
Next x 'prochain onglet de la boucle 1
End Sub
 

banpo

XLDnaute Junior
Re : Macro - creation date a partir du nom de fichier

Merci beaucoup Robert pour ta solutiuon. Cela fonctionne tres bien.
J'ai cherche a y rajouter la fonctionalite suivante: pour chaque feuille du classeur, la macro supprime les lignes repondant a l'une de ces conditions :
colonne A=0
(ou) colonne B et colonne C egales a zero
(ou) colonne D contient le texte "PUMP"

J'ai adapte la macro comme ci-dessous (rouge) mais j'ai des difficultes a regrouper les conditions sur un seul IF..Then. Cela est-il possible ?
Merci par avance pour votre aide.


Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim y As Byte 'déclare la variable y
Dim mois As String 'déclare la variable mois
Dim an As String 'déclare la variable an

an = Mid(Right(ThisWorkbook.Name, 8), 1, 4) 'définit la variable an

For x = 1 To 12 'boucle 1 : sur les 12 onglets
mois = CStr(x) & "/" 'définit la variable mois
Sheets(x).Select 'sélectionne l'onglet
Range("E1").Value = "Date" 'édite "Date" dans la cellule A1 (peut-être pas nécessaire ???)

For y = 2 To 16 'boucle 2 : dans les 15 cellules de la colonne E
Cells(y, 5).Value = CDate("01/" & mois & an) 'place la date dans la cellule
Next y 'prochaine cellule de la boucle 2
rn = .Range("A65536").End(xlUp).Row
For z = rn To 2 Step -1
If (.Cells(z, 1).Value = 0) OR (.Cells(z, 2).Value = 0 AND .Cells(z, 3).Value = 0) OR (ISNUMBER(FIND("PUMP",.Cells(z, 4).Value ,1)=1), Then .Rows(z).Delete
Next z



Next x 'prochain onglet de la boucle 1
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Macro - creation date a partir du nom de fichier

Bonjour à tous,

comme ça, la 1ère chose qui me saute aux yeux c'est : ISNUMBER (n'existe pas en VBA)
par contre Isnumeric existe.

d'autre part, que veux-tu dire par ISNUMBER(...)=1 ?

et puis il y a une virgule qui traine après qu'il faut enlever
 

banpo

XLDnaute Junior
Re : Macro - creation date a partir du nom de fichier

Tototiti2008, merci pour ces remarques et corrections. En fait, j'ai utilise les informations sur le lien ci-dessous concerant l'utilisation de la fonction IsNumber :
Excel ISNUMBER Function - Excel Wiki
Avec la ligne " ISNUMBER(FIND("PUMP",.Cells(z, 4).Value ,1))=TRUE Then .Rows(z).Delete" , je cherche a supprimer les lignes pour lesquelles la colonne D contient la chaine de caractere "PUMP". Existe-t-il une syntaxe plus simple ?
Pour memoire, avec la macro ci-dessous, je cherche a rajouter une colonne "date" dans chaque page puis effacer les lignes qui repondent a l'une de ces conditions:
colonne A=0
(ou) colonne B et colonne C egales a zero
(ou) colonne D contient le texte "PUMP"
Je continue a bugger sur la section en rouge. Quelqu'un pourrait-il m'eclairer sur l'origine du pb ?


Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim y As Byte 'déclare la variable y
Dim mois As String 'déclare la variable mois
Dim an As String 'déclare la variable an

an = Mid(Right(ThisWorkbook.Name, 8), 1, 4) 'définit la variable an

For x = 1 To 12 'boucle 1 : sur les 12 onglets
mois = CStr(x) & "/" 'définit la variable mois
Sheets(x).Select 'sélectionne l'onglet
Range("E1").Value = "Date" 'édite "Date" dans la cellule A1 (peut-être pas nécessaire ???)

rn = .Range("A65536").End(xlUp).Row
For y = rn To 2 Step -1
Cells(y, 5).Value = CDate("01/" & mois & an) 'place la date dans la cellule
If (.Cells(y, 1).Value = 0) OR (.Cells(y, 2).Value = 0 AND .Cells(y, 3).Value = 0) OR (ISNUMBER(FIND("PUMP",.Cells(y, 4).Value ,1))=TRUE) Then .Rows(y).Delete

Next y 'prochaine cellule de la boucle 2

Next x 'prochain onglet de la boucle 1
End Sub
 

kjin

XLDnaute Barbatruc
Re : Macro - creation date a partir du nom de fichier

Bonsoir,
Peut-être comme ça

Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim y As Byte 'déclare la variable y
Dim mois As String 'déclare la variable mois
Dim an As String 'déclare la variable an
an = Mid(Right(ThisWorkbook.Name, 8), 1, 4) 'définit la variable an
For x = 1 To 12 'boucle 1 : sur les 12 onglets
mois = CStr(x) & "/" 'définit la variable mois
Sheets(x).Select 'sélectionne l'onglet
Range("E1").Value = "Date" 'édite "Date" dans la cellule A1 (peut-être pas nécessaire ???)
For y = 2 To 16 'boucle 2 : dans les 15 cellules de la colonne E
Cells(y, 5).Value = CDate("01/" & mois & an) 'place la date dans la cellule
Next y 'prochaine cellule de la boucle 2
rn = Range("A65536").End(xlUp).Row
For z = rn To 2 Step -1
If Cells(z, 1).Value = 0 Or Cells(z, 2).Value = 0 And Cells(z, 3).Value = 0 Or _
Cells(z, 4).Value Like "*Pump*" Then Rows(z).EntireRow.Delete
Next z
Next x 'prochain onglet de la boucle 1
End Sub

A+
kjin
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 494
Membres
103 234
dernier inscrit
matteo75654548