Probleme avec les dates

bonjour,

je me décide a demander votre aide car je ne trouve pas ou ne vois pas ce qui pourrais m'aider...

le projet :

_ un tableur "planning annuel" congés, maladie, rtt, autre .

===>4 boutons, qui colorisent les cellules + 1 pour enlever la couleur (fait avec l’enregistreur de macro)

===>12 liens pour naviguer entre jan, fev, mars, avr ect... ne marche plus car j'ai renommé la feuille (a refaire)

===> je doit encore ajouter un bouton save pour faire simple.

_ un tableur "matrice" pour le planning hebdomadaire

===> tableur simple pour la distribution des taches journalières , avec un bouton qui gère ce qui suit:

=======>Ajoute une feuille (copie la matrice )

=======>la nome (semaine 1, semaine 2, ect ... du titre donner au tableur)

=======>imprime x3 (non active pour les tests)

=======>sup le bouton de la macro

=======>semaine+1 (le titre passe a la semaine suivante )

=======>efface les taches non récurrente de la "matrice" (vide le tableur)

=======>ajoute +7 jour au jours de la semaine (la ça bug)

mon problème c'est les dates de la semaine... ma méthode saute le 31 janvier, mème si je suis content de moi sur le reste j'ai mal réfléchis... croire que 31+7 ça pouvais faire 1

le code que j'utilise , les note sont la pour éviter d'oublier les actions de chacune.

Sub nouvel_feuil()
'
' nouvel_feuil Macro
'

msg = "n'aies pas peur tout va bien se passer !"
' Définit le message.
Style = vbOKCancel + vbDefaultButton1
'Définit les boutons.
Title = "Salut toi !"
' Définit les titres.
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbOK Then
'si oui
'fait copy de matrice et renone avec les valeurs dans la dite cellule
Sheets("matrice").Copy After:=Sheets(2) 'Before:=Sheets(2)
ActiveSheet.Name = ['matrice'!a1] & ['matrice'!j1]

'tests suppression du boutton
With ActiveWorkbook
.ActiveSheet.DrawingObjects(1).Delete
 End With
'fin du test

'imprime en trois exemplaire , avant de revenir sur la matrice
'ActiveWindow.SelectedSheets.PrintOut Copies:=3, Collate:=True 'Imprime 3 exemplaire

Sheets("matrice").Select 'activation de feuille matrice

Range("j1") = Range("j1") + 1 'donne +1 pour le numéros de la semaines

'ici j'ai un problème sur les jours de la semaine...
'ma méthode dépasse les 30 & 31 jour d'un mois
Range("A3") = Range("a3") + 7
Range("E3") = Range("E3") + 7
Range("H3") = Range("H3") + 7
Range("K3") = Range("K3") + 7
Range("N3") = Range("N3") + 7
Range("Q3") = Range("Q3") + 7
Range("R3") = Range("R3") + 7

Range("C8:D30,F8:G30,I8:J30,L8:M30,O8:O30").Select ' nettoyage du tableur pour la semaine suivante
selection.ClearContents
End If
 End Sub

une petite info , je n'ai aucune base en vba j'ai tout pompé a droite & gauche . j’arrive juste a avoir quelque repaire sur des actions simples, si vous avez une solution a mon problème je prend !

enfin voila

merci de votre aide

16planning.zip (59.89 Ko)

Bonjour,

Je ne comprend pas trop ce que tu veux faire mais Excel (et donc VBA) possède de nombreuses fonction pour le calcul des dates, utilise les. Si tu ne les connais pas, tu tapes ce type de ligne dans la fenêtre d'exécution après avoir entré la formule en Français dans la cellule. Exemple avec la formule "=NO.SEMAINE(B1;2)" en B2 où B1 contient une date valide et dans la fenêtre d'exécution tu entres cette ligne de code (avec le point d'interrogation) :

?Range("B2").Formula

puis appui sur Entrée

et tu as en dessous la réponse est :

=WEEKNUM(B1,2)

Et tu peux alors tester avec :

Sub Test()

    MsgBox Application.WeekNum(DateValue("18/12/2016"), 2)

End Sub

ou DateValue() retourne une date valide

Bonjour,

Je pense toujours préférable de déconseiller le recours à Microsoft pour le calcul du numéro de semaine. Ce dernier a toujours montré sa négligence des règles européennes en la matière et aucune de ses fonctions n'est totalement exempte de bogue... De même qu'il n'a jamais montré un attachement à un traitement de précision en matière de dates, d'où les différences entre Excel et VBA et les limitations d'Excel en la matière, mais c'est un autre sujet.

On ne manque pas de moyens de calculer le numéro de semaine, exactement, aussi bien pour les siècles passés que pour autant de siècle à venir qu'on voudra, calcul relativement simple qui permet de se passer de faire appel à de mauvaises solutions.

Function NSEM(d As Date) As Integer
    Dim dref
    Application.Volatile
    dref = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 3)
    dref = dref - Weekday(dref) + 2
    NSEM = (d - dref) \ 7 + 1
End Function

Cordialement.

@MFerrand,

ce n'est pas possible : ou tu ne bois jamais ou tu as un cerveau à rallonge, toi!

On en reparlera !!! Ça ne me dit toujours pas ce qu'est le peket ? Castagnou je vois mieux, encore que !

Je n'ai pas encore fait de choix pour me concocter un cocktail de fin d'année...

@MFerrand,

la prochaine rafale, ce sera pour moi!

https://www.wikiwand.com/fr/Peket

Castagnou = kir châtaigne... à tomber!

Eh, Neurone, à ta santé!

Merci pour l'info ! Je connaissais pas ce nom mais j'apprécie la chose...

@Theze

merci pour ton aide .

je vient de testé

A1= "=NO.SEMAINE(B1;2)"

B1 = la date 19/12/2016

donc A1 me donne 52

je pense avoir avec:

(Range("j1") = Range("j1") + 1 'donne +1 pour le numéros de la semaines)

je cherche a mettre les dates journalière correctement

exemple:

lundi 31/01/2017

mardi 01/02/2017

et non mardi 32/01/2017

@Mferrand

merci mais je n'ai rien compris dsl , que veut tu dire avec les règles EURO ?

par contre pour calculé le numéros de la semaine je pense avoir avec:

(Range("j1") = Range("j1") + 1 'donne +1 pour le numéros de la semaines)

Microsoft doit être capable d'arrivé a 52 ^^

pour le code , je l'utilise comment ?

car je vient de faire un c/c dans le module, je ne le trouve pas dans la liste des macro disponible...

merci de faire simple dans vos explication car je suis boulanger (51ans) et non informaticien

@curulis57 ok pour le verre je me ferai un "casa" a l'apéro

re salut ,

le petit stagiaire a trouver le solution !

le format de la cellule doit être en date 01-jan (ou autre format) en "H3" ,

avec la macro "Range("H3") = Range("H3") + 7" cela fonctionne bien ( ajoute 7 jour a la date )

et cela passe automatiquement au février après le 31-jan

j'ai quand même utiliser la formule de THEZE pour allégé le VBA

A1= "=NO.SEMAINE(B1;2)"

B1 = la date 19/12/2016

donc A1 me donne 52

la solution était sous nos yeux

merci de votre aide a tous

Bonjour,

Puisque tu t'es trouvé une solution, on verra le reste plus tard peut-être... Bonne journée.

merci

De rien ! (pour le moment).

Si je trouve un moment, je commencerai par rendre ton calendrier réinitialisable annuellement... et dans la mesure où ta disposition complique les mises en forme faites habituellement par MFC (grand nombre de MFC), je pense qu'il pourrait être plus simple d'y procéder par macro...

Cordialement.

Rechercher des sujets similaires à "probleme dates"