Evénement "LostFocus" d'une combobox qui fait planter ExcelXP (2002)

  • Initiateur de la discussion LaurentTBT
  • Date de début
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!
@ +

 
M

michel

Guest
bonjour Laurent

je n'arrive pas à reproduire le plantage de l'evenement "Lostfocus" avec Excel2002
peux tu tester le classeur joint et éventuellement me préciser si je dois remodifier le classeur pour faire d'autres tests ( je n'ai peut etre pas bien compris ton soucis )

et je n'ai pas rencontré de probleme particulier pour utiliser LineStyle sans activer la feuille données



bonne soiree
michel
 

Pièces jointes

  • Classeur1.zip
    14.6 KB · Affichages: 22
  • Classeur1.zip
    14.6 KB · Affichages: 24
  • Classeur1.zip
    14.6 KB · Affichages: 20
L

LaurentTBT

Guest
Merci de t'être penché sur mon problème, Michel

Ton fichier passe très bien, aucun plantage, et c'est exactement ce que je veux faire.

Bon, dans sa version initiale, ma macro était:

Private Sub CbxNick_Lostfocus()
If CbxNick.ListIndex = -1 And CbxNick <> "" Then
If MsgBox("Voulez-vous enregistrer ce pseudonyme?", vbYesNo + vbQuestion, "Nouveau Pseudo") = vbYes Then
ThisWorkbook.Worksheets("Données").Range("N65536").End(xlUp).Cells(2, 1) = CbxNick
With ThisWorkbook.Worksheets("Données").Range("N65536").End(xlUp)
.Borders(xlLeft).LineStyle = xlContinuous
.Borders(xlRight).LineStyle = xlContinuous
.Borders(xlBottom).LineStyle = xlContinuous
End With
End If
End If
End Sub

Et à la ligne:
.Borders(xlLeft).LineStyle = xlContinuous, j'ai l'erreur 1004:
"Impossible de définir la propriété LineStyle de la classe Border".

Si à ce moment j'active la feuille données, ça passe.

Et je viens de le refaire, à "End Sub", j'ai toujours le plantage total d'excel (avec demande d'envoi de rapport d'erreur...). Je précise que c'est aussi le cas pour Brigitte qui a mon appli.


Donc, c'est lié au reste du programme, mais je ne vois pas où. J'ai essayé de remplacer les CbxNick par Me.CbxNick pour être sûr qu'il n'y ai pas de conflit avec d'autres, mais idem.

Bref, incompréhensible!

Bon, je reste sur ma roue de secours pour l'instant.

Merci quand même.
 

Discussions similaires

Réponses
8
Affichages
642

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander