XL 2019 Mois en vba

Tsegp

XLDnaute Nouveau
Bonjour

J'ai un classeur dans lequel je colle en colonne M une liste de date au format jj/mm/aaaa.
Je souhaite a l'aide d'un bouton (et donc d'une macro associé) a écrire en colonne P le mois de cette date en lettre et en colonne O le numéro de la semaine.

Cette liste de date est complète chaque jour donc la macro ne doit pas se limiter à certaine ligne

Une idée ?

Merci d'avance a tous
 

Tsegp

XLDnaute Nouveau
Bonjour @Tsegp

J'ai pas vu ton fichier que tu décris si bien .....

@Phil69970
Bonjour

Alors je n'ai pas joint mon fichier pour des raisons de confidentialité mais voici un fichier exemple dans lequel je reproduis mon classeur.

Actuellement je remplis manuellement la colonne O et P en fonction de la colonne M.

Ce que je souhaite c'est à l'aide d'une macro que cela se remplisse tout seul en fonction de la date indiquée en M.

Je souhaite le faire via une macro et non des formules.

Merci d'avance
 

Pièces jointes

  • test.xlsx
    13.9 KB · Affichages: 2

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à toutes & à tous
Un petit fichier simple comme celui que je te joins aurait suffit ...
Bon je réponds quand même.
Sauf si tu tiens au VBA, je te propose une solution par formule ou formatage.
A bientôt
 

Pièces jointes

  • Mois en fonction.xlsx
    9.8 KB · Affichages: 0

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re,
Voici ma proposition:
VB:
Sub Màj()

     Const ColM% = 13, ColO% = 15, ColP% = 16
     Dim Zdate As Range, ZSem As Range, ZMois As Range
     With Feuil1
          Set Zdate = .Range(.Cells(2, ColM), .Cells(.Rows.Count, ColM).End(xlUp))
          Set ZSem = .Cells(2, ColO).Resize(Zdate.Rows.Count)
          Set ZMois = .Cells(2, ColP).Resize(Zdate.Rows.Count)
     End With
   
     Tbdate = Zdate.Value
     TbSem = ZSem.Value
     TbMois = ZSem.Value
   
     For i = 1 To UBound(Tbdate)
          TbSem(i, 1) = WorksheetFunction.IsoWeekNum(Tbdate(i, 1))
          TbMois(i, 1) = Format(Tbdate(i, 1), "mmmm")
     Next
   
     ZSem.Value = TbSem
     ZMois.Value = TbMois
   
End Sub

Voir le fichier joint

Attention le 1er janvier 23 faisait partie de la semaine 52 au sens iso du terme

Edit : la semaine N1 est la 1ère semaine de qui compte au moins 4 jours du mois de janvier
 

Pièces jointes

  • Mois Sem.xlsm
    20.7 KB · Affichages: 1

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir @Phil69970
On se croisse un peu ce soir,
vue l'avertissement de Microsoft :
1685650961932.png

Je me méfis un peu de cette fonction
Et elle renvoie le N° de semaine à l'américaine et non pas comme nous l'entendons en Europe ( par exemple 1 pour le 1er janvier 2023 alors que sur nos calendriers il fait parti de la semaine 52 de 2022 )

A bientôt
 

Phil69970

XLDnaute Barbatruc
Re

L'aide de Bilou me donne cela

DatePart, fonction

DatePart, fonction​


Voir aussi Exemple Particularités


Renvoie une valeur de type Variant (Integer) contenant l'élément spécifié d'une date donnée.


Syntaxe


DatePart(interval,
date[,firstdayofweek, firstweekofyear]])


La syntaxe de la fonction DatePart comprend les arguments nommés suivants :


ÉlémentDescription
intervalExpression de chaîne correspondant à l'intervalle de temps à renvoyer.
dateValeur Variant (Date) à évaluer.
firstdayofweekFacultatif. Constante précisant le premier jour de la semaine. Si aucune valeur n'est précisée, la valeur par défaut est dimanche.
firstweekofyearFacultatif. Constante précisant la première semaine de l'année. Si aucune valeur n'est précisée, la première semaine est par défaut celle du 1er janvier.





Valeurs


L'argument interval peut prendre les valeurs suivantes :


ValeurDescription
yyyyAnnée
qTrimestre
mMois
yJour de l'année
dJour
wJour de la semaine
wwSemaine
hHeure
nMinute
sSeconde





L'argument firstdayofweek peut prendre les valeurs suivantes :


ConstanteValeurDescription
vbUseSystem0Utilise les paramètres de l'API NLS.
vbSunday1Dimanche (valeur par défaut)
vbMonday2Lundi
vbTuesday3Mardi
vbWednesday4Mercredi
vbThursday5Jeudi
vbFriday6Vendredi
vbSaturday7Samedi





L'argument firtweekofyear peut prendre les valeurs suivantes :


ConstanteValeurDescription
vbUseSystem0Utiliser l'argument NLS API.
vbFirstJan11Commencer par la semaine du 1er janvier (valeur par défaut).
vbFirstFourDays2Commencer par la première semaine comportant au moins quatre jours dans l'année nouvelle.
vbFirstFullWeek3Commencer par la première semaine complète de l'année.

@Phil69970
 

Discussions similaires

Réponses
5
Affichages
179

Statistiques des forums

Discussions
312 182
Messages
2 086 003
Membres
103 084
dernier inscrit
Hervé30120