Utilisation d'une plage nommée dans FormulaLocal

Bonjour à toutes et à tous,

Avant toute chose, bonne année à vous car il encore temps de la souhaiter

Je suis en train de devenir totalement chèvre sur un problème de syntaxe. Explication :

Je cherche à utiliser un INDEX + EQUIV imbriqué. Jusque là, tout va bien.

Mon soucis est de réussir à appliquer la fonction EQUIV sur une plage NOMMÉE !

Je détermine ma plage comme ceci :

    Dim plg_index As Range
    If anneeacreer = 2018 Then
        plg_index = Range("E5:E15")
        ElseIf anneeacreer = 2019 Then
            Set plg_index = Sheets("Notice").Range("F5:F15")
            ElseIf anneeacreer = 2020 Then
                plg_index = Range("G5:G15")
                ElseIf anneeacreer = 2021 Then
                    plg_index = Range("F5:F15")
    End If

La variable "anneeacreer" est déterminée plus haut dans ma macro, et fonctionne correctement.

J'ai fais le test avec Msgbox(plg_index.Address) : si "anneeacreer" est 2019, la plage retenue est bien "$F$5:$F$15".

Le problème survient ensuite... Comment faire pour utiliser le nom "plg_index" dans une formule ?

Ma formule récupère une date sur la feuille en cours de traitement et la recherche dans la feuille "Notice". Voilà ce que j'avais tenté d'écrire mais qui bien sûr ne fonctionne pas :

ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);plg_index.Address;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);plg_index.address;0);1);"""")"

J'ai tenté avec toutes les syntaxes qui me venaient en tête mais là vraiment je ne trouve pas la soluce !

J'en appelle donc à vos talents et vos connaissances !

Merci d'avance pour votre temps !

Bonjour,

Merci de joindre un fichier à ta demande.

Cdlt.

Bonjour Jean-Eric,

Vous trouverez mon fichier ci-dessous.

J'ai recréer un classeur simplifié car le fichier de base est gros et la macro assez longue.

Normalement, ce fichier simplifié devrait suffire à comprendre mon problème je pense ?

Dites-moi si ce n'est pas le cas.

Merci

EDIT :

Si cela peut vous aider, voilà comment je traite le problème pour l'instant :

    If anneeacreer = 2018 Then
        ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$E5:$E15;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$E5:$E15;0);1);"""")"
        ElseIf anneeacreer = 2019 Then
            ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$F5:$F15;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$F5:$F15;0);1);"""")"
            ElseIf anneeacreer = 2020 Then
                ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$G5:$G15;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$G5:$G15;0);1);"""")"
                ElseIf anneeacreer = 2021 Then
                    ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$E5:$E15;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);Notice!$H5:$H15;0);1);"""")"
    End If

Bonjour,

pourquoi vouloir remplacer le nom par sa référence avec plg_index.Address ?

Utiliser le nom plg_index tout seul.

D'ailleurs il n'y a aucun de défini dans ton classeur... alors ???

eric

PS : avec plg_index = Range("E5:E15") tu définis une variable range, pas un nom.

Et comme c'est un objet ça doit être Set plg_index = Range("E5:E15")

Le compilateur a dû t'insulter à ce sujet, il faut lire les messages

Et à moins d'être sûr à 120% de la feuille active il faut la spécifier dans la définition :

plg_index = Sheets("ma_feuille").Range("E5:E15")

PS2 : plutôt que x ElseIf selon l'année, décale ton range d'autant de colonne que annéeàcréer-2018 avec range(xx:yy).Offset(annéeàcréer-2018) partout où c'est nécessaire.

Ca ne te fera plus qu'une ligne pour cette partie sera valable dans 50 ans

Bonjour eriiic,

J'ai ajouté le .Address après avoir essayé sans.. et après que ça n'ait pas marché ahah

Mais du coup effectivement ça doit venir du fait qu'aucun nom n'est défini..

Cependant je ne comprends pas à quoi sert d'écrire

Set plg_index = Sheets("Notice").Range("F5:F15")

si cela ne défini pas un nom ?

Excusez-moi si ma question est idiote, je suis encore novice en VBA

EDIT :

Oui pardon, j'avais essayé juste sur 2019 et j'avais oublié de rajouter le Set de partout

Bonjour,

PS2 : plutôt que x ElseIf selon l'année, décale ton range d'autant de colonne que annéeàcréer-2018 avec range(xx:yy).Offset(annéeàcréer-2018) partout où c'est nécessaire.

Ca ne te fera plus qu'une ligne pour cette partie sera valable dans 50 ans

Effectivement, je viens d'adapter mon code, c'est beaucoup mieux à voir ahah

    Dim plg_index As Range
    Set plg_index = Sheets("Notice").Range("E5:E15").Offset(0, anneeacreer - 2019)

(J'ai utiliser anneeacreer - 2019 car j'ai supprimé 2018 de mon tableau, je travaille désormais de 2019 à 2022).

J'ai également réfléchi à ce que tu disais sur le fait qu'aucun nom n'était défini et suis donc passé par ceci :

Names.Add Name:="plg_index", RefersTo:="=Notice!" & plg_index.Address

ActiveCell.FormulaLocal = "=SI(NON(ESTERREUR(INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);plg_index;0);1)));INDEX(Notice!D5:H15;EQUIV(DATE(ANNEE(B4);MOIS(B4);1);plg_index;0);1);"""")"

J'ai l'impression que ça fonctionne, je continue de tester pour l'instant.. Pensez-vous que cette méthode est la bonne ?

Faut-il bien passer par le plg_index.Address ?

Rechercher des sujets similaires à "utilisation plage nommee formulalocal"