Problème au passage de PC à Mac

Bonjour,

On m'a transmis un fichier Excel avec des macros écrites sous EXCEL 2010 pour PC. En essayant de le faire fonctionner sous Excel MAC 2016 j'ai le message d'erreur suivant venant de Visual Basic "Erreur 424: objet requis"

Je pense que certaines fonctions n'ont pas la même syntaxe sur PC et MAC et je n'ai pas trouvé de solution en cherchant sur les posts déjà existants.

Avez vous une idée de ce qui cloche?

Je précise que je ne connais pas le VBA et que je galère.

Un grand merci à celui qui pourra m'aider!

Voici le code complet

Option Explicit

Public Const COL_CLASSE_Param1 = 4, COL_CLASSE_Param2 = 6, COL_CLASSE_Param3 = 8, COL_CLASSE_Param4 = 10, COL_CLASSE_Param5 = 12

Sub Departement_QuandClic()
'macro appelée lors d'un clic sur un département
    [clNumDepartement] = Right(Application.Caller, 2)
      'recupere le nom de la forme cliquée et extrait ses deux
      'derniers caratères correspondant au numero du département
End Sub

Sub ColorierCarte(PlageClasses As Range, PlageLegendes As Range)
'colorie chaque departement de la carte de France en fonction du critere specifie
'ENTREE PlageClasses : indique les valeurs des classes de chaque departement (95 cellules)
'       PlageLegende : indique la legende (pour la couleur de fond de chaque cellule)
'                      (contient autant de cellules que de valeurs de classe)
    Dim numDep As Integer, numClasse As Integer, couleurClasse As Long
    Dim selectionInitiale As Range

   '1.memorise la position de la cellule initialement sélectionnée
    Set selectionInitiale = ActiveCell
   '2.colorie chaque département
    For numDep = 1 To PlageClasses.Rows.Count
        numClasse = PlageClasses.Cells(numDep, 1)
        couleurClasse = PlageLegendes.Cells(numClasse).Interior.Color
        ActiveSheet.Shapes("Departement " & Format(numDep, "00")).Select
        Selection.ShapeRange.Fill.ForeColor.RGB = couleurClasse
    Next numDep
   '3.restaure la position de la cellule ou plage initialement sélectionnée
    selectionInitiale.Select
   '4.recopie les couleurs des classes de légende
    CopierCouleurFond PlageLegendes, [LegendeCarte]
End Sub

Sub ZoneChoixCarte_QuandChangement()
'procédure exécutée à chaque sélection dans la liste "Nb client / Nb Espèces"
    Dim numColonne As Integer, legende As Range
    'ActiveCell.Select 'pour deselectionner le ScrollBar
    Select Case [clChoixCarte]
        Case 1: numColonne = COL_CLASSE_Param1: Set legende = [Legende_Param1]
        Case 2: numColonne = COL_CLASSE_Param2: Set legende = [Legende_Param2]
        Case 3: numColonne = COL_CLASSE_Param3: Set legende = [Legende_Param3]
        Case 4: numColonne = COL_CLASSE_Param4: Set legende = [Legende_Param4]
        Case 5: numColonne = COL_CLASSE_Param5: Set legende = [Legende_Param5]
    End Select
    ColorierCarte [PlageDepartements].Columns(numColonne), legende

End Sub

Sub CopierCouleurFond(PlageSource As Range, PlageCible As Range)
'recopie les couleurs de fond des cellules de la plage-source vers la plage-cible
'(utilisé pour les couleurs de légendes)
    Dim c As Integer
    For c = 1 To PlageSource.Cells.Count
        PlageCible.Cells(c).Interior.ColorIndex = PlageSource.Cells(c).Interior.ColorIndex
    Next c
End Sub

Bonjour,

Si tu ne dis pas sur quelle ligne... !

J'ai déjà vu un cas où le Mac ne digérait pas la notation compacte des plages nommées.

(Nom de la plage entre crochets)

Ça passait avec : ThisWorkbook.Names("Nom de la plage").RefersToRange

Cordialement.

Merci pour cette réponse éclair.

La ligne qui plantait était la ligne

Case 3: numColonne = COL_CLASSE_Param3: Set legende = [Legende_Param3]

quand j'appelais celle ci depuis le tableur par exemple.

En gros ça bloque au niveau des Case 1 2 3 4 ou 5 en fonction de celui que j'appelle.

ça doit venir de la définition de numColonne ou Legende_Param non?

Tu remplaces [Legende_Param3] par l'expression que j'ai indiquée, et tu vois ce que ça donne.

Merci ça à l'air d'avancer un peu plus loin au moins.

Maintenant je me retrouve avec un autre message d'erreur "Erreur d'exécution "13" / Incompatibilité de type 13".

Je cherche un peu et je te tiens au courant.

Merci pour l'aide en tous cas


La ligne qui plante est celle ci visiblement

[clNumDepartement] = Right(Application.Caller, 2)

ça progresse!

En cherchant à remplacer [clNumDepartement] par ThisWorkbook.Names("clNumDepartement").RefersToRange sur le même modèle que ce que tu m'avais conseillé je pensais que ça finirait par aller mais j'ai toujours le même message d'erreur.

"Erreur d'exécution "13" / Incompatibilité de type 13"

Peut être que la différence viendrait du fait que clNumDepartement est une seule cellule tandis que Legende_Param1 est une colonne de plusieurs cellules.

As tu une idée de ce qui cloche?

Option Explicit

Public Const COL_CLASSE_Param1 = 4, COL_CLASSE_Param2 = 6, COL_CLASSE_Param3 = 8, COL_CLASSE_Param4 = 10, COL_CLASSE_Param5 = 12

Sub Departement_QuandClic()
'macro appelée lors d'un clic sur un département
    [clNumDepartement] = Right(Application.Caller, 2)
      'recupere le nom de la forme cliquée et extrait ses deux
      'derniers caratères correspondant au numero du département
End Sub

Sub ColorierCarte(PlageClasses As Range, PlageLegendes As Range)
'colorie chaque departement de la carte de France en fonction du critere specifie
'ENTREE PlageClasses : indique les valeurs des classes de chaque departement (95 cellules)
'       PlageLegende : indique la legende (pour la couleur de fond de chaque cellule)
'                      (contient autant de cellules que de valeurs de classe)
    Dim numDep As Integer, numClasse As Integer, couleurClasse As Long
    Dim selectionInitiale As Range

   '1.memorise la position de la cellule initialement sélectionnée
    Set selectionInitiale = ActiveCell
   '2.colorie chaque département
    For numDep = 1 To PlageClasses.Rows.Count
        numClasse = PlageClasses.Cells(numDep, 1)
        couleurClasse = PlageLegendes.Cells(numClasse).Interior.Color
        ActiveSheet.Shapes("Departement " & Format(numDep, "00")).Select
        Selection.ShapeRange.Fill.ForeColor.RGB = couleurClasse
    Next numDep
   '3.restaure la position de la cellule ou plage initialement sélectionnée
    selectionInitiale.Select
   '4.recopie les couleurs des classes de légende
    CopierCouleurFond PlageLegendes, [LegendeCarte]
End Sub

Sub ZoneChoixCarte_QuandChangement()
'procédure exécutée à chaque sélection dans la liste "Nb client / Nb Espèces"
    Dim numColonne As Integer, legende As Range
    'ActiveCell.Select 'pour deselectionner le ScrollBar
    Select Case [clChoixCarte]
        Case 1: numColonne = COL_CLASSE_Param1: Set legende = ThisWorkbook.Names("Legende_Param1").RefersToRange
        Case 2: numColonne = COL_CLASSE_Param2: Set legende = ThisWorkbook.Names("Legende_Param2").RefersToRange
        Case 3: numColonne = COL_CLASSE_Param3: Set legende = ThisWorkbook.Names("Legende_Param3").RefersToRange
        Case 4: numColonne = COL_CLASSE_Param4: Set legende = ThisWorkbook.Names("Legende_Param4").RefersToRange
        Case 5: numColonne = COL_CLASSE_Param5: Set legende = ThisWorkbook.Names("Legende_Param5").RefersToRange
    End Select
    ColorierCarte [PlageDepartements].Columns(numColonne), legende

End Sub

Sub CopierCouleurFond(PlageSource As Range, PlageCible As Range)
'recopie les couleurs de fond des cellules de la plage-source vers la plage-cible
'(utilisé pour les couleurs de légendes)
    Dim c As Integer
    For c = 1 To PlageSource.Cells.Count
        PlageCible.Cells(c).Interior.ColorIndex = PlageSource.Cells(c).Interior.ColorIndex
    Next c
End Sub

Merci

Là il s'agit d'une erreur de type de données... Vérifie le nom de la forme (il apparaît dans la zone Nom à gauche de la barre de formule quand tu le sélectionnes [clic droit car clic gauche lance macro]).

Cordialement.

Rechercher des sujets similaires à "probleme passage mac"