Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Création agenda

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonsoir tout le monde,

Sur ma création d'agenda, j'ai un petit problème avec mon code, y a un petit truc que j'arrive pas à régler.
Si le mois n'existe pas je le créer sans soucis, mais si le mois existe, ça me dis que le moi existe déjà, je dis ok mais sur ma feuille paramètre ça scroll jusqu'à la colonne "Q", il y a une tuile, je vois un peut près ou mais j'arrive pas à l'interpétrer comme il faut.

Merci à tous
Nico



 

Pièces jointes

  • Agenda v22.xlsm
    92.3 KB · Affichages: 8
Dernière édition:
Solution
Nicolas

Ton Pb vient d'ici


et comme je ne pense pas que l'on peut scroller une feuille non active il faudrait mémoriser le nombre de scroll de colonne

VB:
Function Actu_jour(année, mois)
    Application.ScreenUpdating = False
    Dim i As Long, nbjour As Long
    nbjour = Day(DateSerial(année, mois + 1, 0)) ' te donne le nombre de jour dans le mois en parametre
    lig = 2: col = 3
    With Worksheets("Feuil1")
        For i = 1 To nbjour
            '.Range(.Cells(lig, col), .Cells(lig + 1, col)).Interior.ColorIndex = 24
            If année = Year(Date) And mois = Month(Date) And i = Day(Date) Then
                '.Range(.Cells(lig, col), .Cells(lig + 1, col)).Interior.ColorIndex = 28 'Coloriage aujourd'hui...

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
A modifier cette partie dans le module, partie coloriage des jours

VB:
            M = 14
            For l = 1 To 7
                If Worksheets("Paramètre").Range("E" & M).Value = True And Weekday(DateSerial(année, mois, i), vbMonday) = Worksheets("Paramètre").Range("F" & M).Value Then
                    .Range(.Cells(lig + 2, col), .Cells(derlig + 1 - Hap, col)).Interior.ColorIndex = 39
                End If
                M = M + 1
            Next l

Le fait de mettre avec ou sans pose le coloriage ne se faisait plus par rapport au jours de repos
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous
Pour les fonctions donnant le N° de la semaine voilà une comparaison entre NO.SEMAINE et NO.SEMAINE.ISO (utilisée en europe)
NO.SEMAINE(C2;2)NO.SEMAINE.ISO(C2)
lundi​
01/01/2024​
11
mercredi​
01/01/2025​
11
jeudi​
01/01/2026​
11
vendredi​
01/01/2027​
153
samedi​
01/01/2028​
152
lundi​
01/01/2029​
11
mardi​
01/01/2030​
11
mercredi​
01/01/2031​
11
jeudi​
01/01/2032​
11
samedi​
01/01/2033​
153
dimanche​
01/01/2034​
152
lundi​
01/01/2035​
11
mardi​
01/01/2036​
11
jeudi​
01/01/2037​
11
vendredi​
01/01/2038​
153
samedi​
01/01/2039​
152
dimanche​
01/01/2040​
152
mardi​
01/01/2041​
11
mercredi​
01/01/2042​
11
jeudi​
01/01/2043​
11
vendredi​
01/01/2044​
153
dimanche​
01/01/2045​
152
lundi​
01/01/2046​
11
mardi​
01/01/2047​
11
mercredi​
01/01/2048​
11
vendredi​
01/01/2049​
153
samedi​
01/01/2050​
152

De ce fait les numéros de semaine suivants sont décalés de -1 pour le reste de l'année lorsque le N° de semaine iso est 52 ou 53 !
A bientôt
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re
Et comment tu corriges cela ici
J'y travaille, je cherche
Une formule de Laurent LONGRE au temps où son site existait encore (valable quelque soit l'année en court) :
Enrichi (BBcode):
=ENT((madate-(DATE(ANNEE(madate-JOURSEM(madate-1)+4);1;3)-JOURSEM(DATE(ANNEE(madate-JOURSEM(madate-1)+4);1;3)))+5)/7)
Autre formule trouvée jadis sur le net (je ne sais plus où) mais limitée au 28/02/2104 :
Enrichi (BBcode):
=ENT(MOD(ENT((madate-2)/7)+0,6;52+5/28))+1

Formules à adapter pour le VBA...
Bon courage et à bientôt
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re,
La formule de Laurent LONGRE sous forme de fonction VBA :

VB:
Function IsoWeekNum(jour As Date)
     Interm = DateSerial(Year(jour - WorksheetFunction.Weekday(jour - 1) + 4), 1, 3)
     IsoWeekNum = (jour - (Interm - WorksheetFunction.Weekday(Interm)) + 5) \ 7
End Function

À bientôt
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD

Bonjour à tous,

Merci pour le retour, entre temps j'avais trouvé aussi

VB:
Function SemISO(MyDate As Date) As Integer
  SemISO = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
  If SemISO > 52 Then
    If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then SemISO = 1
  End If
End Function

Et qui donne le même résultat que le tient (au 1er septembre plus de soucis) à tester pour les autres
Merci

Nico
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…