Frame dans un For Each
Bonjour,
Je suis tout nouveau ici, j'ai cherché le forum sans trouver ma réponse, alors je vous la pose ! Je suis un novice en VBA sur Excel et on m'a chargé de réaliser une évaluation avec des questions où l'on doit répondre par "Bonnes", "Partielles" et "Aucune" avec des OptionButtons. J'ai donc pour chaque question, sur ma feuille, un frame avec les 3 optionbuttons et mon code est le suivant :
Sub validerEval()
Dim i As Byte, Choix As String, Framei As MSForms.Controls, Ws As Worksheet
i = 1
For Each Ws In ThisWorkbook.Worksheets
For Each Framei In Ws
If TypeName(Framei) = "Frame" Then
For Each OptionButton In Framei.Controls
If OptionButton.Value Then
Choix = OptionButton.Caption
If Choix = "Bonnes" Then
Cells(9 + i, 15) = 3
ElseIf Choix = "Partielles" Then
Cells(9 + i, 15) = 2
ElseIf Choix = "Aucune" Then
Cells(9 + i, 15) = 1
Else
Cells(9 + i, 15) = ""
End If
End If
Next
End If
i = i + 1
Next
Next
End SubJ'aimerai récolter les réponses de chaque frame sur une plage de cellule pour pouvoir comptabiliser les points, mais il m'est impossible de trouver une solution pour mettre "frame" avec un "for each". L'erreur du code ci-dessus donne :
Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet
à la ligne
For Each Framei In WsJe suis vraiment dans l'impasse et j'espère que vous pourrez m'aider à résoudre ce problème.
Merci d'avance !
Bonjour,
Pour balayer les Frames
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.Frame Then
MsgBox Ctrl.Name
End If
Next CtrlA+
Merci pour la réponse, mais j'ai trouvé mon bonheur juste à l'instant !
Sub validerEval()
Dim i As Byte, Choix As String, Ws As Object, Ctrl As OLEObject
i = 1
Set Ws = ActiveSheet
For Each Ctrl In Ws.OLEObjects
If TypeOf Ctrl.Object Is MSForms.Frame Then
For Each OptionButton In Ctrl.Object.Controls
If OptionButton.Value Then
Choix = OptionButton.Caption
If Choix = "Bonnes" Then
Cells(9 + i, 15) = 3
ElseIf Choix = "Partielles" Then
Cells(9 + i, 15) = 2
ElseIf Choix = "Aucune" Then
Cells(9 + i, 15) = 1
Else
Cells(9 + i, 15) = ""
End If
End If
Next
End If
i = i + 1
Next
End Sub