Obligation d'activer la feuille pour utiliser une plage nommée en VBA?

Bonjour,

Je m'interroge sur la nécessité ou non d'activer une feuille de calcul pour utiliser en vba une plage de cette feuille.

Exemple:

"zzzz" correspond à une plage nommée de la feuille ("xxxx")

Faut-il écrire:Sheets("xxxx").Activate

set maplage = range ("zzzzz") et aprés on utilise la plage for each cell in maplage.... par exemple

ou peut-on faire directement

set maplage = range("zzzz") et utiliser la plage sans activer la feuille.

Dans ce cas apparemment je génére une erreur d'exécution 9 l'indice n'appartient pas à la plage, j'ai aussi ce message lorsque je fais set maplage = sheets("xxxx").range("zzzz")

Sur de nombreux post, on déconseille d'utiliser activate ou select.

Avez vous un conseil à me donner?

Merci d'avance

Bonjour,

Quelque chose dans ce genre:

Sub essai()
    Dim f1 As Worksheet
    Dim Plage As Range
    Set f1 = Sheets("Feuil1")
    Set Plage = f1.Range("A1:A100")
    For Each cell In Plage
        'boucle
    Next cell

    'Libération de la mémoire
    Set Plage = Nothing
    Set f1 = Nothing
End Sub

Cdlt

bonjour, il faut savoir comment votre plage est défini !

Normallement c'est indiqué "Classeur" ici et la référence est juste à côté. Pour ces plages, il ne faut pas activer ou sélectionner la feuille, mais certaines plages nommées dépendent d'une feuille, par exemple les plages d'impression. Pour celles-là, Vous avez besoin de la feuille.

image

Bonjour,

Merci à vous. Mes plages sont bien définies sur classeur. Le problème survient généralement quand j'enchaine deux macros identiques (voulez vous saisir un autre...). Je pense donc que c'est plus parce que je n'ai pas remis une variable à 0 comme dit Arturo. Je relis tout mon code dans la journée et je vous tiens au courant.

re, voir macro "test" dans la PJ.

PS. Concernant la déclaration des variables, j'ai une opinion dissidente ...

Sub test()
     Sheets("blad2").Select     'pour se positionner dans une autre feuille que "MaPLage") !!!!!

     MsgBox ThisWorkbook.Names("MaPlage").RefersTo     'l'addresse de votre plage

     For Each nm In ThisWorkbook.Names     'pour toutes ces plages avec point d'interet pour les plages d'impression !!!
          s = s & vbLf & nm.Name & "    " & nm.RefersTo
     Next
     MsgBox s, vbInformation, "Mes plages nommées"

     For Each c In Range("MaPlage").Cells     'boucles les cellules d'une autre feuille
          If c.Value = "A" Then MsgBox "cellule " & c.Address, , "Cellule contenu = ""A"""
     Next

End Sub

Bonsoir à tous et encore merci pour vos réponses.

Apparemment, c'est bien un problème de variable non vidée. J'ai retesté tout avec Sheets("xxxx").Activate avant de définir la plage et sans activer la feuille.

Cà fonctionne sans activer la feuille si je remets la variable range à nothing avant de la redéfinir.

Je pensais que donner une nouvelle valeur à une variable la modifier mais manifestement çà ne fonctionne pas toujours.

Donc, par rapport à ma question initiale, il ne semble pas nécessaire d'activer une feuille pour utiliser une plage de cette feuille en vba.

Encore merci

re, il ne faut pas remettre la plage à nothing avant de rédefinir voir PJ macro test2

Sub Test2()
     For Each xx In Array("AA", "BB", "CC")     'nom de 3 plages nommées
          Set c = Range(xx) 'rédefinir plage sans remettre variable à zéro
          MsgBox "Feuille active : " & ActiveSheet.Name & vbLf & "plage nom " & xx & vbLf & "Feuille : " & c.Parent.Name & vbLf & "Address : " & c.Address & vbLf & "valeur cellule 1 : " & c.Cells(1, 1).Value
     Next
End Sub

Merci Bart

En quelques simples lignes, il y a plein de choses dans ton code.

Je précise que je suis retraité et que je me suis mis à vba depuis peu pour m'entretenir l'esprit. Je vais réessayer sans vider les variables avant et voir ou çà peut planter ailleurs.

Je note que effectivement, pas besoin d'activer la feuille pour utiliser les noms présents sur cette feuille. Je note aussi sur mes tablettes l'emploi de RefersTo et Parent.Name que je ne connaissais pas merci à toi

Je reprends donc encore une fois mon code pour voir et je mets ma réponse sur le site.

Bonsoir,

J'ai tout repris sans vider les variables comme l'indiquait Bart. Je n'ai pas reproduit l'anomalie que j'avais. j'avais un formulaire en mode Hide que j'ai fermé. Peut-être est ce lui qui provoquait l'anomalie.

En tout cas, par rapport à la question initiale, on n'est pas obligé d'activer une feuille pour pouvoir utiliser une plage nommée de cette feuille.

Merci Bart, merci Arturo

Rechercher des sujets similaires à "obligation activer feuille utiliser plage nommee vba"