Excel: Sélection de "Names"par feuille [Résolu]

Signaler
Messages postés
34
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2007
-
Messages postés
34
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2007
-
Bonjour,


Je souhaite créer un macro permettant, pour chaque onglet d'un fichier Excel de:

- Sélectionner l'onglet

- Aller dans chaque noms de plage de l'onglet qui commence par "Retri_CR_"et colorier cette plage.


Ci dessous, voilà mon code. Le problème avec celui-ci est qu'il ne fait rien: il ne colorie pas les plages de cellule.

Sub ColorForum()
 
Dim r AsVariant
Dim s As Worksheet

ForEach s In Worksheets

s.Select

ForEach r In s.Names

If r.NameLike"Retri_CR_*"Then
With range(r.Name).Interior
.ColorIndex = 40
.Pattern = xlSolid
EndWith
EndIf

Next

Next
 
EndSub

Je suis à peu près sur que mon problème vient de l'utilisation de:

ForEach r In s.Names

Malheureusement, j'ai vraiment besoin de n'avoir que les noms des
plages de cellules de l'onglet seulement et pas ceux de tout le
classeur.


Avez-vous une idée ?


Merci pour vos réponses

Salley

5 réponses

Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Moi j'ai trouvé ça

Sub ColorForum()
Dim I,  s As Worksheet
   For Each s In Worksheets
     s.Select
     Garde_S = s.Name
     For I = 1 To Names.Count        If Left(Names(I).Name, 9) "Retri_CR_" And Range(Names(I)).Worksheet.Name Garde_S Then
            With Range(Names(I).Name).Interior
               .ColorIndex = 40
               .Pattern = xlSolid
            End With
          End If
     Next
   Next
End Sub
 Cliquer "Réponse Acceptée" Quand Réponse OK
JML. Partageons notre savoir et nos acquis
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
En fait le truc c'est que tu n'as pas besoin de sélectionner la cellule dans la mesure ou 
   "Range(Names(I)).Worksheet.Name = Garde_S" vérifie que tu n'as pas changé d'onglet

 Cliquer "Réponse Acceptée" Quand Réponse OK

JML. Partageons notre savoir et nos acquis

Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Bonjour,
Je ne comprends pas pourquoi tu balayes toutes les feuilles alors que tu écrits "Malheureusement, j'ai vraiment besoin de n'avoir que les noms des plages de cellules de l'onglet seulement et pas ceux de tout le classeur"
Mais bon ! J'ai pas testé mais ça devrait être quelque chose comme ça

Sub ColorForum()
Dim r AsVariant
Dim s As Worksheet
   For Each s In Worksheets
     s.Select
     Garde_S = s.Name
     ForEach r In s.Names
        If r.NameLike"Retri_CR_*" And ActiveSheet.Name = Garde_S Then
           With range(r.Name).Interior
              .ColorIndex = 40
              .Pattern = xlSolid
           EndWith
        EndIf
     Next
   Next
EndSub
 Cliquer "Réponse Acceptée" Quand Réponse OK
JML. Partageons notre savoir et nos acquis
Messages postés
34
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2007

Merci pour ta réponse [auteurdetail.aspx?ID= 1017721 JM247L]

En fait j'ai volontairement simplifié le code pour faire comprendre plus facilement mon problème car à l'intérieur de ma boucle For Each s In Worksheets j'utilise des fonctions qui ont besoin d'avoir un onglet sélectionner.

J'ai finalement trouvé la solution à mon pb, il fallait juste (ci-dessous) que j'aille sur mon "names" grâce au code: application.Goto Reference: =r.Name.

RMQ: Je ne pense pas qu'on puisse utiliser directement
For Each r In activesheet.Names car les "Names" sont reliés directement au classeur et non à l'onglet.

Cela donne donc:

Sub ColorForum()
 
Dim r AsVariant
Dim s As Worksheet

For Each r In ActiveWorkbook.Names

If r.Name Like "RETRI_CR_*" Then
application.Goto Reference:=r.Name
ActiveSheet.Select 'Select the Activ
With range(r.Name).Interior
.ColorIndex = 40
.Pattern = xlSolid
EndWith
EndIf
Next
 
EndSub

Merci

Salley
Messages postés
34
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2007

Merci encore pour tes réponses ;-)

Salley