XL 2013 lister toutes les cellules dont la formule contient au moins une plage nommée

Jouxte

XLDnaute Occasionnel
Bonjour à toutes et tous,

Dans un classeur aux multiples onglets et aux plages nommées qui se sont multipliées au fil du temps, je souhaite faire du ménage dans ces plages nommées.
A cette fin je souhaite lister toutes les cellules dont la formule contient au moins une plage nommée.

Merci par avance pour votre aide et bonnes fêtes de fin d'année..
 

Dudu2

XLDnaute Barbatruc
Ah bizarre !
Reprends le code encore une fois dans les post car j'ai du mal à accoucher d'un code qui fonctionne.
En voulant faire la malin avec mes initialisations de tableaux. Je suis revenu aux bases :).
J'ai ajouté .Value à l'instruction que tu signales en erreur.
 

Dudu2

XLDnaute Barbatruc
Décidément, ce truc refuse de fonctionner.
J'ai essayé chez mois avec plus de 1000 formules, ça ne génère pas d'erreur.
Prends le code de @Staple1600, on en finira avec cette affaire.

Sinon essaie quand même de remplacer la dernière instruction par
VB:
formules = Application.Transpose(formules)
MsgBox UBound(formules, 1) & " formules listées"
[A1].Resize(UBound(formules, 1), UBound(formules, 2)).Value = formules

Ou encore de faire une déclaration explicitement Variant de formules()
Code:
Dim formules() As Variant
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
=>jouxte
Alors, on va faire dans l'empirique ;)
VB:
Sub Lister_Formules_II()
Dim ws As Worksheet, j&, formules(), rng1 As Range, rng2 As Range
j = 1
ReDim Preserve formules(1 To 50000, 1 To 3)
'si erreur remplacer 50000 par une valeur supérieure
For Each ws In ActiveWorkbook.Sheets
Set rng1 = Nothing
    On Error Resume Next
    Set rng1 = ws.Cells.SpecialCells(xlCellTypeFormulas)
    On Error GoTo 0
    If Not rng1 Is Nothing Then
        For Each rng2 In rng1
        formules(j, 1) = rng1.Parent.Name
        formules(j, 2) = rng2.Address(0, 0)
        formules(j, 3) = "'" & CStr(rng2.FormulaLocal)
         j = j + 1
        Next rng2
    End If
Next ws
Sheets.Add
[A1:C1] = Array("Nom feuille", "Adresse", "Formule")
[A2].Resize(UBound(formules, 1), UBound(formules, 2)) = formules
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
292 869
Messages
1 926 875
Membres
183 296
dernier inscrit
Yaz113