XL 2016 problème au niveau d'un contrôle dans VBA

  • Initiateur de la discussion Initiateur de la discussion chinel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chinel

XLDnaute Impliqué
Bonjour tout le monde, j'ai réalisé un petit programme en vba mais dans la partie "Préventifs" quand je supprime une machine de la listboxpreventif tout va bien mais au niveau visuel, j'ai un contrôle nommé CE01R qui doit prendre la valeur de textbox22 mais rien ne s'affiche, j'ai beau retourner le problème je ne trouve pas la solution. Voici la partie qui pose problème. Merci de votre aide.

VB:
Private Sub CommandButton9_Click()
    Dim pageControles As MSForms.page
    Dim pageListBox As MSForms.page
    Dim tempsInitial As Double
    Dim idx As Long
    Dim nomMachine As String
    
    ' Onglets
    Set pageControles = Me.MultiPage1.Pages(0) ' Page1 : contrôles
    Set pageListBox = Me.MultiPage1.Pages(2)   ' Page3 : ListBoxpreventif
    
    ' Vérifier sélection
    idx = pageListBox.Controls("ListBoxpreventif").ListIndex
    If idx = -1 Then
        MsgBox "Sélectionnez une ligne avant de supprimer.", vbExclamation
        Exit Sub
    End If
    
    ' Récupérer nom machine
    nomMachine = pageListBox.Controls("ListBoxpreventif").List(idx, 0)
    
    ' Supprimer la ligne
    pageListBox.Controls("ListBoxpreventif").RemoveItem idx
    
    ' Temps initial en minutes depuis TextBox22 (en dehors du MultiPage)
    tempsInitial = HeureEnMinutes(Me.TextBox22.Value)
    
    ' --- Vider les contrôles dynamiques et mettre fond blanc ---
    With pageControles.Controls("Prob" & (idx + 1))
        .Value = ""
        .BackColor = &HFFFFFF
    End With
    
    With pageControles.Controls("Arret" & (idx + 1))
        .Value = ""
        .BackColor = &HFFFFFF
    End With
    
    With pageControles.Controls("preventif" & (idx + 1))
        .Value = ""
        .BackColor = &HFFFFFF
    End With
    
    With pageControles.Controls("CE0" & (idx + 1) & "Q")
        .Value = ""
        .BackColor = &HFFFFFF
    End With
    
    ' CE0XR = valeur de TextBox22 en minutes
    With pageControles.Controls("CE0" & (idx + 1) & "R")
        .Value = tempsInitial
        .BackColor = &HFFFFFF
    End With
    
    ' Message rappel
    MsgBox "Vu que vous avez supprimé la machine " & nomMachine & _
           ", ne pas oublier de remettre la quantité.", vbInformation, "Rappel"
    
    ' Désactiver combobox
    Me.Controls("ComboBox1").Enabled = False
    Me.Controls("ComboBox3").Enabled = False
    
    ' Appels aux autres procédures
    Call MettreAJourCompteursArrets
    Call VerifierT16T09T24T03
    Call VerifierArrets
    Call CalculerTauxReussite
End Sub
 

Pièces jointes

Solution
Bonjour à tous,
Vous n'avez pas besoin de passer par la collection de contrôles pour la plupart des cas. Utilisez simplement le nom du contrôle.
Tester cette version :
VB:
Private Sub CommandButton9_Click()

    With ListBoxpreventif
        If .ListIndex > -1 Then
            Dim indexString As String
            indexString = CStr(.ListIndex + 1)

            .RemoveItem .ListIndex
            Dim tempsInitial As Double
            tempsInitial = HeureEnMinutes(Me.TextBox22.Value)

            ' --- Vider les contrôles dynamiques et mettre fond blanc ---
            Dim itemControl As MSForms.Control
            For Each itemControl In Me.Frame1.Controls
                With itemControl
                    Debug.Print .Name...
Bonjour à tous,
Vous n'avez pas besoin de passer par la collection de contrôles pour la plupart des cas. Utilisez simplement le nom du contrôle.
Tester cette version :
VB:
Private Sub CommandButton9_Click()

    With ListBoxpreventif
        If .ListIndex > -1 Then
            Dim indexString As String
            indexString = CStr(.ListIndex + 1)

            .RemoveItem .ListIndex
            Dim tempsInitial As Double
            tempsInitial = HeureEnMinutes(Me.TextBox22.Value)

            ' --- Vider les contrôles dynamiques et mettre fond blanc ---
            Dim itemControl As MSForms.Control
            For Each itemControl In Me.Frame1.Controls
                With itemControl
                    Debug.Print .Name
                    If LCase$(.Name) Like "prob*" Then
                        .Value = vbNullString
                        .BackColor = vbWhite
                    End If
                End With
            Next itemControl

            ' CE0XR = valeur de TextBox22 en minutes
            With Me.Controls("CE0" & (indexString) & "R")
                .Value = tempsInitial
                .BackColor = &HFFFFFF
            End With

            ' Message rappel
            MsgBox "Vu que vous avez supprimé la machine " & .Value & _
                   ", ne pas oublier de remettre la quantité.", vbInformation, "Rappel"
            
            ' Désactiver combobox
            ComboBox1.Enabled = False
            ComboBox3.Enabled = False

            ' Appels aux autres procédures
            Call MettreAJourCompteursArrets
            Call VerifierT16T09T24T03
            Call VerifierArrets
            Call CalculerTauxReussite
        Else
            MsgBox "Sélectionnez une ligne avant de supprimer.", vbExclamation
            Exit Sub
        End If
    End With

End Sub
 
Bonjour à tous,
Vous n'avez pas besoin de passer par la collection de contrôles pour la plupart des cas. Utilisez simplement le nom du contrôle.
Tester cette version :
VB:
Private Sub CommandButton9_Click()

    With ListBoxpreventif
        If .ListIndex > -1 Then
            Dim indexString As String
            indexString = CStr(.ListIndex + 1)

            .RemoveItem .ListIndex
            Dim tempsInitial As Double
            tempsInitial = HeureEnMinutes(Me.TextBox22.Value)

            ' --- Vider les contrôles dynamiques et mettre fond blanc ---
            Dim itemControl As MSForms.Control
            For Each itemControl In Me.Frame1.Controls
                With itemControl
                    Debug.Print .Name
                    If LCase$(.Name) Like "prob*" Then
                        .Value = vbNullString
                        .BackColor = vbWhite
                    End If
                End With
            Next itemControl

            ' CE0XR = valeur de TextBox22 en minutes
            With Me.Controls("CE0" & (indexString) & "R")
                .Value = tempsInitial
                .BackColor = &HFFFFFF
            End With

            ' Message rappel
            MsgBox "Vu que vous avez supprimé la machine " & .Value & _
                   ", ne pas oublier de remettre la quantité.", vbInformation, "Rappel"
           
            ' Désactiver combobox
            ComboBox1.Enabled = False
            ComboBox3.Enabled = False

            ' Appels aux autres procédures
            Call MettreAJourCompteursArrets
            Call VerifierT16T09T24T03
            Call VerifierArrets
            Call CalculerTauxReussite
        Else
            MsgBox "Sélectionnez une ligne avant de supprimer.", vbExclamation
            Exit Sub
        End If
    End With

End Sub
Merci Valtrase ! Bon week-end !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
234
Réponses
3
Affichages
298
Réponses
3
Affichages
896
Réponses
8
Affichages
1 K
Retour