XL 2016 Test Glycemie

clausen

XLDnaute Occasionnel
Bonjour tout le monde

J'ai un casse tête à résoudre avec Excel . Je me demande si c'est possible.

Sur le fichier joint il y a deux tableaux

Le tableau de gauche en noir qui lui fonctionne bien en rentrant les données à la main.

du coté droite en couleur le casse tête

Je dois entrer une donné 3 fois par jour et elle doivent être intégrée dans le tableau de gauche.
Cela en fonction de l'heure qui détermine Matin Midi Soir et à la date du jour de la saisie.

Pensez-vous la chose possible.

Merci d'avance pour votre réponse et bonne journée
 

Pièces jointes

  • Test Glycemie (1).xlsx
    14.4 KB · Affichages: 50

clausen

XLDnaute Occasionnel
Je reviens à la charge avec un autre tableau ou j'aimerai que le curseur se mette automatiquement sur la date du jour.

Est ce possible. Si c'est le cas merci d'avance et bon confinement.
 

Pièces jointes

  • Test.xlsx
    10.7 KB · Affichages: 5

clausen

XLDnaute Occasionnel
Au secoure

J'ai prix mon archive vide pour commencer 2021 et ça fonctionne plus.

Bonne année quand même et tout de bon . Si des fois tu arrives à faire quelque chose.

Bonne journée
 

Pièces jointes

  • Repas & Glycemie 2021.xlsm
    107.6 KB · Affichages: 5

soan

XLDnaute Barbatruc
Inactif
je parle du code VBA de ThisWorkbook (fais Alt F11 pour le voir) :
VB:
Option Explicit

Private Sub Workbook_Open()
  Worksheets(Month(Date)).Select
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  'ne rien faire si la feuille active n'est pas celle du mois en cours
  If Sh.Index <> Month(Date) Then Exit Sub
  Dim t As Date: t = Time
  Cells(Day(Date) + 2, 11 + 2 * (t <= [I2]) + 2 * (t <= [G2])).Select
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  [A1].Select
End Sub
(fais de nouveau Alt F11 pour retourner sur Excel)

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @clausen,

lis d'abord mes 2 posts précédents.

en fait, je ne sais pas bien ce qui n'allait pas dans ton code VBA ; j'ai simplement réécrit
ton code VBA à ma façon, et en le simplifiant beaucoup ; ça a sans doute arrangé c'qui
n'allait pas, puisque tu n'as pas écrit que quelque chose ne va pas ! :p :D 😁




ta 3ème sub était ainsi :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Range("A1").Select
End Sub
je l'ai réécrite ainsi :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  [A1].Select
End Sub
mais c'est juste l'utilisation d'une notation simplifiée ; le fait d'utiliser
les crochets fait que la fonction Evaluate() est appelée implicitement.




ta 1ère sub était ainsi :
VB:
Private Sub Workbook_Open()
  Feuil1.Activate
  Sheets(Month(Date)).Activate
End Sub
note que Month(Date) retourne forcément un nombre de 1 à 12
➯ c'est forcément une des feuilles n° 1 à 12 qui est activée, et
ton activation préalable de Feuil1 (Janvier) est inutile.

c'est pourquoi j'ai réécrit ta sub ainsi :

VB:
Private Sub Workbook_Open()
  Worksheets(Month(Date)).Select
End Sub
selon le n° du mois, je sélectionne la feuille d'index n° 1 à 12.

dans ta fenêtre de Projet VBA, note que pour tes 9 feuilles de "Janvier" à "Septembre",
j'ai renommé le CodeName de la feuille en ajoutant un "0" devant le chiffre "1" à "9" ;
ainsi, tes feuilles apparaissent dans l'ordre, et non plus avec "Feuil10" à "Feuil13"
sous "Feuil1" et avant "Feuil2".




ta 2ème sub était ainsi :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Long, j As Long
' Utilisation de Sh.Index pour retrouver Mois Actuel
If Sh.Index <> Month(Date) Then Exit Sub
i = Application.Match(CLng(Date), Sh.Range("F1:F33"), 0)
    If CDbl(Time()) < [K2] And CDbl(Time()) > [I2] Then
        j = 11
    ElseIf CDbl(Time()) < [I2] And CDbl(Time()) > [G2] Then
        j = 9
    Else
       j = 7
    End If
Sh.Cells(i, j).Select
End Sub
je l'ai réécrite ainsi :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  'ne rien faire si la feuille active n'est pas celle du mois en cours
  If Sh.Index <> Month(Date) Then Exit Sub
  Dim t As Date: t = Time
  Cells(Day(Date) + 2, 11 + 2 * (t <= [I2]) + 2 * (t <= [G2])).Select
End Sub
1) note bien que je n'ai pas utilisé la fonction Match()

2) pour sélectionner la bonne cellule :

a) n° ligne = Day(Date) + 2
le + 2 est car sur une feuille mois donnée, colonne F, les 2 premières lignes
n° 1 et 2 ne sont pas utilisées, et la 1ère date commence en ligne n° 3.

b) n° colonne = 11 + 2 * (t <= [I2]) + 2 * (t <= [G2])
la colonne « de départ » est la colonne n° 11 : c'est la colonne K ; ensuite,
on enlève 2 si l'heure t <= i2 (<= 14:00) ➯ colonne i ; puis on enlève
encore 2 si t <= G2 (<= 9:00) ➯ colonne G ; attention : si un test est faux,
c'est pareil que 0, donc : + 2 * 0 = + 0 ; si un test est vrai, c'est pareil que
-1, donc : + 2 * -1 = - 2 ; c'est donc bien un retrait, même s'il y a « + » ;
ceci en VBA car sur une feuille de calcul : test faux = 0 et test vrai = 1.




j'espère que tout sera ok, sinon, tu peux me demander une adaptation
ou un complément d'infos. :)


soan
 

soan

XLDnaute Barbatruc
Inactif
pour ta dernière feuille, je crois que @R@chid (salut et bonne année ! 🥳) pourra confirmer
que tu as oublié d'anonymiser tes données F6 à F9 ; i7 ; i11 et i18. 😜 peut-être aussi
i17 et i4 ? :rolleyes: (un indice : nan, c'est pas qu'il manque de l'huile d'arachide, mais t'y es presque ! 😛😄)


je suis sûr que ce sont des plats qui ont un très gros risque de glycémie ou d'hyperglycémie
➯ à retirer d'urgence ! je précise qu'il s'agit du fichier du post #32 ; données inchangées
dans le fichier de mon post #33. :oops:


soan
 
Dernière édition:

clausen

XLDnaute Occasionnel
Merci mille fois pour tous ces renseignement . Je suis incapable d'écrire le moindre code.
Ce n'est pas moi qui ai codé ce tableau. Je vais réessayer avec ta correction et je te tiends au courant.
En attentant encore merci et bon dimanche
 

soan

XLDnaute Barbatruc
Inactif
@clausen

pour mes 2 posts précédents #42 et #43, j'ai écrit : « précise mieux c'qui va pas » ;
en clair : quand tu dis : « le curseur ne se positionne pas dans la case exacte du
jour et de la période horaire. », voici ce que je comprends :

a) (sous-entendu) y'a pas de problème de feuille : ça sélectionne bien la bonne
feuille concernée, donc la feuille du mois en cours, en l'occurrence la feuille
"Janvier" (car on est bien en Janvier de l'An de Grâce 2021, après JC)

b) le curseur doit se positionner sur la ligne 5, car c'est la ligne qui correspond
au 03/01/21 (car comme par hasard, on est dimanche 3 janvier 2021)

c) la colonne doit être la colonne K, car la journée de ce dimanche de weekend
est suffisamment bien entamée pour qu'on soit déjà le soir, à 19:00 (au 4ème top
de l'horloge parlante, il est exactement 19 h 17)


conclusion : le curseur doit être en K5 (bingo, c'est gagné ! 😜)


soan
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 349
Membres
103 822
dernier inscrit
kader55