OVH Cloud OVH Cloud

utiliser le nom réel de la feuille

18 réponses
Avatar
Pierre CFI [mvp]
bonjour
bon, aprés 1 1/2 mois en vendée et 15 jours sur les flots bleus de la méditérranée, il faut que je bosse un peu pour gagner un peu
de sous et méme beaucoup si je veux rafraichir JPS :o)

je sais que AV est un pro des [A1] plutot que range("a1"), je voudrais faire référence au nom objet d'une feuille, plutot qu'au nom
"humain", donc Feuil1 plutot que "Bon de commande"
Sub es1()
Dim w As Workbook
Set w = Workbooks.open("c:\ddddd.xls")
'ici comment on fait pour lire
Debug.Print w.[Feuil1].[a1]
End Sub


--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

8 réponses

1 2
Avatar
Pierre CFI [mvp]
exact, çà marche avec le classeur en cours , mais pas sur un distant, il reconnait pas l'objet, bon, dommage :o(

--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"michdenis" a écrit dans le message de news: ecU%
Je dois avoir une version spéciale de la version excel 2003,
car j'obtiens une erreur de type 9 (L'indice n'appartient pas à la sélection)
au moment d'exécuter le code !


"Pierre CFI [mvp]" a écrit dans le message de news:

re
à force de tatonnenements j'ai trouvé
Sub es1()
Dim w As Workbook
Set w = Workbooks.open("c:ddddd.xls")

Debug.Print w.Worksheets(Feuil1.name).[a1]


--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"michdenis" a écrit dans le message de news:

Il y a toujours moyen de simplifier la saisie en utilisant une petite procédure
comme ceci si tu dois répéter la chose à plusieurs reprise...

Il ne reste plus dans cette ligne de code "Var_Feuil Wk, "Feuil1", Sh"
de la procédure qu'à renseigner le nom de l'objet "Feuil1"

'-------------------------------
Sub Test1()

Dim Wk As Workbook
Dim Sh As Worksheet

Set Wk = Workbooks("classeur2.xls")
Var_Feuil Wk, "Feuil1", Sh
Set Sh = Sh
MsgBox Sh.Parent.Name
MsgBox Sh.Range("A1")

End Sub

'-----------------------------

Sub Var_Feuil(Wk As Workbook, F As String, Optional Sh As Worksheet)

Set Sh = Wk.Worksheets(Wk.Worksheets(Wk.VBProject.VBComponents(F).Properties("Index")).Name)

End Sub
'-----------------------------




"Pierre CFI [mvp]" a écrit dans le message de news:

merci michdenisje vais essayer çà demain, je pensais qu'il y avait une synthaxe plus simple
je préfere utiliser le nom systéme, car des fois l'utilisateur change le nom de l'onglet, et bien
sur le développeur vend de la
"daube"

--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"michdenis" a écrit dans le message de news:


Pour faire référence à une feuille "objet" d'un autre classer
voici un exemple simple à adapter à ta situation :

Exemple : dans le classeur A, nous voulons faire référence
à un objet feuille dont la propriété "Name" est Feuil1
et qui est dans le classeur2.xls

'--------------------------------
Sub Test()

Dim Wk As Workbook
Dim Sh As Worksheet

Set Wk = Workbooks("classeur2.xls")
Set Sh >>> Wk.Worksheets(Wk.Worksheets(Wk.VBProject.VBComponents("Feuil1").Properties("Index")).Name)
MsgBox Sh.Parent.Name
MsgBox Sh.Range("A1")

End Sub
'--------------------------------




"Pierre CFI [mvp]" a écrit dans le message de news:
%
bonjour isabelle
çà coince, voici mon code
Dim i As Integer
Dim Rcode As Range

Dim Wdata As Workbook
Dim Fdata As Worksheet
'On Error Resume Next
Set Wdata = Workbooks("basedata.xls")
If Wdata Is Nothing Then
Set Wdata = Workbooks.Open([chemin], , True)
End If
Windows(Wdata.Name).Visible = False
'*************** ICI
Set Fdata = Wdata.Feuil4
'*************************** Feuil4 est le nom logique
Set Rcode = Fdata.Range("id_produit").Find(qui)
If Rcode Is Nothing Then
MsgBox "Code produit non trouvé"
Err = 0
For i = 1 To 2
qui.Offset(0, i) = Null
Next

Exit Sub
End If
For i = 1 To 2
qui.Offset(0, i) = Rcode.Offset(0, i)
Next



--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"isabelle" a écrit dans le message de news:
bonjour Pierre,

With w
Debug.Print Feuil1.[a1]
End With

isabelle


bonjour
bon, aprés 1 1/2 mois en vendée et 15 jours sur les flots bleus de la méditérranée, il faut que
je bosse un peu pour gagner un
peu de sous et méme beaucoup si je veux rafraichir JPS :o)

je sais que AV est un pro des [A1] plutot que range("a1"), je voudrais faire référence au nom
objet d'une feuille, plutot qu'au
nom "humain", donc Feuil1 plutot que "Bon de commande"
Sub es1()
Dim w As Workbook
Set w = Workbooks.open("c:ddddd.xls")
'ici comment on fait pour lire
Debug.Print w.[Feuil1].[a1]
End Sub





















Avatar
isabelle
bonjour Pierre,

as tu essayé cette syntaxe qui fonctionne pour récupérer un nom de feuille :

x = Workbooks("Classeur1.xls").Sheets(1).Name

isabelle

exact, çà marche avec le classeur en cours , mais pas sur un distant, il reconnait pas l'objet, bon, dommage :o(



Avatar
isabelle
ou bien celle ci :

For Each f In Workbooks("Classeur1.xls").Sheets
If f.CodeName = "Feuil1" Then x = f.Name
Next

isabelle


bonjour Pierre,

as tu essayé cette syntaxe qui fonctionne pour récupérer un nom de
feuille :

x = Workbooks("Classeur1.xls").Sheets(1).Name

isabelle


exact, çà marche avec le classeur en cours , mais pas sur un distant,
il reconnait pas l'objet, bon, dommage :o(





Avatar
Michel Gaboly
Bonsoir Pierre,

Une autre approche possible, s'il s'agit de se prémunir contre les chan gements de nom de feuille par les clients :

Soit un classeur avec 2 feuilles, Feuil1 et Feuil2.

Définis les noms suivants :

Réf1, fait référence à Feuil1!A1
Réf2, fait référence à Feuil2!A1

Sub NomsFeuilles()
Dim F1 As Worksheet, F2 As Worksheet
With ActiveWorkbook
Set F1 = .Sheets(1).Evaluate("Réf1").Parent
Set F2 = .Sheets(1).Evaluate("Réf2").Parent
End With
MsgBox F1.Name & vbNewLine & F2.Name
End Sub

Tu disposes ainsi d'un objet par feuille, indépendant du fait que certa ines aient pu être renommées, sans avoir à te
creuser la cervelle pour te référer aux CodeModule.


exact, çà marche avec le classeur en cours , mais pas sur un distan t, il reconnait pas l'objet, bon, dommage :o(




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
NB - Déjà envoyé, mais le sujet manquait ;-((



Bonsoir Pierre,

Une autre approche possible, s'il s'agit de se prémunir contre les chan gements de nom de feuille par les clients :

Soit un classeur avec 2 feuilles, Feuil1 et Feuil2.

Définis les noms suivants :

Réf1, fait référence à Feuil1!A1
Réf2, fait référence à Feuil2!A1

Sub NomsFeuilles()
Dim F1 As Worksheet, F2 As Worksheet
With ActiveWorkbook
Set F1 = .Sheets(1).Evaluate("Réf1").Parent
Set F2 = .Sheets(1).Evaluate("Réf2").Parent
End With
MsgBox F1.Name & vbNewLine & F2.Name
End Sub

Tu disposes ainsi d'un objet par feuille, indépendant du fait que certa ines aient pu être renommées, sans avoir à te
creuser la cervelle pour te référer aux CodeName.

exact, çà marche avec le classeur en cours , mais pas sur un distan t, il reconnait pas l'objet, bon, dommage :o(




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Pierre CFI [mvp]
oui, c'est bien pour prévoir un changement de nom d'onglet
le no de la sheet m'ennuie un peu, car on peut changer l'ordre en inserant ou déplaçant une sheet
la méthode de michdenis est plus drastique, plus lourde à.....écrire

--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"Michel Gaboly" a écrit dans le message de news: %23rklE$
NB - Déjà envoyé, mais le sujet manquait ;-((



Bonsoir Pierre,

Une autre approche possible, s'il s'agit de se prémunir contre les changements de nom de feuille par les clients :

Soit un classeur avec 2 feuilles, Feuil1 et Feuil2.

Définis les noms suivants :

Réf1, fait référence à Feuil1!A1
Réf2, fait référence à Feuil2!A1

Sub NomsFeuilles()
Dim F1 As Worksheet, F2 As Worksheet
With ActiveWorkbook
Set F1 = .Sheets(1).Evaluate("Réf1").Parent
Set F2 = .Sheets(1).Evaluate("Réf2").Parent
End With
MsgBox F1.Name & vbNewLine & F2.Name
End Sub

Tu disposes ainsi d'un objet par feuille, indépendant du fait que certaines aient pu être renommées, sans avoir à te
creuser la cervelle pour te référer aux CodeName.

exact, çà marche avec le classeur en cours , mais pas sur un distant, il reconnait pas l'objet, bon, dommage :o(




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
Re,

Le numéro de feuille n'a strictement aucune importance, il sert seuleme nt à évaluer à quoi correspondent les noms.
En effet, même pour les noms de niveau classeur, comme ici, la syntaxe

ActiveWorkbook.Evaluate("Réf1") est incorrecte.

ActiveSheet.Evaluate("Réf1") est possible mais implique qu'on travaille sur le classeur actif, tandis qu'avec With, on
peut se référer à un autre classeur : il suffit de remplacer

With ActiveWorkbook
par

With wb

où wb est un objet.


Sub NomsFeuilles()
Dim F1 As Worksheet, F2 As Worksheet
With ActiveWorkbook
Set F1 = .Sheets(1).Evaluate("Réf1").Parent
Set F2 = .Sheets(1).Evaluate("Réf2").Parent
End With
MsgBox F1.Name & vbNewLine & F2.Name
End Sub

Set F1 = .Sheets(1).Evaluate("Réf1").Parent
Set F2 = .Sheets(1).Evaluate("Réf2").Parent

peut être remplacé par

Set F1 = .Sheets(1000).Evaluate("Réf1").Parent
Set F2 = .Sheets(1000).Evaluate("Réf2").Parent

si le classeur a suffisamment de feuilles. La seule chose qui compte est que l'indice ne soit pas supérieur au nombre de
feuilles. La raison d'utiliser Sheets(1) est qu'en principe, tout classeu r contient au moins une feuille. Pas testé si
Sheets(1) est une feuille graphique ou un autre cas particulier.


oui, c'est bien pour prévoir un changement de nom d'onglet
le no de la sheet m'ennuie un peu, car on peut changer l'ordre en inser ant ou déplaçant une sheet
la méthode de michdenis est plus drastique, plus lourde à.....écr ire




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
isabelle
une curiorité pour ce code, lorsque je l'exécute au pas à pas, tout fonctionne,
mais pas autrement.

Sub RécolteRapport()
x = Workbooks("Modele.xls").Sheets("Sommaire").Range("B1")
y = Len(x)
For Each w In Workbooks
wk = w.Name
If Left(wk, y) = x Then
For Each f In Workbooks(wk).Sheets
If f.CodeName = "Feuil1" Then b = f.Name '<------
Next
mf = Left(Split(b, "(")(UBound(Split(b, ")"))), 7)
Workbooks(wk).Sheets(b).Cells.Copy Sheets(mf).Range("A1")
Application.CutCopyMode = False
End If
Next
End Sub

isabelle


ou bien celle ci :

For Each f In Workbooks("Classeur1.xls").Sheets
If f.CodeName = "Feuil1" Then x = f.Name
Next

isabelle


bonjour Pierre,

as tu essayé cette syntaxe qui fonctionne pour récupérer un nom de
feuille :

x = Workbooks("Classeur1.xls").Sheets(1).Name

isabelle


exact, çà marche avec le classeur en cours , mais pas sur un distant,
il reconnait pas l'objet, bon, dommage :o(







1 2