VBA et Excel 365 sur Mac

Bonjour,

Comme indiqué dans le nom du sujet, j'ai un problème avec VBA sur mon Excel.
Je bosse sur un Imac 2017 (Ventura) et j'ai installé Excel depuis mon compte Office 365 Pro.

Ca marche paaaaas

Bon, j'y connais pas grand chose en VBA, ça n'aide pas.

J'arrive à faire apparaître une valeur en cliquant sur un bouton. Donc le basique fonctionne.

Mais je voudrais que, quand je clique sur le bouton en question, cela active une fonction "Filtre" avec pas mal de critères.
Mais ça ne fonctionne pas.

Est-ce ma formule filtre qui n'est pas bonne? Elle fonctionne en direct quand je la mets dans une cellule, mais elle n'est peut-être pas adaptée au VBA?

=SIERREUR(
FILTRE(Liste[#Tout];
(SI('Recherche-MAJ'!E10="";VRAI;Liste[[#Tout];[Banque]]='Recherche-MAJ'!E10))*
(SI('Recherche-MAJ'!E12="";VRAI;Liste[[#Tout];[Nom]]='Recherche-MAJ'!E12))*
(SI('Recherche-MAJ'!E14="";VRAI;Liste[[#Tout];[Prénom]]='Recherche-MAJ'!E14))*
(SI('Recherche-MAJ'!E16="";VRAI;Liste[[#Tout];[Poste]]='Recherche-MAJ'!E16))*
(SI('Recherche-MAJ'!E18="";VRAI;Liste[[#Tout];[Service]]='Recherche-MAJ'!E18))*
(SI('Recherche-MAJ'!E20="";VRAI;Liste[[#Tout];[Téléphone]]='Recherche-MAJ'!E20))*
(SI('Recherche-MAJ'!E22="";VRAI;Liste[[#Tout];[Portable]]='Recherche-MAJ'!E22))*
(SI('Recherche-MAJ'!E24="";VRAI;Liste[[#Tout];[Mail]]='Recherche-MAJ'!E24))*
(SI('Recherche-MAJ'!E26="";VRAI;Liste[[#Tout];[Adresse]]='Recherche-MAJ'!E26))*
(SI('Recherche-MAJ'!E28="";VRAI;GAUCHE(Liste[[#Tout];[Code Postal]];2)=GAUCHE('Recherche-MAJ'!E28;2)))*
(SI('Recherche-MAJ'!E30="";VRAI;Liste[[#Tout];[Ville]]='Recherche-MAJ'!E30))*
(SI('Recherche-MAJ'!E32="";VRAI;Liste[[#Tout];[Date]]='Recherche-MAJ'!E32))*
(SI('Recherche-MAJ'!I10="";VRAI;Liste[[#Tout];[Région]]='Recherche-MAJ'!I10))*
(SI('Recherche-MAJ'!I12="";VRAI;Liste[[#Tout];[Département]]='Recherche-MAJ'!I12))*
(SI('Recherche-MAJ'!J14;Liste[[#Tout];[Particuliers]]="X";VRAI));
Liste[#Tout]);"")

J'ai codé ça sur VBA:

Sub ActiverFiltre()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Recherche-MAJ")

    ' Définir la cellule où la formule sera insérée
    Dim formuleCell As Range
    Set formuleCell = ws.Range("A1") ' Changez "A1" à la cellule souhaitée

    ' La formule à insérer
    Dim formule As String
    formule = "=SIERREUR(FILTRE(Liste[#Tout];" & _
              "(SI('Recherche-MAJ'!E10="""";VRAI;Liste[[#Tout];[Banque]]='Recherche-MAJ'!E10))*" & _
              "(SI('Recherche-MAJ'!E12="""";VRAI;Liste[[#Tout];[Nom]]='Recherche-MAJ'!E12))*" & _
              "(SI('Recherche-MAJ'!E14="""";VRAI;Liste[[#Tout];[Prénom]]='Recherche-MAJ'!E14))*" & _
              "(SI('Recherche-MAJ'!E16="""";VRAI;Liste[[#Tout];[Poste]]='Recherche-MAJ'!E16))*" & _
              "(SI('Recherche-MAJ'!E18="""";VRAI;Liste[[#Tout];[Service]]='Recherche-MAJ'!E18))*" & _
              "(SI('Recherche-MAJ'!E20="""";VRAI;Liste[[#Tout];[Téléphone]]='Recherche-MAJ'!E20))*" & _
              "(SI('Recherche-MAJ'!E22="""";VRAI;Liste[[#Tout];[Portable]]='Recherche-MAJ'!E22))*" & _
              "(SI('Recherche-MAJ'!E24="""";VRAI;Liste[[#Tout];[Mail]]='Recherche-MAJ'!E24))*" & _
              "(SI('Recherche-MAJ'!E26="""";VRAI;Liste[[#Tout];[Adresse]]='Recherche-MAJ'!E26))*" & _
              "(SI('Recherche-MAJ'!E28="""";VRAI;GAUCHE(Liste[[#Tout];[Code Postal]];2)=GAUCHE('Recherche-MAJ'!E28;2)))*" & _
              "(SI('Recherche-MAJ'!E30="""";VRAI;Liste[[#Tout];[Ville]]='Recherche-MAJ'!E30))*" & _
              "(SI('Recherche-MAJ'!E32="""";VRAI;Liste[[#Tout];[Date]]='Recherche-MAJ'!E32))*" & _
              "(SI('Recherche-MAJ'!I10="""";VRAI;Liste[[#Tout];[Région]]='Recherche-MAJ'!I10))*" & _
              "(SI('Recherche-MAJ'!I12="""";VRAI;Liste[[#Tout];[Département]]='Recherche-MAJ'!I12))*" & _
              "(SI('Recherche-MAJ'!J14;Liste[[#Tout];[Particuliers]]=""X"";VRAI));" & _
              "Liste[#Tout]);"""")"

    ' Insérer la formule dans la cellule définie
    formuleCell.Formula = formule
End Sub

Et ça me donne une erreur 1004 la méthode formula de l'objet range a échoué.

J'ai demandé de l'aide à Copilot, mais toutes ses tentatives de corrections ont échoué.

Est-ce que le code est bon?

Est-ce que c'est ma version qui bug ou je n'ai pas configuré mon Excel et mon mac correctement?

Merci de vos réponses!

Bonjour,

La propriété Range.Formula, propriété (Excel) | Microsoft Learn prend comme argument… la formule en anglais !

Utilisez plutot Propriété Range.FormulaLocal (Excel) | Microsoft Learn.

Ou alors, traduisez votre formule en anglais, et peut etre remplacez les ";" en ",". Mais si votre pc/xl est en français, formulalocal devrait fonctionner.

Après sur MacOS je ne crois que VBA est moins bien fourni, donc si ça ne fonctionne pas, à voir avec les utilisateurs MacOS.

formuleCell.FormulaLocal = formule

Merci de votre rapide retour.

Oui, c'était une suggestion de Copilot (Il/elle n'est pas mauvais(e))

La cellule affiche ma formule avec plein de @
=@SIERREUR(FILTRE(Liste[#Tout];(SI('Recherche-MAJ'!E10="";VRAI;Liste[@Banque]...

Ah, donc vous aviez déjà la solution.

Pour vos arobases, c'est normal. Il s'agit d'une nouveauté O365 pour "remplacer/MAJ" les formules matricielles. Je vous renvoie sur le site officiel Opérateur d'intersection implicite : @ - Support Microsoft

Puisque vous utilisez la Fonction FILTRE - Support Microsoft qui renvoie une plage de données, et non pas nécessairement 1 seule cellule, c'est tout à fait normal.

Merci.
Comme les suggestions de Copilot ne donnent rien, j'ai préféré revenir au code initial.
Je n'avais pas compris cette subtilité de Formula.

Pour les @, vous dites que c'est normal.
Pour autant, le code utilisé avec formulalocal affiche donc ma formule avec des @, mais n'exécuteras pas ma formule, comme je le souhaiterai.

J'ai lu votre lien, mais n'ai pas très bien compris ce que cela changeait pour mon code et ma formule.

La question est aussi de savoir si mon Excel et/ou mon Mac sont bien configurés et si le bug ne vient pas de là

Rechercher des sujets similaires à "vba 365 mac"