Excel : macros non compatibles sur Mac (aucun Active X)

LOOPS74

Membre enregistré
7 Août 2021
6
0
47
Bonjour,

Je me permets de solliciter votre aide car j'utilise 2 macros dans un fichier Excel.

La 1ère permet de grouper & dégrouper des lignes sur une feuille protégée et d'y ajouter des lignes

Bloc de code:
Private Sub Workbook_Open()
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 1 To WS_Count

With ActiveWorkbook.Worksheets(I)
    .EnableAutoFilter = True
    .EnableOutlining = True
    .Protect Contents:=True, Password:="A", UserInterfaceOnly:=True, AllowInsertingRows:=True
  End With
  Next I

End Sub


La 2nde permet de calculer un montant dans la colonne montant à partir des données saisies dans les colonnes quantité & prix unitaire sur les lignes d'article non colorées

Bloc de code:
 'Remplissage colonne H Amount
       If Not Intersect(Target, Range("E:G")) Is Nothing Then
            If Target.Interior.ColorIndex < 0 Then ' si le fond n'est pas color_
                 If Range("E" & L) <> "" And Range("G" & L) <> "" Then
                    Range("H" & L) = Range("E" & L) * Range("G" & L)
                 Else
                    Range("H" & L) = ""
                 End If
            End If
        End If
exitHandler:
  Application.EnableEvents = True
     End Sub

Cela fonctionne parfaitement sous PC. On peut grouper & dégrouper à volonté les lignes & le calcul du montant est automatisé.

En revanche, sous Mac, aucune des 2 ne fonctionne.

Je suis sur Office 365 donc dernières mises à jour Excel sur les 2.
Je travaille sur un Mac Pro 2019 Catalina 10.15.

Et j'ai besoin que le fichier soit compatible sur les 2 ordis car une grande majorité des utilisateurs travaillent sur Mac.

Une idée qui pourrait m'aider ?

Merci d'avance !

Note de la modération : évite le faire plusieurs messages pour la même chose, merci.
 
Dernière édition par un modérateur:
Non, vu que ce n'est pas possible, car ActiveX ne fonctionne que sous Windows, un vieux message... https://forums.macg.co/threads/vba-compatibilite-mac-pc.1212098/
Ça existe encore ActiveX ?

Même chez Microsoft ils ont fini par le bannir.

De toute façon, cela n’a jamais été compatible avec macOS.
Il n'y a pas d'ActiveX dans mes macros, c'est bien là mon souci.
Je ne vois pas ce qui l'empêche de fonctionner...
 
Dernière édition par un modérateur:
Il n'y a pas d'ActiveX dans mes macros, c'est bien là mon souci.
Je ne vois pas ce qui l'empêche de fonctionner...
Alors il ne fallait pas introduire sur l’ActiveX. ;)

Le spécialiste Microsoft Office du forum est @Aliboron mais tu n’es pas dans la bonne section.

Il pratique les deux plateformes. Le diable s’il ne trouve pas ce qui pose problème dans ton code.

Cela dit, il faudrait donner plus de détails sur les systèmes et surtout sur les version d’Office qui sont concernées, tant sur Windows que sur macOS. Le support des macros a beaucoup varié au fil des mises à niveau.
 
  • J’aime
Réactions: LOOPS74
Ah mince, désolée :oops: Je suis nouvelle et sur le forum & sur Mac.
Merci de ton aide moonwalker & @Aliboron ce serait super si tu avais une idée sur ce qui peut poser problème.
Je suis sur un Mac Book Pro Catalina 2019 & sur un PC avec un office 365 business donc avec les dernières mises à jour.
Merci à vous
 
Pour la première macro, il faudrait que tu précises ce qu'il faut entendre par "grouper & dégrouper des lignes". En tout cas, pour ce que j'en vois cette macro protège automatiquement le classeur à l'ouverture tout en autorisant l'insertion de lignes. Et c'est tout à fait opérationnel chez moi, aussi bien sous Mojave que sous Big Sur (je n'ai pas de machine sous Catalina, mais ça n'a certainement pas d'incidence dans le cas présent) avec Excel en version 16.51.

Pour la seconde, il s'agit manifestement d'une macro événementielle (donc attachée à une feuille en particulier). Mais elle est incomplète, il manque plusieurs lignes au début. En particulier celle qui donne le nom, ce qui renseignerait sur le type d'événement déclencheur ("Worksheet_Change" ?), ainsi que la définition de la variable L (qui doit être du genre "L = Target.Row")...
 
Dernière édition:
  • J’aime
Réactions: LOOPS74
Bonjour Aliboron,
Merci beaucoup pour ta réponse.

Pour la 1ère macro :
il s'agit de la fonction Excel grouper les lignes appartenant à une même catégorie pour masquer ces lignes et avoir une meilleure visibilité sur le tableau. Lorsque tu cliques sur le "+" les catégories correspondantes se développent et les lignes deviennent visibles.
En effet cette macro permet non seulement à la fonction grouper/dégrouper de fonctionner sur un classeur protégé mais également la fonction insertion de lignes.

Pour la 2nde macro :
En fait il y a 2 macros différentes sur cette feuille : une pour une validation de données à options multiples qui fonctionne très bien, et une pour le calcul automatisé du montant.

Voici le code de la feuille en entier :
Bloc de code:
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim oldVal As String
    Dim newVal As String
    Dim strSep As String
    Dim strType As Long
    Dim L%: L = Target.Row
  
    'add comma and space between items
    strSep = ", "

    If Target.Count > 1 Then GoTo exitHandler

        'checks validation type of target cell
        'type 3 is a drop down list
        On Error Resume Next
        strType = Target.Validation.Type

        If Target.Address = "$D$21" Then
      
            Application.EnableEvents = False
              
            newVal = Target.Value
            Application.Undo
            oldVal = Target.Value
            If oldVal = "" Or newVal = "" Then
              Target.Value = newVal
            Else
              Target.Value = oldVal & strSep & newVal
            End If
        End If
      
              'Remplissage colonne H Amount
       If Not Intersect(Target, Range("E:G")) Is Nothing Then
            If Target.Interior.ColorIndex < 0 Then ' si le fond n'est pas color_
                 If Range("E" & L) <> "" And Range("G" & L) <> "" Then
                    Range("H" & L) = Range("E" & L) * Range("G" & L)
                 Else
                    Range("H" & L) = ""
                 End If
            End If
        End If
      
      
exitHandler:
  Application.EnableEvents = True
     End Sub

Enfin, entre hier soir et aujourd'hui, le problème a empiré puisque maintenant je ne peux même plus ouvrir le fichier avec le VBA.
Voici le message d'erreur à l'ouverture :
Capture d’écran 2021-08-08 à 09.15.29.png
Lorsque je clique sur "non", il referme le fichier. Lorsque je clique sur "oui", il supprime le VBA.

Merci encore mille fois pour ton aide & Bon dimanche.
 
Dernière édition par un modérateur:
Ilm doit y avoir autre chose. Chez moi, en tout cas, ces deux macros fonctionnent et donnent (apparemment) les résultats attendus. Je peux cliquer sur les boutons + et - pour grouper et dégrouper des lignes dans un "plan" de la feuille Excel et insérer des lignes. La deuxième macro effectue bien son travail, le produit des colonnes E et G s'affiche bien dans la colonne H pour la ligne concernée.

Comment les choses se passent-elles chez toi ? Est-ce que tu as un message d'erreur ? Une interruption de la macro (et sur quelle ligne s'interrompt-elle) ?

Le souci rencontré avec le classeur correspond habituellement à une corruption du classeur. Qui peut survenir en particulier lorsque le classeur a été enregistré sous Windows. Si j'ai un moment je ferai quelques tests dans ce sens, mais ça peut aussi être plus classiquement une corruption engendrée par l'historique du classeur. S'il a fait l'objet de nombreuses modifications, correction, ajouts, etc. cela peut en être la cause. Essaye de transposer tes macros dans un classeur propre et neuf, pour voir ce que ça donne.
 
  • J’aime
Réactions: LOOPS74
Merci Aliboron pour cette réponse ultra rapide.
Le fichier initial a en effet déjà connu plusieurs versions avec updates & corrections sous Windows. Aucun problème sur Mac jusqu'à cette version. Et en effet il a bien été conçu dans un environnement Windows.

Je vais essayer d'en recréer un nouveau en copiant collant les onglets et les macros dans un fichier vierge sous Mac cette fois, voir si je peux me débarrasser de l'élément corrompu. Je te tiens au courant.

Chez moi, sur PC, aucun souci, tout fonctionne parfaitement. Sous Mac, je ne peux même pas accéder aux macros car après le message pop-up que je t'ai partagé, Excel Mac supprime toute la partie VBA qu'il considère comme illisible pour pouvoir ouvrir le fichier.

Encore une fois un grand merci pour tes éclaircissements et tes conseils !
Je fais quelques tests de mon côté et reviens vers toi.
 
Dernière édition par un modérateur:
Je vais essayer d'en recréer un nouveau en copiant collant les onglets et les macros dans un fichier vierge sous Mac cette fois, voir si je peux me débarrasser de l'élément corrompu.
Non ! Surtout pas : en recopiant les feuilles du classeur, tu recopies à coup (presque) sûr la corruption avec. Il faut partir d'un classeur vierge, recréer les feuilles de zéro (ou éventuellement en ouvrant le classeur dans LibreOffice puis en l'enregistrant sous un autre nom, mais toujours en .xlsm) et copier les macros en passant par TextEdit, par exemple, pour être sûr de ne copier ça qu'en texte brut.


après le message pop-up que je t'ai partagé, Excel Mac supprime toute la partie VBA qu'il considère comme illisible pour pouvoir ouvrir le fichier.
Oui, c'est le comportement habituel après ce type de message d'erreur. Je connais. ;)
 
  • J’aime
Réactions: LOOPS74
C'est compliqué tout ça! Heureusement que tu m'as aiguillée, sinon j'étais partie pour faire tout ce qu'il ne fallait surtout pas :oops:

Cela m'a pris beaaaaaaucoup de temps mais en recréant le fichier sur Mac cette fois et en copiant les macros cleanées.....tout fonctionne!!

Merci beaucoup les experts @Aliboron & @Moonwalker :merci: pour votre temps & pour votre aide.
Je vous dirai bien "à bientôt" mais je n'espère plus jamais avoir de macros sur Mac!! Hi hi...

Bonne soirée.