Asythom
Messages postés9Date d'inscriptionmardi 8 avril 2014StatutMembreDernière intervention11 novembre 2014
-
7 mai 2014 à 18:29
pijaku
Messages postés12263Date d'inscriptionjeudi 15 mai 2008StatutModérateurDernière intervention15 mars 2023
-
12 mai 2014 à 18:26
Bonjour,
Voici le contexte :
J'ai créé, dans une feuille nommée "Factures", un UserForm dans lequel j'ai intégré une ListBox nommée "cmbCatCharge". Dans une autre feuille, nommée "Listes", j'ai enregistré les données devant figurer dans la ListBox dans une plage de cellules nommée "CategoriesCharges".
Pour remplir ma ListBox "cmbCatCharge", j'ai utilisé le code suivant :
Tout fonctionne parfaitement sur mon pc et je suis très content!
Voici mon problème :
lorsque je travaille sur un mac et que je lance mon UserForm, un message d'erreur apparait, qui me dit :
Erreur d'exécution "380":
Impossible de définir la propriété RowSource. Valeur de propriété non valide.
J'ai essayé différentes choses : enlever le Liste!, enlever les (), etc. mais rien n'y fait.
Est-ce que quelqu'un peut m'aider pour résoudre le bug car j'ai vraiment besoin de pouvoir travailler sur un mac.
En effet, la propriété RowSource des listbox (idem pour les combobox) n'est pas gérée sous Mac.
Pour assurer cette compatibilité et la portabilité indifféremment sur Mac et Windows, tu peux utiliser une affectation différente des sources de ta liste.
Un exemple :
Private Sub UserForm_Initialize()
With Sheets("Listes")
Dim Lig As Integer
For Lig=1 to 50
cmbCatCharge.Additem Cells(Lig,1)
Next
End With
End Sub
Ou encore, si ton range CategoriesCharges est un nom définit dans le gestionnaire de noms :
Private Sub UserForm_Initialize()
listCatCharge.Clear
Dim Cel As Range
For Each Cel In Range("CategoriesCharges")
listCatCharge.AddItem Cel.Value
Next
End Sub
Cette deuxième méthode est un peu plus "gourmande" en mémoire (ça reste infime... 1 Objet Range au lieu d'1 Integer...), mais possède l'avantage suivant :
En cas d'ajout de valeur dans ta feuille, tu n'as plus à revenir changer ton code. Il te suffit de changer la plage de cellules affectée au nom CategoriesCharges....
Le second avantage est de ne pas devoir référencer le nom de ta feuille dans le code... En effet, par la définition même de ton nom, Range("CategoriesCharges") "pointe" forcément sur la feuille indiquée dans le gestionnaire des noms...
Un autre détail me chagrine, mais c'est plus sémantique qu'autre chose. Tu nommes ta listboc cmbCatCharge. Le préfixe cmb me fait davantage penser à une combobox qu'à une listbox. Je te conseille, si ton contrôle est bien une listbox, de le nommer : listCatCharge...
Cordialement,
Franck
Asythom
Messages postés9Date d'inscriptionmardi 8 avril 2014StatutMembreDernière intervention11 novembre 2014 12 mai 2014 à 11:07
Bonjour,
Un grand merci pour ta réponse, très claire et efficace !
Pour info, j'ai choisi la seconde solution qui autorise une gestion plus "dynamique" de mon fichier.
Quant à ta dernière remarque : j'ai bien conscience d'avoir commis une hérésie pour les puristes ;). En fait, j'ai démarré mon formulaire avec une combobox pour la transformer ensuite en listbox. Ayant déjà écrit pas mal de code, je n'ai pas changé le nom par flemme de devoir tout reprendre. On ne m'y reprendra pas !!
Encore merci en tout cas.
Thomas
pijaku
Messages postés12263Date d'inscriptionjeudi 15 mai 2008StatutModérateurDernière intervention15 mars 202314 12 mai 2014 à 11:14
Bonjour,
Pas de souci.
Je rebondit de suite là dessus :
En fait, j'ai démarré mon formulaire avec une combobox pour la transformer ensuite en listbox. Ayant déjà écrit pas mal de code, je n'ai pas changé le nom par flemme de devoir tout reprendre.
Je comprends tout à fait. Mais...
Continuons dans la rubrique "Trucs et Astuces"... Sous VBE, tu as la possibilité, (tout comme sous Excel), de : Rechercher/Remplacer...
Très efficace pour ton cas, et idéale pour les fainéants (tous les développeurs sont fainéants...).
Pour cela, sous VBE :
Edition/Remplacer
Rechercher : cmbCatCharge
Remplacer par : LbCatCharge
Dans : cocher "Projet en cours"
5 secondes pour un code "propre"...
Franck
Asythom
Messages postés9Date d'inscriptionmardi 8 avril 2014StatutMembreDernière intervention11 novembre 2014 12 mai 2014 à 16:14
Super !
Merci encore une fois !!
pijaku
Messages postés12263Date d'inscriptionjeudi 15 mai 2008StatutModérateurDernière intervention15 mars 202314 12 mai 2014 à 18:26
12 mai 2014 à 11:07
Un grand merci pour ta réponse, très claire et efficace !
Pour info, j'ai choisi la seconde solution qui autorise une gestion plus "dynamique" de mon fichier.
Quant à ta dernière remarque : j'ai bien conscience d'avoir commis une hérésie pour les puristes ;). En fait, j'ai démarré mon formulaire avec une combobox pour la transformer ensuite en listbox. Ayant déjà écrit pas mal de code, je n'ai pas changé le nom par flemme de devoir tout reprendre. On ne m'y reprendra pas !!
Encore merci en tout cas.
Thomas
12 mai 2014 à 11:14
Pas de souci.
Je rebondit de suite là dessus :
Je comprends tout à fait. Mais...
Continuons dans la rubrique "Trucs et Astuces"...
Sous VBE, tu as la possibilité, (tout comme sous Excel), de : Rechercher/Remplacer...
Très efficace pour ton cas, et idéale pour les fainéants (tous les développeurs sont fainéants...).
Pour cela, sous VBE :
Edition/Remplacer
Rechercher : cmbCatCharge
Remplacer par : LbCatCharge
Dans : cocher "Projet en cours"
5 secondes pour un code "propre"...
Franck
12 mai 2014 à 16:14
Merci encore une fois !!
12 mai 2014 à 18:26
De rien une fois encore.
A+