date et calendrier

G

guylaine

Guest
bonsoir ,

je suis en train de me faire un planning
j'ai juste un petit souci
en A1 je selectionne mon mois,en fonction de la date inscriste en J2(qui est le premier lundi du mois inscrit en A1)
j'aimerais quand je mets le mois en A1 ,en J2 se mette automatiquement la date du premier lundi de ce mois
j'espere avoir été assez comprehensible
merci d'avance
salut
 
M

Monique

Guest
Bonjour,

Le mois que tu sélectionnes en A1 : c'est une date au format mmmm ou mmm ou bien c'est du texte ?

Une date quelconque en A1, valeur numérique, format mmm ou mmmm
date du 1er lundi :
=FIN.MOIS(A1;-1)-MOD(FIN.MOIS(A1;-1)+5;7)+7

Le 1er d'un mois en A2, valeur numérique, format mmm ou mmmm
date du 1er lundi :
=A2-1-MOD(A2-1+5;7)+7

Mois écrit en texte en A4
=(1&"/"&A4&"/"&ANNEE(AUJOURDHUI()))-1-MOD((1&"/"&A4&"/"&ANNEE(AUJOURDHUI()))-1+5;7)+7

(si ton mois est écrit en texte, ne pas oublier les accents en février, août et décembre)
 
G

guylaine

Guest
re bonsoir ,
je te remercie pour ta rapidité mon mois est ecrit en mmm-aa
super ça marche pour ceux qui me connaissent cela ressort de l'exploit
je vais encore profiter de ta gentillesse j'aimerai comprendre la formule
en te remerciant encore une fois
salut
guylaine
 
R

Robert

Guest
Bonsoir Guylaine, Monique, le forum,

Je me disais bien que c'était un plan pour Monique ou Celeda pendant que je cogitais sur cette macro... Comme ça tu auras l'option Formule et l'option Macro... mais, à la différence de la formule cette macro ne marche que si le mois est tapé en toutes lettres, pas si c'est un date formatée "mmmm".
Si tu le souhaites je peux l'adapter à une date formatée mais je pense que la formule proposée par Monique est bien plus efficace.

La voici donc à placer dans Visual Basic Editor dans la feuille correspondante.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$A$1" Then Exit Sub
If Target.Value = "" Then Range("J2").Value = "": Exit Sub
Dim mois As Date
'Attention ne marchera pour 2005 qu'en 2005
On Error GoTo fin
mois = DateValue("1/" & Target.Value & "/" & Year(Date))
For x = 1 To 7
If Weekday(mois) = 2 Then
Exit For
End If
mois = mois + 1
Next x
Range("J2") = mois
Exit Sub
fin:
MsgBox ("Vérifiez l'orthographe du mois")
Range("A1").Select
End Sub

À plus,

Robert
 
M

Monique

Guest
Re,

Je vais essayer d'expliquer.

Premier lundi suivant une date tapée en A1
=A1-MOD(A1+5;7)+7

=MOD(A1;7) donne le reste de la division par 7 d'un nombre
Pour Excel, 1 = 01/01/1900 = dimanche
2 = 02/01/1900 = lundi
3 = 03/01/1900 = mardi

Si tu tapes une date tombant un lundi quelconque en A1,
=MOD(A1+5;7) te renvoie 0

1er lundi sivant la date tapée en A1 :
=A1-MOD(A1+5;7)+7
=A1 ( - 0 si c'est un lundi ) + 7
=A1 ( - 1 si c'est un mardi ) + 7

Dernier lundi du mois :
=FIN.MOIS(B$2;0)-MOD(FIN.MOIS(B$2;0)+5;7)

Premier lundi de l'année suivante
=FIN.MOIS(B2;12-MOIS(B2))-MOD(FIN.MOIS(B2;12-MOIS(B2))+5;7)+7

Premier dimanche suivant une date en B2
=B2-MOD(B2+6;7)+7

Premier mercredi suivant une date en B2, ou bien B2 si c'est un mercredi
=B2-MOD(B2+3;7)+7-(JOURSEM(B2)=4)*7
 
G

guylaine

Guest
bonjour Monique ,Robert et le forum

un grand merci à tous ,je vais potasser ça .
j'aurai encore certainement besoin de vos lumieres ,
car j'aimerai calculer mes heures et d'autres choses
mais comme rien n'est simple j'ai des semaines à cheval sur deux mois
il me faut des calculs au mois et des calculs à la semaine,enfin chaque chose en son temps
merci et a+
Guylaine
 
G

guylaine

Guest
re bonjour,
Quand je vous dis que j'aurais encore besoin de vous
là je vous envoie un fichier allez à la feuille octobre,
j'aimerai calculer mes heures du premier au trente et un
sachant que le 1 de chaque mois ne serra jamais dans la même celulle.encore une fois merci d'avance
Guylaine
 

Pièces jointes

  • Copiedeheures.zip
    14.4 KB · Affichages: 20
M

Monique

Guest
Bonjour,

Pour avoir le total des heures travaillées, du 1/10 au 31/10 inclus :
=SOMMEPROD((MOIS(A5:A53)=MOIS(A1))*(ESTNUM(A5:A53))*E5:E53)
Format [hh]:mm pour pouvoir dépasser le seuil des 24 heures
ESTNUM(A5:A53) parce que, pour Excel, une cellule vide = mois de janvier

Sinon, pour le message que tu as écrit dans le classeur.
Dans la feuille "Septembre",
tu mets le dernier jour de la semaine en A44 (dimanche 03-10)
(numérique, pas texte)
Total des heures d'octobre faites le 3/10 ou avant :
=SOMMEPROD(((INDIRECT(TEXTE(A44;"mmmm")&"!A5:A53"))<=A44)*(ESTNUM(INDIRECT(TEXTE(A44;"mmmm")&"!A5:A53")))*INDIRECT(TEXTE(A44;"mmmm")&"!E5:E53"))

Mais il faut que tes 2 feuilles aient la même structure (les dates en numérique dans les 2,
le même nombre de semaines, etc)
 
G

guylaine

Guest
re bonjour ;

je profite de votre savoir
voilà j'aimerai faire la somme de la colonne G du 1/09
au 30/09 ,j'ai essayé la même formule que pour calculer les heures mais j'ai erreur VALEUR (c'est la feuille septembre1)
merci d'avance
Guylaine
 

Pièces jointes

  • heurespilpa.zip
    18.7 KB · Affichages: 36
J

Jean-Marie

Guest
Bonjour

Dans la cellule L4 tu peux supprimer (ESTNUM(A5:A53)), ce qui donne =SOMMEPROD((MOIS(A5:A53)=MOIS(A1))*E5:E53)

Pour l'autre formule, les formules de la colonne G retourne soit "" (rien) soit une valeur positive ou négative. Pour Excel "" (rien) c'est une donnée alphanumérique (de type 2). Qui retourne une erreur #valeur avec une opération arithmétique. Essaye cette formule :

=SOMMEPROD((MOIS(A5:A53)=MOIS(A1))*(G5:G53&0))

@+Jean-Marie
 
M

Monique

Guest
Re,

En M4 :
=SOMMEPROD((MOIS(A5:A53)=MOIS(A1))*(ESTNUM(A5:A53));G5:G53)

En L4 aussi :
=SOMMEPROD((MOIS(A5:A53)=MOIS(A1))*(ESTNUM(A5:A53));E5:E53)

Est-ce que ton 6,84 équivaut à 06:50 ?
Si oui, c'est 6,83333333 etc
ou ="6:50"*24 (cellule au format 2 décimales)
 
M

Monique

Guest
Re,

Jean-Marie, ESTNUM(A5:A53) c'est calculé pour...
Tous les onglets du planning de Guylaine seront identiques, en principe
et, en janvier, pour Excel :
=MOIS( cellule vide ) = 1

Et il y a des sous-totaux, au moins dans la colonne E pour l'instant
 

Statistiques des forums

Discussions
314 162
Messages
2 106 599
Membres
109 637
dernier inscrit
lafforest