Aide / Explication pour un code qui ne fonctionne pas, mais sans erreur

Bonjour au forum,

Je cherche à comprendre pourquoi mon code ci-après ne fonctionne pas :

Private Sub Txt_plaque_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim dlplaque As Long
Dim NPlaque As Variant
Dim c As Variant
Dim n As Long
Dim Emplacement As Variant
    'rechercher emplacement déjà pris selon n° de plaque
        dlplaque = Sheets("Analyse").Range("D" & Rows.Count).End(xlUp).Row
        NPlaque = Me.Txt_plaque.Value
        For Each c In Sheets("Analyse").Range("D3:D" & dlplaque)
        Emplacement = c.Offset(0, 1).Value
            If c = NPlaque Then
                For n = 1 To 12
                    If Me.Controls("OptionButton" & n).Caption = Emplacement Then
                        Me.Controls("OptionButton" & n).Enabled = False
                    End If
                Next n
            End If
        Next c
End Sub

Dans mon userform, je cherche à récupérer les emplacements déjà pris d'une plaque lors de pipetage dans un laboratoire et donc à griser les optionbutton correspondants, pour empêcher l'utilisateur de les sélectionner.

Pour cela, je compare l'identifiant de la plaque via la saisie dans le Textbox, je compare cette valeur avec chaque valeur de la base de données dans la feuille "Analyse" (colonne "D"). Si correspondance, je compare l'emplacement sur la plaque (en colonne "E", variable "Emplacement") avec le numéro de l'optionbutton (variable "n").

Si correspondance, donc si l'emplacement de cette plaque a déjà été utilisé, je veux griser l'optionbutton.

Le code ne rend pas d'erreur, mais aucun optionbutton ne se grise, même lorsque la variable "Emplacement" = la variable "n".

Par exemple, si je renseigne "Plaque2" dans mon Textbox, les variables "Emplacement" sont 2 / 3 / 4 et 8.

Or, après vérification en mode débogage, quand "Emplacement" = 2 et "n" = 2, l'optionbutton2 ne se grise pas.

Je précise que je suis totalement autodidacte et apprend petit à petit grâce au forum, j'espère que vous serez indulgents avec moi

5fof-plaque.xlsm (16.31 Ko)

bonjour,

modifie cette instruction ainsi : (caption est un string et emplacement un nombre que tu dois convertir en string pour que la comparaison correcte puis se faire)

  If Me.Controls("OptionButton" & n).Caption = Emplacement & "" Then

Bonjour H₂SO₄,

Merci beaucoup pour ta réponse. Je crois que j'aurai cherché un sacré moment encore...

Je profite de ton expertise, si cela ne dérange pas trop pour une autre petite difficulté que je rencontre sur ce fichier :

J'aimerais alimenter un Combobox avec la liste des analyses (donc l'ID de l'analyse en colonne "B" de la feuille "Analyse") qui ont le statut "En cours" (colonne "N" de la feuille "Analyse"). Je pensais pour plus de facilité extraire d'abord cette liste pour la répertorier en Colonne "A" de la feuille "Config", mais je galère quand même pour ça.

Aurais-tu une solution à me proposer ? Sinon je créer un nouveau post

Merci encore pour ton aide.

PS : ci-joint nouveau fichier complété.

2fof-plaque-v2.xlsm (17.53 Ko)

bonjour,

ajoute ce code dans le module de ton formulaire

Private Sub UserForm_Initialize()
    With Sheets("Analyse")
        dlplaque = .Range("D" & Rows.Count).End(xlUp).Row
        For i = 3 To dlplaque
            If .Cells(i, 14) = "En cours" Then
                ComboBox1.AddItem .Cells(i, 2).Value
            End If
        Next i
    End With
End Sub

Merci infiniment H₂SO₄, c'est parfait !

Excellente journée à toi et au forum

Rechercher des sujets similaires à "aide explication code qui fonctionne pas erreur"