VBA/checkbox list compatible mac & pc

Bonjour à tous,

Je cherche une macro qui fasse en sorte que mon userform/checkbox list créer sur PC ne génère pas une erreur lors de l'ouverture du fichier dans un environnement MAC (l'erreur est la suivante: "Compile error: Method or data member not found".

Voici mon code d'origine:

Option Explicit

Dim chaine As String
Dim i As Long
Dim splitChaine
Dim miseAJour As Boolean

Private Sub LevelCustomizationListBox_Change()

If miseAJour Then
Exit Sub
End If

'Alimentation de la cellule selon les cases à cocher

chaine = ""
For i = 0 To Me.LevelCustomizationListBox.ListCount - 1
If Me.LevelCustomizationListBox.Selected(i) Then
chaine = chaine & Me.LevelCustomizationListBox.List(i) & " - "
End If
Next

'suppression du dernier caractère "-" en trop
If VBA.Len(chaine) >= 3 Then
chaine = VBA.Left(chaine, VBA.Len(chaine) - 3)
End If

'affectation à la cellule
ActiveCell = chaine

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim wks_Lists As Worksheet

Set wks_Lists = ThisWorkbook.Sheets("LISTS")

'Si Colonne Q - Level Of Customization
If ActiveCell.Column = 19 Then
With Me.LevelCustomizationListBox
.MultiSelect = fmMultiSelectMulti 'multiselection
.ListStyle = fmListStyleOption 'case à cocher
.Height = 200
.Width = 200
.Top = ActiveCell.Top 'situé au même niveau que la cellule active
.Left = ActiveCell.Offset(0, 1).Left
' .List = wks_Lists.Range("A13:A19")
.Visible = True
End With

'Selection des cases à cocher selon le contenu de la cellule Q
splitChaine = VBA.Split(ActiveCell, " - ")
If UBound(splitChaine) >= 0 Then
For i = 0 To Me.LevelCustomizationListBox.ListCount - 1
If Not IsError(Application.Match(Me.LevelCustomizationListBox.List(i), splitChaine, 0)) Then
miseAJour = True
Me.LevelCustomizationListBox.Selected(i) = True
miseAJour = False
Else
miseAJour = True
Me.LevelCustomizationListBox.Selected(i) = False
miseAJour = False
End If
Next
Else
For i = 0 To Me.LevelCustomizationListBox.ListCount - 1
miseAJour = True
Me.LevelCustomizationListBox.Selected(i) = False
miseAJour = False
Next
End If

Else
Me.LevelCustomizationListBox.Visible = False
End If

End Sub

Merci beaucoup pour votre aide sur le sujet.

Bon dimanche,

Léonie

Bonjour,

je n'ai pas de Mac donc mon aide sera limitée ne pouvant tester.
Le pb c'est que les Mac ne connaissent pas les objets ActiveX, ce sont des objets windows.
Sur Mac tu n'as droit qu'aux contrôles Formulaire ce qui limite pas mal.
En résumé : tu es mal barrée...

L'autre point important est le séparateur de path qui est / au lieu de \
Tu peux adapter en te servant de Application.Path.Separator

A lire ton code, il ne connait pas non plus Split ! (ni Replace, Round ?, Find)
Une page intéressante d'un site disparu mais qu'on trouve en archive : https://web.archive.org/web/20151001112448/http:/www.excelabo.net/excel/mac_pc2
eric

Merci Éric.

Démasquée je ne suis pas experte VBA

OK. Donc gros souci (autre que mon écriture de code) surtout que tous les fichiers MAC ou PC doivent ensuite être consolidés dans un seul....

Merci en tout cas encore une fois pour cette réponse précise et rapide.

Autre chose.
Il faut éviter d'utiliser ActiveCell, tu n'es jamais sûre de ce que fait l'utilisateur.
Il faut le limiter aux cas voulus.

Dans les événements comme SelectionChange(ByVal Target As Range), il faut utiliser Target qui est le range d'appel.
Et une sélection peut faire plusieurs cellules ce que tu ne contrôles pas. Et l'active peut être n'importe laquelle, pas forcément la 1ère
eric

Hello,

J'ai contourné le problème je pense. J'ai créé une liste déroulante avec validation de données à sélection multiple. Du coup, je n'ai plus de userform avec case à cocher et j'ai un code VBA qui devrait fonctionner dans les 2 environnements PC & MAC. Je vais tester cette semaine sur un MAC.

Pour d'autres qui auraient le même problème que moi, voici le code à saisir dans la feuille correspondante:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
' To Select Multiple Items from a Drop Down List in Excel
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Column = 21 Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
GoTo Exitsub
Else: If Target.Value = "" Then GoTo Exitsub Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
If InStr(1, Oldvalue, Newvalue) = 0 Then
Target.Value = Oldvalue & ", " & Newvalue
Else:
Target.Value = Oldvalue
End If
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

Merci encore & très bonne journée.

Bonjour,

utilise l'outil </> quand tu mets un code pour conserver l'indentation. Là c'est illisible.

Tu as oublié de remettre la gestion d'erreur. Le On Error d'ailleurs devrait se trouver juste avant la ligne générant l'erreur (.SpecialCells)
Tu dois mettre un On Error goto 0 après ton If et les autres cas de sortie possibles.

Evite de mélanger If sur plusieurs lignes avec les ":" et If sur une ligne

If ... Then
   GoTo Exitsub
Else: If Target.Value = "" Then GoTo Exitsub Else
            Application.EnableEvents = False

qui peut lire ça sans difficulté ni erreur d'interprétation ?
Au passage tu as aussi ElseIf
eric

Bonjour,

Du coup, je n'ai plus de userform avec case à cocher et j'ai un code VBA qui devrait fonctionner dans les 2 environnements PC & MAC. Je vais tester cette semaine sur un MAC.

Je m'insère juste dans ce fil pour une question essentielle sachant que depuis excel 2016 MAC les userform n'existent plus. A moins que votre userform soit en fait votre feuille et non pas un objet spécifique ?

Quelle est votre version excel MAC ?

Cordialement

Merci Eric pour toutes ces précisions, encore une fois je ne suis pas du toute experte en excel VBA. J'essaie juste de m'en servir pour développer des outils de pilotage performants. J'essaie de monter en compétences aussi parce que ça ouvre un champs des possibles mais j'avoue que je suis un peu lente J'ai un métier de créatif à la base

Bonjour Dan,

Je ne travaille pas sur MAC mais sur PC. J'ai développé un userform/checkbox list pour avoir un choix multiple avec des cases à cocher sur mon PC. Lorsque ma cliente, équipée en MAC, essaie d'ouvrir mon fichier qui fonctionne parfaitement avec ma macro sur mon PC, elle obtient immédiatement un message d'erreur. Impossible également d'ouvrir la checkbox enregistrée sur la cellule concernée.

Grâce aux conseils d'Eric hier soir, j'ai trouvé une solution qui fonctionne aussi bien sur PC (même si le code n'est pas "propre" ), et j'attends de me rendre chez ma cliente pour la tester avec elle sur son MAC. Je pourrais vous dire alors quelle est la version d'excel utilisée (d'après moi la plus récente).

L'avantage de cette solution de repli, c'est qu'il n'y a plus de checkbox list et pas de path/. qui d'après l'article partagé par Eric peuvent être à la source du problème.

Je vous tiens au courant.

Merci en tout cas de vos réponses. Franchement, je fais trop d'excel en ce moment, avoir une aide extérieure, ça soulage réellement quand on n'est pas expert! Merci de partager.

Bonne fin de journée.

J'ai développé un userform/checkbox list pour avoir un choix multiple avec des cases à cocher sur mon PC. Lorsque ma cliente, équipée en MAC, essaie d'ouvrir mon fichier qui fonctionne parfaitement avec ma macro sur mon PC, elle obtient immédiatement un message d'erreur. Impossible également d'ouvrir la checkbox enregistrée sur la cellule concernée.

Si vos checkbox sont placées sur une feuille, c'est à coup sûr que c'est le souci des activex qui ne sont pas prises en charge par le MAC. Le mieux est de ne pas mettre des objets dans les cellules et on sait faire sans ces objets.

Le mieux serait de voir le fichier en question pour vraiement donner un conseil

Crdlt

En fait elle a enlevé tous les ActiveX Dan
eric

Merci beaucoup Éric & Dan pour vos interventions.

J'ai enfin pu essayer mon code VBA pour l'utilisation d'une liste déroulante à choix multiples sur un MAC... et ça fonctionne très bien. 😁

Je passe ce sujet en résolu & vous dis à très bientôt pour de nouveaux topics.

Bonne soirée.

Rechercher des sujets similaires à "vba checkbox list compatible mac"