RowSource ne fonctionne pas sur mon mac [Résolu]

Asythom 9 Messages postés mardi 8 avril 2014Date d'inscription 11 novembre 2014 Dernière intervention - 7 mai 2014 à 18:29 - Dernière réponse : pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention
- 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 !!
Afficher la suite 

5 réponses

Répondre au sujet
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - Modifié par pijaku le 9/05/2014 à 08:00
+3
Utile
4
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
Cette réponse vous a-t-elle aidé ?  
Asythom 9 Messages postés mardi 8 avril 2014Date d'inscription 11 novembre 2014 Dernière intervention - 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 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 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 9 Messages postés mardi 8 avril 2014Date d'inscription 11 novembre 2014 Dernière intervention - 12 mai 2014 à 16:14
Super !
Merci encore une fois !!
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 12 mai 2014 à 18:26
Et bien...
De rien une fois encore.
A+
Commenter la réponse de pijaku

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.