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
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
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" <michdenis@hotmail.com> a écrit dans le message de news: ecU%23Qea0GHA.3512@TK2MSFTNGP04.phx.gbl...
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]" <XXX_pierresalaun@wanadoo.fr> a écrit dans le message de news:
e55oFIZ0GHA.1536@TK2MSFTNGP02.phx.gbl...
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" <michdenis@hotmail.com> a écrit dans le message de news:
O6ZDM0T0GHA.4176@TK2MSFTNGP06.phx.gbl...
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]" <XXX_pierresalaun@wanadoo.fr> a écrit dans le message de news:
uI0Ni5S0GHA.4252@TK2MSFTNGP03.phx.gbl...
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" <michdenis@hotmail.com> a écrit dans le message de news:
OOETPyR0GHA.2196@TK2MSFTNGP03.phx.gbl...
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]" <XXX_pierresalaun@wanadoo.fr> a écrit dans le message de news:
%23IVeoTQ0GHA.1300@TK2MSFTNGP05.phx.gbl...
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" <aaa@aaa> a écrit dans le message de news: eKa4xWP0GHA.4252@TK2MSFTNGP03.phx.gbl...
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
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
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(
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(
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(
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
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(
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
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
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(
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
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
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" <michelgaboly@bluewin.ch> a écrit dans le message de news: %23rklE$c0GHA.5048@TK2MSFTNGP05.phx.gbl...
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(
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
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
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
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
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(
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(
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(