Bonjour,
Place la macro ci-dessous dans un module Standard, puis tu la lances. Elle teste les 4 méthodes que je vois pour renvoyer l'objet
Les 2 premières, déjà vues, mais il est bon d'avoir confirmation. La 3e consistant à renvoyer l'objet à partir du nom dans le classeur échoue chez moi, la méthode exigeant une référence réelle à une plage et ne la reconnait pas sous forme de formule, elle devrait donc aussi échouer chez toi, mais sait-on jamais... Par contre la 4e, utilisant Evaluate, renvoie bien la plage à partir de la formule correspondant au nom. Si, comme j'ai cru le comprendre, MAC rechigne avec Evaluate, elle devrait donc aussi échouer chez toi, mais il faut le tester pour confirmer.
Si tu as 4 erreurs, je ne vois pas d'autre issue que d'abandonner la définition dynamique de plages au moyen de formules, dont on peut alors penser que MAC ne l'accepte pas... Cela ne simplifiera pas l'écriture mais pas de raison qu'on ne puisse y arriver...
Il y a peut-être une solution plus simple mais avec MAC je suis dans le brouillard...
Cordialement.
Sub Tests()
On Error Resume Next
MsgBox [BaseFilt].Address & vbLf & "Cliquez sur 'OK'..."
If Err.Number <> 0 Then
MsgBox "La notation '[Plage]' génère l'erreur " & Err.Number
Err.Clear
Else
MsgBox "Pas d'erreur sur la notation '[Plage]'"
End If
MsgBox Range("BaseFilt").Address & vbLf & "Cliquez sur 'OK'..."
If Err.Number <> 0 Then
MsgBox "La notation 'Range(""Plage"")' génère l'erreur " & Err.Number
Err.Clear
Else
MsgBox "Pas d'erreur sur la notation 'Range(""Plage"")'"
End If
MsgBox ThisWorkbook.Names("BaseFilt").RefersToRange.Address & vbLf & "Cliquez sur 'OK'..."
If Err.Number <> 0 Then
MsgBox "Le renvoi d'une plage par son nom dans le classeur génère l'erreur " & Err.Number
Err.Clear
Else
MsgBox "Pas d'erreur en renvoyant une plage par son nom dans le classeur"
End If
MsgBox Evaluate(ThisWorkbook.Names("BaseFilt").RefersTo).Address & vbLf & "Cliquez sur 'OK'..."
If Err.Number <> 0 Then
MsgBox "L'utilisation de la méthode 'Evaluate' pour renvoyer la plage génère l'erreur " & Err.Number
Err.Clear
Else
MsgBox "Pas d'erreur en utilisant 'Evaluate' pour renvoyer la plage"
End If
End Sub