Combobox_change
Bonjour
J'ai un fichier qui gère les présences des personnes handicapés au Foyer d'Hébergement et l'annulation des repas quand ils sont absents aux repas pour diverses raisons (CAF - CD - KFK...) qui fonctionne trés bien
J'ai créé un userform permettant de modifier les présences au FH et l'annulation des repas pour le jour choisi dans le calendrier annuel (feuille active qui se nomme "Calendrier").
Concernant les présences FH, tout fonctionne bien :
Si je choisis une valeur de la comboboxPres (x, x>, x<, "", >, <), les valeurs sont modifiées dans la feuille "Stats repas" qui contient toutes les infos concernant les résidents
Et le label ("Lp") situé au dessous (Midi-Soir-Nuit) se met à jour par des 1 si présent et 0 si absent.
Par contre, j'ai fait la même chose pour les repas de midi et soir: (ComboboxMid - ComboboSoir)
Quand je modifie ces valeurs, la feuille "Stats repas" est bien mis à jour mais pas le label "Midi-Soir-Nuit" ne se met pas à jour tout de suite, parfois oui, parfois le coup d'après, parfois pas.
Ce label se met à jour si je rajoute un msgbox comboboxSoir en début du code Comboboxsoir_change pour les repas du soir (idem pour repas de midi).
je remarque également en mettant des msgbox dans les combobox_change (pour les repas) que cette procédure est appelé à l'ouverure de l'userform (intialize) alors que je pensais que cette procédure se lancerait seulement en cas de changement de la valeur de ces combobox.
DONC ma feuille "Stats repas" est dans tous les coup à jour quand je modifie les valeurs dans l'userform et que la feuille "Calendrier" est également à jour directement quand je modifie les valeurs de l'userform et si je ferme l'userform et je la reouvre, les valeurs du label sont bien mis à jour.
Pourquoi le label se met bien à jour pour les présences et pas directement pour les repas alors que les codes de ces procédures sont quasiment les mêmes?
Pourriez-vous m'éclairer et m'aider à comprendre mon erreur svp?
peut être que l'événement _change n'est pas le bon évenement pour cette opération/
Je vous remercie de votre aide
Cordialement
Voici mon code :
Private Sub UserForm_initialize()
Dim couleurs(): Dim i As Integer: Dim nomP As String: Dim derniere_ligne As Integer: Dim date_selectionnee As Date: Dim ligne As Integer: Dim num_ligneP As Integer: Dim colFH As Integer: Dim test1 As Integer
LabelD1.Caption = Format(ActiveCell.Offset(0, -1), "ddd dd mmm yyyy")
ComboBoxMidi.AddItem "C": ComboBoxMidi.AddItem "S": ComboBoxMidi.AddItem "CAF": ComboBoxMidi.AddItem "HF"
ComboBoxMidi.AddItem "KFK": ComboBoxMidi.AddItem "CD": ComboBoxMidi.AddItem "CI": ComboBoxMidi.AddItem "": ComboBoxMidi.AddItem "0": ComboBoxMidi.AddItem "1"
ComboBoxSoir.AddItem "C": ComboBoxSoir.AddItem "S": ComboBoxSoir.AddItem "CAF": ComboBoxSoir.AddItem "HF"
ComboBoxSoir.AddItem "KFK": ComboBoxSoir.AddItem "CD": ComboBoxSoir.AddItem "CI": ComboBoxSoir.AddItem "": ComboBoxSoir.AddItem "0": ComboBoxSoir.AddItem "1"
'Remplissage
date_selectionnee = ActiveCell.Offset(0, -1)
Select Case nomP
Case "Daniel": num_ligneP = 58
Case "Thibaut": num_ligneP = 67
Case "Caroline": num_ligneP = 76
Case "Arnaud": num_ligneP = 85
Case "Deborah": num_ligneP = 94
Case "Marjorie": num_ligneP = 103
Case "Theo": num_ligneP = 112
Case "Thalia": num_ligneP = 121
Case "Andrew": num_ligneP = 130
Case "Aude": num_ligneP = 139
Case "Quentin": num_ligneP = 148
Case "Amandine": num_ligneP = 157
Case "Selim": num_ligneP = 166
Case "Wilfried": num_ligneP = 175
Case "Krystopher": num_ligneP = 184
Case "Kelvine": num_ligneP = 191
Case "Melanie": num_ligneP = 198
Case "Frederique": num_ligneP = 205
End Select
'affichage présences FH et repas
For colFH = 5 To 382
If Sheets("Stats repas").Cells(55, colFH) = date_selectionnee Then
ComboBoxPres.Value = Sheets("Stats repas").Cells(num_ligneP, colFH).Value
test1 = Sheets("Stats repas").Cells(num_ligneP - 2, colFH).Value
ComboBoxMidi.Value = Sheets("Stats repas").Cells(num_ligneP + 4, colFH).Value
ComboBoxSoir.Value = Sheets("Stats repas").Cells(num_ligneP + 5, colFH).Value
Lp.Caption = Sheets("Stats repas").Cells(num_ligneP + 1, colFH).Value & "-" & Sheets("Stats repas").Cells(num_ligneP + 2, colFH).Value & "-" & Sheets("Stats repas").Cells(num_ligneP + 3, colFH).Value
Exit For
End If
Next
If test1 = 1 Or test1 = 2 Then
ComboBoxPres.AddItem "<": ComboBoxPres.AddItem ">": ComboBoxPres.AddItem ""
Else
ComboBoxPres.AddItem "x": ComboBoxPres.AddItem "x>": ComboBoxPres.AddItem "x<": ComboBoxPres.AddItem "<": ComboBoxPres.AddItem ">": ComboBoxPres.AddItem "":
End If
End Sub
Private Sub ComboBoxMidi_Change() 'Au changement du repas de midi
Dim Datep As Date: Dim nomP As String: Dim num_ligneP As Integer: Dim plage2P As Range: Dim cell As Variant: Dim col1 As Integer: Dim col As String
Datep = ActiveCell.Offset(0, -1): nomP = Range("a1").Value
ActiveCell.Offset(0, 1).ClearComments
MsgBox ComboBoxMidi.Value
Select Case nomP
Case "Daniel": num_ligneP = 58
Case "Thibaut": num_ligneP = 67
Case "Caroline": num_ligneP = 76
Case "Arnaud": num_ligneP = 85
Case "Deborah": num_ligneP = 94
Case "Marjorie": num_ligneP = 103
Case "Theo": num_ligneP = 112
Case "Thalia": num_ligneP = 121
Case "Andrew": num_ligneP = 130
Case "Aude": num_ligneP = 139
Case "Quentin": num_ligneP = 148
Case "Amandine": num_ligneP = 157
Case "Selim": num_ligneP = 166
Case "Wilfried": num_ligneP = 175
Case "Krystopher": num_ligneP = 184
Case "Kelvine": num_ligneP = 191
Case "Melanie": num_ligneP = 198
Case "Frederique": num_ligneP = 205
End Select
ThisWorkbook.Worksheets("Stats repas").Activate
Set plage2P = ThisWorkbook.Worksheets("Stats repas").Range("e55:nr55")
For Each cell In plage2P
If cell.Value = CDate(Datep) Then
col1 = cell.Column: col = Mid(cell.Address, 2, InStr(2, cell.Address, "$") - 2)
End If
Next cell
With ThisWorkbook.Worksheets("Stats repas") 'Affectation de la valeur de midi de la liste déroulante dans la feuille Stats repas
.Cells(num_ligneP + 4, col1).Value = ComboBoxMidi.Value
End With
' Mis à jour du label Lp (0,0,1)
ThisWorkbook.Worksheets("Calendrier").Activate
Call essai1 'Appel de la procédure essai1 pour mettre à jour le planning
End Sub
Private Sub ComboBoxSoir_Change() ' Au changement du repas du soir
Dim Datep As Date: Dim nomP As String: Dim num_ligneP As Integer: Dim plage2P As Range: Dim cell As Variant: Dim col1 As Integer: Dim col As String
Datep = ActiveCell.Offset(0, -1): nomP = Range("a1").Value
ActiveCell.Offset(0, 1).ClearComments
MsgBox ComboBoxSoir.Value
Select Case nomP
Case "Daniel": num_ligneP = 58
Case "Thibaut": num_ligneP = 67
Case "Caroline": num_ligneP = 76
Case "Arnaud": num_ligneP = 85
Case "Deborah": num_ligneP = 94
Case "Marjorie": num_ligneP = 103
Case "Theo": num_ligneP = 112
Case "Thalia": num_ligneP = 121
Case "Andrew": num_ligneP = 130
Case "Aude": num_ligneP = 139
Case "Quentin": num_ligneP = 148
Case "Amandine": num_ligneP = 157
Case "Selim": num_ligneP = 166
Case "Wilfried": num_ligneP = 175
Case "Krystopher": num_ligneP = 184
Case "Kelvine": num_ligneP = 191
Case "Melanie": num_ligneP = 198
Case "Frederique": num_ligneP = 205
End Select
ThisWorkbook.Worksheets("Stats repas").Activate
Set plage2P = ThisWorkbook.Worksheets("Stats repas").Range("e55:nr55")
For Each cell In plage2P
If cell.Value = CDate(Datep) Then
col1 = cell.Column: col = Mid(cell.Address, 2, InStr(2, cell.Address, "$") - 2)
End If
Next cell
With ThisWorkbook.Worksheets("Stats repas") 'Affectation de la valeur de midi de la liste déroulante dans la feuille Stats repas
.Cells(num_ligneP + 5, col1).Value = ComboBoxSoir.Value
End With
ThisWorkbook.Worksheets("Calendrier").Activate
Call essai1
End Sub
Private Sub ComboBoxPres_Change()
Dim Datep As Date: Dim num_ligneP As Integer: Dim nomP As String: Dim cell As Variant: Dim col1 As Integer: Dim bilan As String: Dim bilan2 As String: Dim plage2P As Range: Dim col As String
Datep = ActiveCell.Offset(0, -1): nomP = Range("a1").Value
Select Case nomP 'numéro de ligne selon résident
Case "Daniel": num_ligneP = 58
Case "Thibaut": num_ligneP = 67
Case "Caroline": num_ligneP = 76
Case "Arnaud": num_ligneP = 85
Case "Deborah": num_ligneP = 94
Case "Marjorie": num_ligneP = 103
Case "Theo": num_ligneP = 112
Case "Thalia": num_ligneP = 121
Case "Andrew": num_ligneP = 130
Case "Aude": num_ligneP = 139
Case "Quentin": num_ligneP = 148
Case "Amandine": num_ligneP = 157
Case "Selim": num_ligneP = 166
Case "Wilfried": num_ligneP = 175
Case "Krystopher": num_ligneP = 184
Case "Kelvine": num_ligneP = 191
Case "Melanie": num_ligneP = 198
Case "Frederique": num_ligneP = 205
End Select
ThisWorkbook.Worksheets("Stats repas").Activate 'recherche colonne dans Stats repas
Set plage2P = ThisWorkbook.Worksheets("Stats repas").Range("e55:nr55")
For Each cell In plage2P
If cell.Value = CDate(Datep) Then
col1 = cell.Column: col = Mid(cell.Address, 2, InStr(2, cell.Address, "$") - 2)
End If
Next cell
With ThisWorkbook.Worksheets("Stats repas") 'maj de la valeur
bilan = ComboBoxPres.Value: .Cells(num_ligneP, col1).Value = ComboBoxPres.Value
End With
ThisWorkbook.Worksheets("Calendrier").Activate 'saisie ou non de FH dans la cellule active de la feuille Calendrier
If bilan = "x>" Or bilan = "x<" Or bilan = "x" Then
bilan2 = "FH"
Else
bilan2 = ""
End If
ActiveCell.Offset(0, 1).Value = bilan2: ActiveCell.Offset(0, 1).Font.color = RGB(186, 74, 0)
Call essai1
End Sub
Sub essai1()
Dim couleurs(): Dim ligne As Integer: Dim nomP As String: Dim derniere_ligne As Integer: Dim date_selectionnee As Date: Dim num_ligneP As Integer: Dim colFH As Integer: Dim commrepas As String
Sheets("Calendrier").Activate
Select Case nomP
Case "Daniel": num_ligneP = 58
Case "Thibaut": num_ligneP = 67
Case "Caroline": num_ligneP = 76
Case "Arnaud": num_ligneP = 85
Case "Deborah": num_ligneP = 94
Case "Marjorie": num_ligneP = 103
Case "Theo": num_ligneP = 112
Case "Thalia": num_ligneP = 121
Case "Andrew": num_ligneP = 130
Case "Aude": num_ligneP = 139
Case "Quentin": num_ligneP = 148
Case "Amandine": num_ligneP = 157
Case "Selim": num_ligneP = 166
Case "Wilfried": num_ligneP = 175
Case "Krystopher": num_ligneP = 184
Case "Kelvine": num_ligneP = 191
Case "Melanie": num_ligneP = 198
Case "Frederique": num_ligneP = 205
End Select
'affichage présences FH et repas
For colFH = 5 To 382
If Sheets("Stats repas").Cells(55, colFH) = date_selectionnee Then
ComboBoxPres.Value = Sheets("Stats repas").Cells(num_ligneP, colFH).Value
ComboBoxMidi.Value = Sheets("Stats repas").Cells(num_ligneP + 4, colFH).Value
ComboBoxSoir.Value = Sheets("Stats repas").Cells(num_ligneP + 5, colFH).Value
Lp.Caption = Sheets("Stats repas").Cells(num_ligneP + 1, colFH).Value & "-" & Sheets("Stats repas").Cells(num_ligneP + 2, colFH).Value & "-" & Sheets("Stats repas").Cells(num_ligneP + 3, colFH).Value
If ThisWorkbook.Worksheets("Stats repas").Cells(num_ligneP + 4, colFH).Value <> "" Or ThisWorkbook.Worksheets("Stats repas").Cells(num_ligneP + 5, colFH).Value <> "" Then
commrepas = LCase(ThisWorkbook.Worksheets("Stats repas").Cells(num_ligneP + 4, colFH).Value) & "-" & UCase(ThisWorkbook.Worksheets("Stats repas").Cells(num_ligneP + 5, colFH).Value)
If ActiveCell.Offset(0, 1).Comment Is Nothing Then
ActiveCell.Offset(0, 1).AddComment
ActiveCell.Offset(0, 1).Comment.Text Text:=commrepas
With ActiveCell.Offset(0, 1).Comment.Shape
.TextFrame.AutoSize = True
.OLEFormat.Object.Font.Size = 6 'Taille du texte
.OLEFormat.Object.Interior.ColorIndex = 15 'Couleur de fond
.TextFrame.Characters.Font.ColorIndex = 54 'Couleur de la police
.TextFrame.Characters.Font.Bold = True 'Ecriture gras
.OLEFormat.Object.Font.Name = "Book Antiqua" 'Type de police
End With
Else
ActiveCell.Offset(0, 1).Comment.Text Text:=commrepas
With ActiveCell.Offset(0, 1).Comment.Shape
.TextFrame.AutoSize = True
.OLEFormat.Object.Font.Size = 6 'Taille du texte
.OLEFormat.Object.Interior.ColorIndex = 15 'Couleur de fond
.TextFrame.Characters.Font.ColorIndex = 54 'Couleur de la police
.TextFrame.Characters.Font.Bold = True 'Ecriture gras
.OLEFormat.Object.Font.Name = "Book Antiqua" 'Type de police
End With
End If
End If
Sheets("Calendrier").Activate
Exit For
End If
Next
Sheets("Calendrier").Activate
End Sub
Vue de la feuille "Calendrier" et de l'userform
Vue de la feuille "Stats repas" (Thalia REYNES, les lignes 121 à 127 sont normalement masquées, comme on voit pour les autres résidents)
Bonjour Sylvain, bonjour le forum,
Il est où le fichier qui va avec le code ?!...
il est trop lourd
Re,
Dommage mais sans fichier je ne m'y risque pas...
J'ai fait une copie du fichier et j'ai supprimé les userforms et les feuilles inutiles
Je comprends rien, en supprimant des feuilles et des userforms, le pb semble avoir disparu.
Je vais controler de plus près et reviens vers le forum si besoin
Peut-etre parce que l'userform "Menu" restait ouvert en arrière plan donc 2 userforms ouverts donc de probables conflits.
DONC j'ai repris le fichier officiel et
J'ai effacé quelques feuilles et userforms inutiles
et unload l'userform "Menu" quand depuis cet userform "Menu" j'ouvre l'userform des présences pour n'avoir qu'un userform ouvert
et tout semble fonctionné. Bizarre
Je vous remercie
Cordialement