RowSource ne fonctionne pas sur mon mac

Résolu
Asythom Messages postés 9 Date d'inscription mardi 8 avril 2014 Statut Membre Dernière intervention 11 novembre 2014 - 7 mai 2014 à 18:29
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 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 :

cmbCatCharge.RowSource = ("Listes!CategoriesCharges")

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.

Merci d'avance !!

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 14
Modifié par pijaku le 9/05/2014 à 08:00
Bonjour,

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
4
Asythom Messages postés 9 Date d'inscription mardi 8 avril 2014 Statut Membre Dernière intervention 11 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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 14
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
0
Asythom Messages postés 9 Date d'inscription mardi 8 avril 2014 Statut Membre Dernière intervention 11 novembre 2014
12 mai 2014 à 16:14
Super !
Merci encore une fois !!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 14
12 mai 2014 à 18:26
Et bien...
De rien une fois encore.
A+
0