Espaces dans les noms de Feuilles

sigismond

XLDnaute Occasionnel
Bonjour à tous,

Il y a longtemps que j'ai proscris l'usage des espaces (et des accents) dans les noms de feuilles de mes projets, ce qui fait que je n'ai plus d'expérience des conséquences.

J'ai hérité d'un projet qui utilise, lui, ces espaces dans les noms de feuilles et je suis obligé de faire avec.

Parmi les bugs identifiés : l'impossibilité depuis le code d'adresser une feuille qui n'est pas active :


ActiveWorkbook.Worksheets("Ma Feuille 1").Shapes.Count


ne fonctionne que si la feuille "Ma Feuille 1" est sélectionnée.

Ma requête est la suivante :
  • Connaissez vous d'autres situations de bugs potentiels ?
  • Connaissez vous des astuces pour contourner ces bugs ?
  • existerait-il une syntaxe particulière pour autoriser ces espaces dans les noms de feuille ?

Merci de m'apporter votre expérience car depuis que je travaille sur ce projet, rien ne marche, j'ai l'impression d'être redevenu débutant :D

déprimant, non ?

Sigismond
 

Odesta

XLDnaute Impliqué
Re : Espaces dans les noms de Feuilles

BOnjour

ActiveWorkbook.Worksheets("Ma Feuille 1").Shapes.Count

ne fonctionne que si la feuille "Ma Feuille 1" est sélectionnée.

Avec un test simple :

test = ActiveWorkbook.Worksheets("Ma Feuille 1").Shapes.Count

Me renvoie bien la bonne valeur, quelle que soit la feuille sélectionnée.

Je pense que les bug viennent d'autre part, car j'utilise souvent des espaces dans les noms de feuilles

Pouvez-vous nous en dire plus ?

Cordialement
Olivier
 

tototiti2008

XLDnaute Barbatruc
Re : Espaces dans les noms de Feuilles

Bonjour Sigismond,

d'après un petit test que je viens de faire,

Code:
test = ActiveWorkbook.Worksheets("Ma Feuille 1").Shapes.Count

ou

Code:
test = ActiveWorkbook.Worksheets("Feuil2").Shapes.Count

fonctionnent si les feuilles ne sont pas activées, espace dans le nom ou pas...

Edit : j'ai refait mon test, c'était pas bon ;)
 
Dernière édition:

sigismond

XLDnaute Occasionnel
Re : Espaces dans les noms de Feuilles

Merci de ta réponse Odesta,

Je suis coupable d'avoir simplifié le problème sans tester.

Après test je confirme que ça marche qqsoit la feuille sélectionnée.

Je travaille sous Win XP / Excel 2003.
Mon projet tourne dans un classeur principal qui va parcourir des classeurs satellites, regroupés dans un répertoire, faire des traitements dessus et enregistrer certaines propriétés des objets composants les classeurs satellites.
Le classeur principal ne se contente pas de lire des données dans les cellules d'une feuille, mais il recherche également des infos de configuration :

:D :D :D couleur d'une police ou largeur d'une colonne :D :D :D

:eek: :eek: :eek: Valeur mini de l'échelle des ordonnées d'un graphique :eek: :eek: :eek:

En pratique, j'ouvre un classeur satellite,
Je charge son contenu dans une variable classeur,
et j'explore la hiérarchie.
Pour cela je peux avoir à créer des objets à un niveau inférieur (Range par exemple)




Dim MonClass as Workbook, MyRange as Range
.
.
Workbooks.Open Filename:=...
Set MonClass = ActiveWorkbook
.
.
Set MyRange = MonClass.Worksheets("Ma Feuille 1").Range(Cells(ln1, col1), Cells(ln2, col2))


Pour que le Set MyRange fonctionne, "Ma Feuille 1" doit être sélectionnée.
Ce qui n'est pas nécessaire en l'absence d'espace ou en adressant la feuille par son n° d'index.

Voila un exemple que j'ai identifié et contourné mais j'en ai plein d'autres, non identifiés.

J'attribue peut être à tort la responsabilité aux espaces dans les noms de feuille, mais j'ai de gros doutes.

Merci à tous ceux qui se penchent sur mon Pb.

Sigismond
 

tototiti2008

XLDnaute Barbatruc
Re : Espaces dans les noms de Feuilles

Re,

et si tu essaye comme ça ?

Code:
With MonClass[FONT=Courier New].Worksheets("Ma Feuille 1")[/FONT]
[FONT=Courier New]Set MyRange = .Range(.Cells(ln1, col1), .Cells(ln2, col2))[/FONT]
[FONT=Courier New]end with[/FONT]

Quand tu fais appel à Cells, par défaut il désigne la feuille active
 

sousou

XLDnaute Barbatruc
Re : Espaces dans les noms de Feuilles

Bonjour à tous
Très surppris!
Après plusieurs test cela fonctionne si on respecte bien les espaces devant ou après.
Le message d'erreur est-il l'indice n'appartient pas à la sélection
 

sigismond

XLDnaute Occasionnel
Re : Espaces dans les noms de Feuilles

Merci pour ta collaboration tototiti

Re,

et si tu essaye comme ça ?

Code:
With MonClass[FONT=Courier New].Worksheets("Ma Feuille 1")[/FONT]
[FONT=Courier New]Set MyRange = .Range(.Cells(ln1, col1), .Cells(ln2, col2))[/FONT]
[FONT=Courier New]end with[/FONT]

Quand tu fais appel à Cells, par défaut il désigne la feuille active

Après essai, résultat identique.

Sigismond.
 

tototiti2008

XLDnaute Barbatruc
Re : Espaces dans les noms de Feuilles

Bonjour sousou,
Re,

Edit : Bing

Bon, alors as-tu vérifié les valeurs de ln1, ln2, col1, col2 ?

parce que moi j'ai testé le code là sans soucis :

Code:
Dim Wkb As Workbook, Rng As Range
Workbooks.Open Filename:="...xls"
Set Wkb = ActiveWorkbook
ThisWorkbook.Activate
Set Rng = Wkb.Worksheets("Ma Feuille 1").Range("A1:A10")
 
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Espaces dans les noms de Feuilles

Bonjour, re
de manière générale :
Set MyRange = MonClass.Worksheets("Ma Feuille 1").Range(Cells(ln1, col1), Cells(ln2, col2))

n'est pas correcte, puisqu'on ne sait pas sur quoi pointe Cells(ln1,col1)
D'ou la proposition de Tototiti, avec le with et les .Range / .Cells Le point a toute son importance.

Que renvoit ceci ? :
Test1 = Worksheets("Ma Feuille 1").Cells(ln1, col1).Value

Cordialement
 

sigismond

XLDnaute Occasionnel
Re : Espaces dans les noms de Feuilles

J'ai bien noté vos suggestions tototiti et Odesta.

C'est sûr que je n'utilise pas beaucoup les structures With...End With,
je n'y vois qu'une "mise en facteur" permettant de limiter l'écriture du code mais je n'ai peut-être pas tout compris.

J'aimerais recentrer la discussion sur ma préoccupation (qui évolue...:D ) car j'ai réglé le problème précédent en passant par les N° d'index de la collection de feuilles.

J'ai joint deux fichiers dans mon .zip : Principal et satellite

Principal contient le code qui ouvre Satellite
Satellite contient un graphique dont j'aimerai pouvoir accéder à la collection : SeriesCollection

Sub CherchBug()
Dim MonClass As Workbook, MonGraph As Chart

Workbooks.Open Filename:="Satellite.xls"
Set MonClass = ActiveWorkbook
Set MonGraph = MonClass.Worksheets("Analyse Graphique").Shapes(1).DrawingObject.Chart

MonGraph.Activate

ActiveChart.SeriesCollection(1).Select
MsgBox ("Formule 1 : " & Selection.Formula)
MsgBox ("colorIndex 1 : " & Selection.Border.ColorIndex)
ActiveChart.SeriesCollection(2).Select
MsgBox ("Formule 2 : " & Selection.Formula)
MsgBox ("colorIndex 2 : " & Selection.Border.ColorIndex)
End Sub



Pour cela, il faut que je localise l'objet "Chart"

Que je l'active,

et que j'utilise la propriété ActiveChart pour accéder à SeriesCollection

Mon problème est que : " MonGraph.Activate " ne marche pas !

C'est bien l'étape qui bloque car en pas à pas en remplaçant ActiveChart par une activation manuelle à la souris, ça marche.

Merci de me montrer l'erreur.

Sigismond
 

Pièces jointes

  • BugHunting.zip
    13.4 KB · Affichages: 26
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Espaces dans les noms de Feuilles

C'est justement parceque tu cherches à les activer que cela ne marche pas. Cela ne sert à rien qu'à alourdir les procedures :


Ce que cela pourait donner :

Code:
Dim MonClass As Workbook, MonGraph As Chart

Workbooks.Open Filename:="P:\Perso\Prog\Satellite.xls"
Set MonClass = ActiveWorkbook
Set MonGraph = MonClass.Worksheets("Analyse Graphique").Shapes(1).DrawingObject.Chart

MsgBox ("Formule 1 : " & MonGraph.SeriesCollection(1).Formula)
MsgBox ("colorIndex 1 : " & MonGraph.SeriesCollection(1).Border.ColorIndex)

MsgBox ("Formule 2 : " & MonGraph.SeriesCollection(2).Formula)
MsgBox ("colorIndex 2 : " & MonGraph.SeriesCollection(2).Border.ColorIndex)


Et pour reprendre l'explication de tout à l'heure sur la "cells"

Set MyRange = MonClass.Worksheets("Ma Feuille 1").Range(Cells(ln1, col1), Cells(ln2, col2))
devrait s'écrire, si l'on en factorise pas :
Set MyRange = MonClass.Worksheets("Ma Feuille 1").Range(MonClass.Worksheets("Ma Feuille 1").Cells(ln1, col1), MonClass.Worksheets("Ma Feuille 1").Cells(ln2, col2))
Voila, où Tototiti et moi voulions ne venir. Il faut faire attention à ce que l'on pointe ^^

Cordialement
Olivier
 

job75

XLDnaute Barbatruc
Re : Espaces dans les noms de Feuilles

Bonjour sigismond, le fil,

Mon problème est que : " MonGraph.Activate " ne marche pas ! (...) Merci de me montrer l'erreur.

Il faut utiliser la propriété Parent :

Code:
MonGraph[COLOR="Red"].Parent[/COLOR].Activate

Edit : bien d'accord Odesta, il faut toujours éviter les Select ou les Activate.

A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 584
Messages
2 089 965
Membres
104 319
dernier inscrit
J-LZ