XL 2010 plage nommée non définie à un instant t

vgendron

XLDnaute Barbatruc
Bonjour à toutes et tous

j'ai un souci sur un bout de code
pour situer le contexte: une macro complète supprime les MFC pour en remettre de nouvelles
les MFC sont appliquées sur certaines zones de la feuille seulement..
ces zones sont des plages nommées "Dynamiquement" (le mot est important car je pressens qu'il est la source du pb)


lorsque je lance la macro, elle s'arrete sur le Set ZoneSelection avec un message me disant:
"Erreur 1004 - Erreur définie par l'application ou l'objet"

SANS RIEN FAIRE: je clique juste sur le bouton Play pour continuer la macro
et la.. ca déroule impec jusqu'à la fin..
C'est comme si, entre le message et le play, les zones avaient été "redéfinies ou raffraichies"...
comment je peux voir si effectivement les zones sont "connues" lors de l'execution ?
j'ai essayé d'ajouter un wait histoire de laisser le temps à excel de raffraichir les formules qui définissent mes zones.. mais.. pas mieux.
le code:
VB:
With ActiveSheet
            .Cells.FormatConditions.Delete
                       Set ZoneSelection = .Range("Tab_Synthèse" & "," & "Test_Status" & "," & "Status_Review" & "," & "Test_Case_Review" & "," & "Project_Status")
        End With

blablabla...
ZoneSelection.FormatConditions.Delete
.....
 

Nairolf

XLDnaute Accro
Salut vgendron,

Dans ton code il y a une chose qui me choque, c'est le "." qui se trouve ici : Set ZoneSelection = .Range("Tab_Synthèse"

Je pense que le problème vient de là, il faut le supprimer car les plages nommées ne sont normalement pas liées à une worksheet mais à un workbook.
 

fanch55

XLDnaute Barbatruc
Salut le fil,
Une plage nommée peut être définie au niveau Classeur ou niveau Feuille .
On peut avoir le même nom pour un classeur et pour une feuille : c'est celui de la feuille active qui sera prioritaire s'il existe ...

Dans le code qui est cité, on ne sait pas trop quelle est la portée des noms .
Le code ci-dessous pourrait éventuellement vous être utile :
(dév rapide à améliorer car le nom de feuille n'est pas contrôlé)
VB:
Sub Test()
For Each Nom In Array("Zone3", "Zone2", "Zone1", "Feuil1!Zone1", "Feuil1!Zone3")
    MsgBox Nom & vbLf & Is_Exist(Nom)
Next
End Sub

Function Is_Exist(Nom As Variant) As Boolean

    If InStr("!", Nom) Then
    ' Recherche du nom dans une feuille précise
        Feuille = Split(Nom, "!")
        For Each Elem In Sheets(Feuille).Names
            If UCase(Elem.Name) = UCase(Feuille & "!" & Nom) Then
                Is_Exist = True
                Exit For
            End If
        Next
    Else
    ' Recherche du nom dans la feuille active
        For Each Elem In ActiveSheet.Names
            If UCase(Elem.Name) = UCase(ActiveSheet.Name & "!" & Nom) Then
                Is_Exist = True
                Exit For
            End If
        Next
    ' Recherche du nom dans le classeur
       If Not Is_Exist Then
           For Each Elem In ThisWorkbook.Names
               If UCase(Elem.Name) = UCase(Nom) Then
                   Is_Exist = True
                   Exit For
               End If
           Next
       End If
    End If
End Function
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

VB:
Sub Juste_Pour_Infos()
Dim ZoneSelection  As Range
Dim ZoneSelectionA  As Range
[A1:C1].Name = "Test_Status"
[B12:D15].Name = "Tab_Synthèse"
Set ZoneSelection = Range("Test_Status" & "," & "Tab_Synthèse")
MsgBox ZoneSelection.Address
Set ZoneSelectionA = Union([Test_Status], [Tab_Synthèse])
MsgBox ZoneSelectionA.Address
End Sub
NB: vgendron
Je ne prends pas le temps d'évoquer le blahblah... joindre un fichier exemple (vu que cela fait un bail que tu es membre d'XLD ;))
 

Nairolf

XLDnaute Accro
Salut tout le monde,

fanch55, je suis d'accord avec toi, comme les deux sont possibles, il faut faire le contrôle de la portée du nom avant de le traiter.
A noter que je ne l'avais pas indiqué car j'utilise toujours des noms uniquement sur les classeurs, je n'ai jamais compris l'intérêt de l'associer qu'à une feuille (il y en a sans doute un, mais là je ne vois pas).
 

vgendron

XLDnaute Barbatruc
Hello

Bonne nouvelle...ou pas...
toutes mes zones nommées ont bien la portée Classeur.. donc.. le "point" est inutile, mais ne gene pas non plus.. à la limite.. il serait presque "sécuritaire" au cas ou une zone nommée apparait sur deux feuilles différentes...

@Staple1600 pour le fichier, mea culpa. d'autant que je suis le premier à raler quand il n' y en a pas..

Cela dit: dans ta proposition, j'ai vu le "UNION".. et j'ai fait un test...
la ligne initiale:
VB:
Set ZoneSelection = .Range("Tab_Synthèse" & "," & "Test_Status" & "," & "Status_Review" & "," & "Test_Case_Review" & "," & "Project_Status")
me génère le pb
alors que celle -ci que je considère comme strictement équivalent à la syntaxe près
VB:
Set ZoneSelection = Union(.Range("Tab_Synthèse"), .Range("Test_Status"), .Range("Status_Review"), .Range("Test_Case_Review"), .Range("Project_Status"))
ne génère plus le pb...

donc, c'est une bonne nouvelle parce que je n'ai plus le pb.. ou pas.. parce que je ne sais pas vraiment pourquoi.. et le "ca tombe en marche" ne me plait jamais...

la méthode "Union" doit avoir un processus de calcul différent de la syntaxe initialement utilisée...
 

Statistiques des forums

Discussions
315 103
Messages
2 116 246
Membres
112 695
dernier inscrit
ben44115