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

c1

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

c2

Vue de la feuille "Stats repas" (Thalia REYNES, les lignes 121 à 127 sont normalement masquées, comme on voit pour les autres résidents)

c3

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

Rechercher des sujets similaires à "combobox change"