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...

Phil69970

XLDnaute Barbatruc
Nicolas

Et en supprimant tout cela fonctionne il me semble
Mais à vérifier ...

VB:
'                            If Month(.ListColumns("Date").DataBodyRange(k)) = mois And Day(.ListColumns("Date").DataBodyRange(k)) = i _
'                                   And (.ListColumns("Inconnu").DataBodyRange(k)) = "x" Then
'                                anniv = ""
'                                anniv = anniv & .ListColumns("Anniversaire").DataBodyRange(k) & " " & ", " & vbCrLf
'                            End If
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD

A la base, j'ai rajouté cette partie avec le x pour ne pas prendre en compte l'année (si tu n'en ai pas sûre),
les femmes n'aiment pas dire leur âge, juste la date d'anniversaire en principe .
C'est pour ça que j'ai fais ça ainsi mais la boucle coince.
Et les calcul d'âge ne se calcule pas mieux d'une année sur l'autre malgré le retrait de cette partie
 

TooFatBoy

XLDnaute Barbatruc
Et les calcul d'âge ne se calcule pas mieux d'une année sur l'autre malgré le retrait de cette partie

VB:
If Month(.ListColumns("Date").DataBodyRange(k)) = mois And Day(.ListColumns("Date").DataBodyRange(k)) = i Then
    If Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) = 0 Then
        age = "(-) "
    Else
        age = "(" & Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) & " ans) "
    End If
    anniv = anniv & .ListColumns("Anniversaire").DataBodyRange(k) & " " & age & ", " & vbCrLf
End If
Ben il faudrait peut-être commencer par tester la croix ?



VB:
If Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) = 0
Donc si cette année le résultat est 0, l'année prochaine le résultat sera 1 et du coup on fêtera son premier anniversaire ?

Essaye ceci :
Enrichi (BBcode):
If Month(.ListColumns("Date").DataBodyRange(k)) = mois And Day(.ListColumns("Date").DataBodyRange(k)) = i Then
    If .ListColumns("Inconnu").DataBodyRange(k) <> "" Then
        age = "(-) "
    Else
        age = "(" & Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) & " ans) "
    End If
    anniv = anniv & .ListColumns("Anniversaire").DataBodyRange(k) & " " & age & ", " & vbCrLf
End If
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD

C'est ce que j'ai fait oui, mais c'est pareil,
je sais que je suis un peu couillon mais bon, je doit pas être le seul ou les calculs se font pas, si aujourd'hui tu as un certain âge forcément que l'année prochaine à la même date tu auras un an de plus.
 

TooFatBoy

XLDnaute Barbatruc
je sais que je suis un peu couillon mais bon, je doit pas être le seul ou les calculs se font pas, si aujourd'hui tu as un certain âge forcément que l'année prochaine à la même date tu auras un an de plus.
Je te faisais en fait remarquer que tu fais un test sur l'année d'aujourd'hui, et que donc si ton test fonctionne aujourd'hui et retourne bien 0 parce que l'année de naissance n'a pas été renseignée cette année, l'année prochaine ça ne fonctionnera plus parce que la personne aura 1 an.
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Je ne vois pas où. Peux-tu me montrer STP ?


Je n'ai que répondre à ta demande, tu me demande de te montrer, je te montre, tu vois bien que même sans la partie x, d'une année à l'autre, ce n'est pas bon les calculs
 

TooFatBoy

XLDnaute Barbatruc
Je n'ai que répondre à ta demande, tu me demande de te montrer, je te montre
Oui, merci. Mais en fait je voulais dire "dans ton code", car je disais de commencer par tester la croix alors que dans ton code tu ne le fais qu'après.
Mais c'est bon. Passons à autre chose.

Que veux-tu exactement faire selon les cas :
- pour les personnes nées dans l'année, tu veux afficher quoi ? "0 an", "Naissance", autre chose, rien ?
- pour les personnes dont il ne faut pas tenir compte de l'année de naissance, tu veux afficher quoi ?
- pour les autres personnes, tu veux afficher quoi ? Leur âge en années ?
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Cas n°1 : Soit 0 ou rien
Cas n°2 : Juste le nom seul (sans parenthèse n'y quoi que se soit)
Cas n°3 : Oui

Merci à toi
 

TooFatBoy

XLDnaute Barbatruc
Pour le cas n° 1 j'ai mis "(Naissance)". Tu remplaceras par ce que tu veux si la proposition fonctionne.

VB:
For k = 1 To .ListRows.Count
    If Month(.ListColumns("Date").DataBodyRange(k)) = mois And Day(.ListColumns("Date").DataBodyRange(k)) = i Then
        anniv = anniv & .ListColumns("Anniversaire").DataBodyRange(k)
        If .ListColumns("Inconnu").DataBodyRange(k) = "x" Then
            anniv = anniv & "," & vbCrLf
        Else
            If Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) = 0 Then
                age = "(Naissance)"
            Else
                age = "(" & Year(Date) - Year(.ListColumns("Date").DataBodyRange(k)) & " ans)"
            End If
            anniv = anniv & " " & age & "," & vbCrLf
        End If
    End If
Next k
If anniv <> "" Then anniv = Left(anniv, Len(anniv) - 3)



[edit] Fichier en pièce jointe [/edit]
 

Pièces jointes

  • Agenda V1.2.xlsm
    135.1 KB · Affichages: 1
Dernière édition:

Discussions similaires

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