bonjour,pour mettre à jours différents classeurs éparpillés un peu partout...
je voudrais pouvoir modifier les plages nommées d'un classeur via une macro
Pour cela j'ai une liste (noms en colonne A et formules en colonne 2), mais je n'arrive pas à réécrire les plages nommées via une macro .
j'essaye ce code mais ..ca ne marche pas
Code:
Sub NommerChampsDynamique()
For Each c In Range("A1:A30")
If Not IsEmpty(c.Offset(1, 0)) Then
ActiveWorkbook.Names.Add Name:=c, RefersToR1C1Local:=c.Offset(0, 1)
End If
Next
End Sub
Mes plages nommées ressemblent à ca :
Nom de la plage : ASY_ligne_ampli
formule : =DECALER($A$1;EQUIV($O$23;$AI:$AI;0)-1;EQUIV("TMY0";$1:$1;0)+4;1;Info!$E$9)
le problème c'est que j'en ai plus de 300 des plages définies. toute sles définir à la main va etre très tès fastidieux surtout que les formules vont être remise à jours en fonctions des mises à jour.
désolé de te répondre si tard...
L'idéal serait de poster ton fichier pour pouvoir comparer les définitions des plages nommées, on pourra peut-être te proposer un code vba pour que ces plages soient définies automatiquement au démarrage du fichier.
bonsoir
, ci dessous l'adresse d'un classeur vierge avec juste la liste des noms définis y en a pas mal , tous différents presque et cela change souvent.
le top serait d'avoir cette liste sur un fichier txt et de pouvoir "charger" la liste au démarrage du classeur.
si tu peux m'orienter sur une solution pour réécrire cela
C'est vrai que excel ne réagit pas comme on l'attend sur Names.Add
Après de multiples essais je te livre où j'en suis en attendant mieux.
Je n'ai pas réussi à mettre la formule dans un nom sans qu'elle soit évaluée auparavant. Et je n'ai réussi à l'évaluer que hors macro :-s
Pour évaluer les formules:
- sélectionner B:B
- remplacer = par =
(fais par petites plages car sur certaines formules excel veut sauvegarder les infos (?). Peut-être que ça ne le fera pas sur le classeur complet)
Pour que les formules restent lisibles tu peux te définir un nom 'formule' après avoir sélectionné C1:
formule =LIRE.CELLULE(6; Feuil1!B1)
et remplir C avec =formule
et la macro:
Code:
Sub test()
For Each c In Range("A1", [A65536].End(xlUp))
ActiveWorkbook.Names.Add Name:=c.Value, RefersTo:=c.Offset(0, 1).Formula
Next c
End Sub