ZeMoskito
Messages postés13Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 3 avril 2006
-
31 mars 2006 à 17:30
ZeMoskito
Messages postés13Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 3 avril 2006
-
3 avril 2006 à 10:40
Bonjour à tous :)
Voici mon problème (mon sujet était déjà pas mal explicite je pense ;)
J'ai deux fichiers Excel avec beaucoup de VB/VBA derrière. Dans un cas les macros se déroulent sans accrocs (désolés ;)), dans le deuxième cas j'ai droit à la fameuse erreur d'exécution 380 ("Impossible de définir la propriété .text", "Valeur de propriété non valide").
Donc mon problème ne se trouve pas vraiment dans cette erreur car j'ai réussi à la "corriger", mais dans le fait qu'il y'ait un comportement disctinct pour deux macros identiques... et j'aimerais bien savoir pourquoi afin que celà ne puisse pas se reproduire !
Voici le code en question:
Private Sub UserForm_Activate()
'lecture de la periode
m_sPeriode = GetPeriod()
With ComboBoxMonth
'Sélection de la période en cours
If HasValue(m_sPeriode) Then
.text = m_sPeriode <== c'est ici que l'erreur était levée
Else
.ListIndex = 0
End If
End With
End Sub
'*******************************************************************
'Initialisation de la fenetre
'*******************************************************************
Private Sub UserForm_Initialize()
Dim dDate As Date
Dim sYear As String
Dim i As Integer
Dim iFin As Integer
Dim sItem As String
On Error Resume Next
sYear = Format(Date, "yyyy")
iFin = CInt(Format(Date, "mm"))
'Remplissage avec un glissement sur une année
With ComboBoxMonth
For i = iFin To 1 Step -1
sItem = NumberToMonth(i) & " " & sYear
.AddItem (sItem)
Next
For i = 12 To (iFin + 1) Step -1
sItem = NumberToMonth(i) & " " & CStr(CInt(sYear) - 1)
.AddItem (sItem)
Next
End With
End Sub
En fait le problème semble venir du fait qu'il faille remplir la combo et initialiser la propriété text dans la même fonction (en l'occurence j'ai mis tout ces traitement dans l'activate et ça passe sans problème dans les deux cas). OR, si c'est vraiment le problème (classique pour les list et combo) pourquoi est-ce que celà fonctionne dans un cas et pas dans l'autre !??
Je teste évidemment les deux sur ma machine donc hardware et software sont identiques dans les deux cas... voyez vous une anomalie quelconque qui pourrait expliquer ce type de comportement ??
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 mars 2006 à 17:42
Salut
Jamais rencontré cette erreur.
Quand l'erreur survient, que vaut m_sPeriode ?
Existe t-il dans la liste une donnée qui vale cette valeur ?
Un .Text est un texte alors que m_sPeriode semble être numérique --> Essaye avec CStr(m_sPeriode)
Personnellement, j'évite d'utiliser .Text d'un Combo.
Eventuellement, ajoute un DoEvents après le GetPeriod(), ça laissera le temps à la Combo de se rafraichir et de renseigner son .Text
Fait plutôt une boucle du style :
For r = 0 To Combo.ListCount -1
If CStr(m_sPeriode) = Combo.List(r) Then
Combo.ListIndex = r
Exit For
End If
Next r
' Cas où la boucle n'a rien trouvé : r vaut maxi de r +1, donc Combo.ListCountIf r Combo.ListCount Then Combo.ListIndex -1
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
ZeMoskito
Messages postés13Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 3 avril 2006 3 avril 2006 à 10:40
Ca roule :) merci beaucoup, avec l'utilisation des listIndex c'est passé comme sur des roulettes. Dommage que les messages de VB ne soit pas plus explicite ou qu'il n'interdise pas ces fonctionnalités, car si un coup ca marche et un coup ca marche pas c'est un peu galère...
Mais merci beaucoup, ton éclairage m'a apporté la lumière ;)
ZeMoskito
Messages postés13Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 3 avril 2006 3 avril 2006 à 09:59
Merci pour ta réponse !
la variable m_sPeriode est une chaine et lors de l'affectation elle est non nulle "DECEMBRE 2004" par exemple. Il y'a peut-être un problème avec une valeur identique, et ça expliquerait donc pourquoi le problème n'est pas présent dans les deux cas... je vais vérifier ça tout de suite ;)
Merci beaucoup pour ta participation, car c'est la qu'on voit que certains problème pourtant "simpl" nous échappe complètement à force d'avoir le nez dans le code !!
Bon je vais voir ça et je te confirme si c'est ça ;)
PS: merci aussi pour ta boucle, je vais voir ce que je vais en faire :D
ZeMoskito
Messages postés13Date d'inscriptionvendredi 30 mai 2003StatutMembreDernière intervention 3 avril 2006 3 avril 2006 à 10:01
Quoi que non... maintenant que j'y pense j'y avais pensé déjà ^_^, et même avec une valeur en dur "toto" non présente dans la combo ca avait planté pareil... mais je vais quand même revoir mon affectation et la remplacer par ta boucle !