IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Compatibilité fichier VBA venu de windows [XL-MAC 2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 10
    Par défaut Compatibilité fichier VBA venu de windows
    Bonjour à tous,

    Dans le cadre d'un cours théorique que je donnes, je fourni aux étudiants un fichier excel utilisant du script VBA pour générer des exercices de conversion binaire<->décimale :

    Nom : xls.png
Affichages : 548
Taille : 148,5 Ko

    Donc l'étudiant clique sur le bouton 'Générer', qui appel un script VBA générant aléatoirement un nombre et sa solution dans deux cellules différentes.
    L'étudiant entre ensuite sa réponse dans la case et cette dernière passe en vert si c'est bon (mise en forme conditionnelle basée sur la cellule où se trouve la réponse fournie par le VBA).

    Sous Windows, en xls 2016, tout fonctionne parfaitement.
    Cependant un de mes étudiants ayant un MAC ne parvient pas à cliquer sur les boutons. A l'ouverture, il accepte les macros, mais ensuite il a un message lui indiquant que le fichier n'est pas totalement pris en charge et il ne peut que l'ouvrir en lecture seule.

    N'ayant jamais utilisé excel sous MAC, sauriez-vous me dire d'où pourrait venir cette incompatibilité ?
    Le code VBA, le fait d'utiliser des boutons, autres choses ?

    En vous remerciant pour vos lumières

  2. #2
    Membre habitué
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 10
    Par défaut
    Si cela peut aider, voici les codes qui se trouvent tous dans 'Feuil1', le classeur ne contenant qu'une seule feuille.

    le code d'un des boutons (ils sont tous calqués sur la même optique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    'Génération de l'exercice <Binaire -> Décimal> pour notation binaire non-signée
    Private Sub Bns_BinDec_Click()
        ActiveSheet.Unprotect   'Désactivation de la protection de la feuille
        Randomize               'Activation de la fonction aléatoire
     
        'Variables
        Dim ColEx, RowEx, ColSol, RowSol, ColRep, RowRep, Ajout0 As Integer
     
        'Définition de la cellule contenant l'exercice
        ColEx = 3
        RowEx = 5
        'Définition de la cellule contenant la solution
        ColSol = 4
        RowSol = 6
        'Définition de la cellule pour écrire la réponse
        ColRep = 3
        RowRep = 6
     
        'Génération de la solution (nb décimal)
        Cells(RowSol, ColSol) = Int(Rnd * 255) + 1
     
        'Génération de l'exercice (nb binaire)
        Cells(RowEx, ColEx) = DecimalToBase(Cells(RowSol, ColSol), 2)   'Conversion en binaire
        Ajout0 = 8 - Len(Cells(RowEx, ColEx))                           'Calcul du nombre de 0 à ajouter pour avoir 1 octet
        For j = 1 To Ajout0                                             'Ajout des 0 à gauche pour former 1 octet
            Cells(RowEx, ColEx) = "0" & Cells(RowEx, ColEx)
        Next j
     
        Cells(RowRep, ColRep) = ""      'Suppression de l'ancienne réponse
        Cells(RowRep, ColRep).Select    'Sélection de la cellule pour écrire la réponse
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   'Activation de la protection
     
    End Sub
    Et le code pour les conversions entre les bases (qui ne vient pas de moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Public Function DecimalToBase(ByVal nNumber As Long, ByVal DstBase As Long) As String
     
        Do While (nNumber >= DstBase)
            DecimalToBase = NumberToSymbol((nNumber Mod DstBase), DstBase) & DecimalToBase
            If DstBase >= 36 Then DecimalToBase = "." & DecimalToBase
            nNumber = nNumber \ DstBase
        Loop
        DecimalToBase = NumberToSymbol(nNumber, DstBase) & DecimalToBase
     
    End Function
     
    Public Function NumberToSymbol(ByVal nNumber As Long, ByVal DestBase As Long) As String
     
        If ((nNumber >= 10) And (nNumber < 36) And DestBase < 36) Then
            NumberToSymbol = Chr(Asc("A") + (nNumber - 10))
        Else
            NumberToSymbol = nNumber
        End If
     
    End Function
     
    Public Function BaseToDecimal(ByVal sNumber As String, ByVal SrcBase As Long) As Long
     
        Dim i As Integer
        Dim v() As String
     
        If SrcBase < 36 Then
            For i = 0 To Len(sNumber) - 1
                BaseToDecimal = BaseToDecimal + SymbolToNumber(Mid(sNumber, Len(sNumber) - i, 1)) * (SrcBase ^ i)
            Next
        Else
            v() = Split(sNumber, ".")
            For i = 0 To UBound(v)
                BaseToDecimal = BaseToDecimal + SymbolToNumber(v(UBound(v) - i)) * (SrcBase ^ i)
            Next
        End If
     
    End Function
     
    Public Function SymbolToNumber(ByVal sSymbol As String) As Long
     
        If Len(sSymbol) = 1 And Asc(UCase(sSymbol)) >= Asc("A") And Asc(UCase(sSymbol)) <= Asc("Z") Then
            SymbolToNumber = (Asc(UCase(sSymbol)) - Asc("A")) + 10
        Else
            SymbolToNumber = CLng(sSymbol)
        End If
     
    End Function
     
    Public Function BaseToBase(ByVal vNumber As Variant, ByVal SrcBase As Long, ByVal DstBase As Long) As Variant
     
        Dim nDecTemp As Long
     
        If (SrcBase <> 10) Then
            nDecTemp = BaseToDecimal(vNumber, SrcBase)
        Else
            nDecTemp = vNumber
        End If
     
        If (DstBase <> 10) Then
            BaseToBase = DecimalToBase(nDecTemp, DstBase)
        Else
            BaseToBase = nDecTemp
        End If
     
    End Function
    Encore merci

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    les ActiveX sont des objets windows, ils n'existent pas sur Mac.
    Tu n'as que les composants Formulaires de commun, ce qui réduit pas mal les possibilités.
    eric

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, étant moi aussi en Mac, je confirme l'absence D'ActiveX.
    Si vous voulez que les Mac puissent puissent aussi l'utiliser, enlevez toute références aux boutons ActiveX et trouvez un autre moyen d'appel compatible avec les deux systèmes ?
    Cordialement

  5. #5
    Membre habitué
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 10
    Par défaut
    Donc théoriquement, si je remplace tout mes boutons activeX par des Boutons de formulaire (en recopiant le code du bouton activeX dans le bouton formulaire), ça devrait fonctionner.

    Je vais tenter la chose et tester avec l'étudiant.

    Merci

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Il y'a aussi le useform que tu risques de changer …

    Tu peux programmer en vba pour une compatibilité PC/Mac en restant uniquement dans les objets Excel.
    Dès que tu dépasse cette limitation (ce qui est propre à Windows : activeX, DLL ,…) ça ne marchera pas sur Mac
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] VBA-Vérifier le nom d'un fichier dans l'exploreur windows
    Par Rémy.A dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 23/05/2018, 07h34
  2. Compatibilité Macros VBA sur Windows 32 bits et 64 bits
    Par marccelestins dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2016, 14h24
  3. Compatibilité du Runtime Access avec Windows
    Par cluis dans le forum Runtime
    Réponses: 2
    Dernier message: 09/01/2006, 16h52
  4. Réponses: 3
    Dernier message: 26/09/2005, 15h20
  5. Compatibilité IB 5.6 et Windows 2003 Server
    Par futneguet dans le forum InterBase
    Réponses: 3
    Dernier message: 19/05/2005, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo