L
LaurentTBT
Guest
Bonjour à tous.
J'ai un souci avec l'événement LostFocus d'une combobox placée directement sur une feuille de calcul excel.
D'abord, pourquoi cet événement? Il s'agit d'une combobox de la barre d'outils visual Basic. Placée sur un Usf, cette même combo aurait pour événement équivalent "Exit". Alors pourquoi ici ce terme de "LostFocus"?
Ensuite, voici ma procédure complète. Il s'agit simplement d'enregistrer après demande à l'utilisateur la valeur saisie dans la combo s'il s'agit d'une valeur non comprise dans la liste, de manière à la proposer dans la liste lors du prochain appel:
Private Sub CbxNick_Lostfocus()
If CbxNick.ListIndex = -1 And CbxNick <> "" Then
If MsgBox("Voulez-vous enregistrer ce pseudonyme?", vbYesNo + vbQuestion, "Nouveau Pseudo") = vbYes Then
Application.ScreenUpdating = False
Application.EnableEvents = False
ThisWorkbook.Worksheets("Données").Activate
With ThisWorkbook.Worksheets("Données").Range("N65536").End(xlUp).Cells(2, 1)
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Cells(1, 1) = CbxNick
End With
ThisWorkbook.Worksheets("Message").Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End If
End Sub
En déroulant cette macro pas à pas, tout fonctionne parfaitement, et c'est à l'instruction "End Sub" que se produit un plantage complet d'excel.
Voyez-vous dans ce code quelque chose de pas très catholique?
A noter que j'ai une procédure événementielle "LostFocus" sur une textbox qui fonctionne parfaitement.
J'ai un moyen d'y remédier: je mets le contenu de la procédure dans MonBouton_Click qui lance la suite. Néanmoins, je préférerais faire cet enregistrement des nouvelles données saisies juste après cette saisie elle-même, ça me semble plus logique. En plus, je me retrouve avec éventuellement 3 MsgBox au début de ma macro liée au bouton, ce qui n'est pas super pour l'utilisateur, je trouve. Donc si quelqu'un trouve la raison de mon plantage, l'ergonomie de mon appli sera meilleure.
Question subsidiaire: dans le corps de ma macro, je suis obligé d'activer la feuille où je vais saisir la donnée, car sinon, la propriété LineStyle ne passe pas. Pourtant, j'ai le même type de procédure dans une autre procédure, la saisie s'effectuant cette fois là dans un USF. Et il me semble bien que l'activation de la feuille "données" n'y est pas nécessaire.
Bref, je suis en train de perdre mon latin avec cette histoire de combobox placée directement sur une feuille.
Merci d'avoir eu la patience de me lire jusqu'au bout!
@ +
J'ai un souci avec l'événement LostFocus d'une combobox placée directement sur une feuille de calcul excel.
D'abord, pourquoi cet événement? Il s'agit d'une combobox de la barre d'outils visual Basic. Placée sur un Usf, cette même combo aurait pour événement équivalent "Exit". Alors pourquoi ici ce terme de "LostFocus"?
Ensuite, voici ma procédure complète. Il s'agit simplement d'enregistrer après demande à l'utilisateur la valeur saisie dans la combo s'il s'agit d'une valeur non comprise dans la liste, de manière à la proposer dans la liste lors du prochain appel:
Private Sub CbxNick_Lostfocus()
If CbxNick.ListIndex = -1 And CbxNick <> "" Then
If MsgBox("Voulez-vous enregistrer ce pseudonyme?", vbYesNo + vbQuestion, "Nouveau Pseudo") = vbYes Then
Application.ScreenUpdating = False
Application.EnableEvents = False
ThisWorkbook.Worksheets("Données").Activate
With ThisWorkbook.Worksheets("Données").Range("N65536").End(xlUp).Cells(2, 1)
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Cells(1, 1) = CbxNick
End With
ThisWorkbook.Worksheets("Message").Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End If
End Sub
En déroulant cette macro pas à pas, tout fonctionne parfaitement, et c'est à l'instruction "End Sub" que se produit un plantage complet d'excel.
Voyez-vous dans ce code quelque chose de pas très catholique?
A noter que j'ai une procédure événementielle "LostFocus" sur une textbox qui fonctionne parfaitement.
J'ai un moyen d'y remédier: je mets le contenu de la procédure dans MonBouton_Click qui lance la suite. Néanmoins, je préférerais faire cet enregistrement des nouvelles données saisies juste après cette saisie elle-même, ça me semble plus logique. En plus, je me retrouve avec éventuellement 3 MsgBox au début de ma macro liée au bouton, ce qui n'est pas super pour l'utilisateur, je trouve. Donc si quelqu'un trouve la raison de mon plantage, l'ergonomie de mon appli sera meilleure.
Question subsidiaire: dans le corps de ma macro, je suis obligé d'activer la feuille où je vais saisir la donnée, car sinon, la propriété LineStyle ne passe pas. Pourtant, j'ai le même type de procédure dans une autre procédure, la saisie s'effectuant cette fois là dans un USF. Et il me semble bien que l'activation de la feuille "données" n'y est pas nécessaire.
Bref, je suis en train de perdre mon latin avec cette histoire de combobox placée directement sur une feuille.
Merci d'avoir eu la patience de me lire jusqu'au bout!
@ +