si feuilGraph1 est de type chart, je ne vois pas comment il est possible de
faire référence à une plage de cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est une
feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend les
feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille graphique
et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des boucles comme
ci- dessus à faire et que ton classeur ne contient pas qu'un seul type de
feuille, autant ne pas déclarer la variable de boucle ou alors il faut gerer
les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque fois
l'intégralité du texte ne sert qu'à alléger le code et le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu veux
définir moy de type range, il faut écrire set moy þuilGraph1.Range("O11")
sauf si tu veux en obtenir la valeur bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille ou
bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1") à
chaque fois ?
merci pour l'aide
--
à+twinley
si feuilGraph1 est de type chart, je ne vois pas comment il est possible de
faire référence à une plage de cellules.
A+
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est une
feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend les
feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille graphique
et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des boucles comme
ci- dessus à faire et que ton classeur ne contient pas qu'un seul type de
feuille, autant ne pas déclarer la variable de boucle ou alors il faut gerer
les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque fois
l'intégralité du texte ne sert qu'à alléger le code et le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu veux
définir moy de type range, il faut écrire set moy þuilGraph1.Range("O11")
sauf si tu veux en obtenir la valeur bien sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille ou
bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1") à
chaque fois ?
merci pour l'aide
--
à+twinley
si feuilGraph1 est de type chart, je ne vois pas comment il est possible de
faire référence à une plage de cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est une
feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend les
feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille graphique
et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des boucles comme
ci- dessus à faire et que ton classeur ne contient pas qu'un seul type de
feuille, autant ne pas déclarer la variable de boucle ou alors il faut gerer
les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque fois
l'intégralité du texte ne sert qu'à alléger le code et le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu veux
définir moy de type range, il faut écrire set moy þuilGraph1.Range("O11")
sauf si tu veux en obtenir la valeur bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille ou
bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1") à
chaque fois ?
merci pour l'aide
--
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans qualificatif,
Sheets représente les feuilles du classeur actif, ce qui peut conduire à
des surprises, si le classeur actif n'est pas celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant au
type de feuille à parcourir, Worksheets ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille
ou bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1")
à chaque fois ?
merci pour l'aide
--
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans qualificatif,
Sheets représente les feuilles du classeur actif, ce qui peut conduire à
des surprises, si le classeur actif n'est pas celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant au
type de feuille à parcourir, Worksheets ou Charts, selon le cas.
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille
ou bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1")
à chaque fois ?
merci pour l'aide
--
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans qualificatif,
Sheets représente les feuilles du classeur actif, ce qui peut conduire à
des surprises, si le classeur actif n'est pas celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant au
type de feuille à parcourir, Worksheets ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une feuille
ou bien est ce mieux d'écrire Workbooks("flux.xls").Sheets("Graph1")
à chaque fois ?
merci pour l'aide
--
à+twinley
Graph1 est un nom de feuille. J'ai aisément adapté avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique Graphique1.
à+twinleyRe,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en ayant nommé
"Graph1" une feuille de calcul, parce qu'elle contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non Chart.si feuilGraph1 est de type chart, je ne vois pas comment il est
possible de faire référence à une plage de cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Graph1 est un nom de feuille. J'ai aisément adapté avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique Graphique1.
à+twinley
Re,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en ayant nommé
"Graph1" une feuille de calcul, parce qu'elle contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non Chart.
si feuilGraph1 est de type chart, je ne vois pas comment il est
possible de faire référence à une plage de cellules.
A+
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Graph1 est un nom de feuille. J'ai aisément adapté avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique Graphique1.
à+twinleyRe,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en ayant nommé
"Graph1" une feuille de calcul, parce qu'elle contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non Chart.si feuilGraph1 est de type chart, je ne vois pas comment il est
possible de faire référence à une plage de cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
-----Message d'origine-----
Pas de piège avec une feuille de calcul
nommée "Graph1", on dit çà ;-))
Graph1 est un nom de feuille. J'ai aisément adapté
avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de
rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique
Graphique1.
à +twinleyRe,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en
ayant nommé
"Graph1" une feuille de calcul, parce qu'elle
contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non
Chart.
si feuilGraph1 est de type chart, je ne vois pas
comment il est
possible de faire référence à une plage de
cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As
Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection
sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur
contient 1 feuille
graphique et une feuille de calcul, une boucle
comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh
as worksheet en
déclaration ne passe pas la barre du
débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton
classeur ne contient pas
qu'un seul type de feuille, autant ne pas
déclarer la variable de
boucle ou alors il faut gerer les erreurs
potentielles.
Enfin écrire uen fois pour toute dans ton
programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que
d'écrire à chaque
fois l'intégralité du texte ne sert qu'Ã
alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy =
feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire
set moy
þuilGraph1.Range("O11") sauf si tu veux en
obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est
un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets
("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur
range("O11").
Autre question, est-ce une façon performante de
manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") Ã chaque
fois ?
merci pour l'aide
--
à +twinley
--
Cordialement,
Michel Gaboly
www.gaboly.com
.
-----Message d'origine-----
Pas de piège avec une feuille de calcul
nommée "Graph1", on dit çà ;-))
Graph1 est un nom de feuille. J'ai aisément adapté
avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de
rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique
Graphique1.
à +twinley
Re,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en
ayant nommé
"Graph1" une feuille de calcul, parce qu'elle
contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non
Chart.
si feuilGraph1 est de type chart, je ne vois pas
comment il est
possible de faire référence à une plage de
cellules.
A+
bonjour,
si feuilGraph1 est une feuille graphique, c'est As
Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection
sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur
contient 1 feuille
graphique et une feuille de calcul, une boucle
comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh
as worksheet en
déclaration ne passe pas la barre du
débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton
classeur ne contient pas
qu'un seul type de feuille, autant ne pas
déclarer la variable de
boucle ou alors il faut gerer les erreurs
potentielles.
Enfin écrire uen fois pour toute dans ton
programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que
d'écrire à chaque
fois l'intégralité du texte ne sert qu'Ã
alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy =
feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire
set moy
=feuilGraph1.Range("O11") sauf si tu veux en
obtenir la valeur bien
sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est
un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets
("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur
range("O11").
Autre question, est-ce une façon performante de
manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") Ã chaque
fois ?
merci pour l'aide
--
à +twinley
--
Cordialement,
Michel Gaboly
www.gaboly.com
.
-----Message d'origine-----
Pas de piège avec une feuille de calcul
nommée "Graph1", on dit çà ;-))
Graph1 est un nom de feuille. J'ai aisément adapté
avec vos brillantes
explications.
Y avait pas de piège de ma part mais un manque de
rigueur dans ma
programmation.
C'est la feuille Graph1 qui contient le graphique
Graphique1.
à +twinleyRe,
Effectivement, tu as raison ;-))
Sauf s'il cherche à nous induire en erreur ;-)) en
ayant nommé
"Graph1" une feuille de calcul, parce qu'elle
contient un ou plusieurs
graphiques.
Auquel cas, "Graph1" serait un objet Worksheet et non
Chart.
si feuilGraph1 est de type chart, je ne vois pas
comment il est
possible de faire référence à une plage de
cellules.
A+bonjour,
si feuilGraph1 est une feuille graphique, c'est As
Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection
sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur
contient 1 feuille
graphique et une feuille de calcul, une boucle
comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh
as worksheet en
déclaration ne passe pas la barre du
débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton
classeur ne contient pas
qu'un seul type de feuille, autant ne pas
déclarer la variable de
boucle ou alors il faut gerer les erreurs
potentielles.
Enfin écrire uen fois pour toute dans ton
programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que
d'écrire à chaque
fois l'intégralité du texte ne sert qu'Ã
alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy =
feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire
set moy
þuilGraph1.Range("O11") sauf si tu veux en
obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est
un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets
("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur
range("O11").
Autre question, est-ce une façon performante de
manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") Ã chaque
fois ?
merci pour l'aide
--
à +twinley
--
Cordialement,
Michel Gaboly
www.gaboly.com
.
Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne suis
pas sur la feuille active qui reçoit des données en DDE au moment du
calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce qui
peut conduire à des surprises, si le classeur actif n'est pas celui
auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant
au type de feuille à parcourir, Worksheets ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne suis
pas sur la feuille active qui reçoit des données en DDE au moment du
calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce qui
peut conduire à des surprises, si le classeur actif n'est pas celui
auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant
au type de feuille à parcourir, Worksheets ou Charts, selon le cas.
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne suis
pas sur la feuille active qui reçoit des données en DDE au moment du
calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce qui
peut conduire à des surprises, si le classeur actif n'est pas celui
auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille du
classeur, les feuilles de calcul et pas les feuilles graphiques, par
exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection Sheets,
QUE si on a réellement besoin de traiter toutes les feuilles. Si ce
n'est pas le cas, il vaut mieux utiliser la collection correspondant
au type de feuille à parcourir, Worksheets ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le rendre
+ lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Bon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules pouvant
servir de référence, et de s'y référer ensuite en utilisant Offset,
l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une cellule
nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est mis
à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de façon
à pouvoir reporter au bon emplacement les infos relatives à la personne
suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au moment
du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les feuilles.
Si ce n'est pas le cas, il vaut mieux utiliser la collection
correspondant au type de feuille à parcourir, Worksheets ou Charts,
selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Bon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules pouvant
servir de référence, et de s'y référer ensuite en utilisant Offset,
l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une cellule
nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est mis
à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de façon
à pouvoir reporter au bon emplacement les infos relatives à la personne
suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".
Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au moment
du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les feuilles.
Si ce n'est pas le cas, il vaut mieux utiliser la collection
correspondant au type de feuille à parcourir, Worksheets ou Charts,
selon le cas.
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Bon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules pouvant
servir de référence, et de s'y référer ensuite en utilisant Offset,
l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une cellule
nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est mis
à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de façon
à pouvoir reporter au bon emplacement les infos relatives à la personne
suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au moment
du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser la
collection correspondante évite de mauvaises surprises si le classeur
contient des feuilles d'un autre type que celui auquel on s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper le
l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les feuilles.
Si ce n'est pas le cas, il vaut mieux utiliser la collection
correspondant au type de feuille à parcourir, Worksheets ou Charts,
selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient pas
qu'un seul type de feuille, autant ne pas déclarer la variable de
boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à chaque
fois l'intégralité du texte ne sert qu'à alléger le code et le
rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si tu
veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur bien
sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Merci pour les encouragements. J'ai franchi le cap pénible ou j'en
bavais. Maintenant j'ai plus de repères.
Je voulais dire que si je ne mets pas le chemin complet sous la forme
workbook("gnagnan").sheets("tralala").[D12] j'ai des soucis.
C'est l'objet de ma question pour simplifier et bien coder. Vos réponses
me permettent de corriger le tir.
J'ai un seul classeur ouvert et je reçois les donnée en permanence dans
la feuille Graph1. J'ai des lignes de code approximatives qui
sollicitent des cells qui n'ont pas le chemin complet. Du coup si je ne
suis pas sur la bonne page, je débug car le calcul se déclanche tout seul.
Certaines lignes ont la référence à la feuille mais pas au classeur.
Comme je vais mettre un deuxième classeur ouvert, c'est le moment de
tout remanier avec un peu plus de connaissance qu'il y a quelques mois.
Je dois passer d'un classeur à l'autre et de feuille en feuille sans
planter.
à+twinleyBon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules
pouvant servir de référence, et de s'y référer ensuite en utilisant
Offset, l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une
cellule nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est
mis à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de
façon à pouvoir reporter au bon emplacement les infos relatives à la
personne suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au
moment du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser
la collection correspondante évite de mauvaises surprises si le
classeur contient des feuilles d'un autre type que celui auquel on
s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper
le l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les
feuilles. Si ce n'est pas le cas, il vaut mieux utiliser la
collection correspondant au type de feuille à parcourir, Worksheets
ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient
pas qu'un seul type de feuille, autant ne pas déclarer la variable
de boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à
chaque fois l'intégralité du texte ne sert qu'à alléger le code et
le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si
tu veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur
bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Merci pour les encouragements. J'ai franchi le cap pénible ou j'en
bavais. Maintenant j'ai plus de repères.
Je voulais dire que si je ne mets pas le chemin complet sous la forme
workbook("gnagnan").sheets("tralala").[D12] j'ai des soucis.
C'est l'objet de ma question pour simplifier et bien coder. Vos réponses
me permettent de corriger le tir.
J'ai un seul classeur ouvert et je reçois les donnée en permanence dans
la feuille Graph1. J'ai des lignes de code approximatives qui
sollicitent des cells qui n'ont pas le chemin complet. Du coup si je ne
suis pas sur la bonne page, je débug car le calcul se déclanche tout seul.
Certaines lignes ont la référence à la feuille mais pas au classeur.
Comme je vais mettre un deuxième classeur ouvert, c'est le moment de
tout remanier avec un peu plus de connaissance qu'il y a quelques mois.
Je dois passer d'un classeur à l'autre et de feuille en feuille sans
planter.
à+twinley
Bon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules
pouvant servir de référence, et de s'y référer ensuite en utilisant
Offset, l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une
cellule nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est
mis à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de
façon à pouvoir reporter au bon emplacement les infos relatives à la
personne suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".
Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au
moment du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinley
Bonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser
la collection correspondante évite de mauvaises surprises si le
classeur contient des feuilles d'un autre type que celui auquel on
s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper
le l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les
feuilles. Si ce n'est pas le cas, il vaut mieux utiliser la
collection correspondant au type de feuille à parcourir, Worksheets
ou Charts, selon le cas.
bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient
pas qu'un seul type de feuille, autant ne pas déclarer la variable
de boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à
chaque fois l'intégralité du texte ne sert qu'à alléger le code et
le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si
tu veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur
bien sur.
A+
Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley
Merci pour les encouragements. J'ai franchi le cap pénible ou j'en
bavais. Maintenant j'ai plus de repères.
Je voulais dire que si je ne mets pas le chemin complet sous la forme
workbook("gnagnan").sheets("tralala").[D12] j'ai des soucis.
C'est l'objet de ma question pour simplifier et bien coder. Vos réponses
me permettent de corriger le tir.
J'ai un seul classeur ouvert et je reçois les donnée en permanence dans
la feuille Graph1. J'ai des lignes de code approximatives qui
sollicitent des cells qui n'ont pas le chemin complet. Du coup si je ne
suis pas sur la bonne page, je débug car le calcul se déclanche tout seul.
Certaines lignes ont la référence à la feuille mais pas au classeur.
Comme je vais mettre un deuxième classeur ouvert, c'est le moment de
tout remanier avec un peu plus de connaissance qu'il y a quelques mois.
Je dois passer d'un classeur à l'autre et de feuille en feuille sans
planter.
à+twinleyBon courage ;-))
Qu'appelles-tu définition complète de toutes les cellules ?
Il est en général pratique de nommer un certains nb de cellules
pouvant servir de référence, et de s'y référer ensuite en utilisant
Offset, l'équivalent de DECALER()
Par exemple, pour reporter les coordonnées de quelqu'un, à partir de
Textboxes sur un UserForm. (NB - Je nomme les TextBox de façon à avoir
des noms évocateurs, que je fais commencer par T comme Textbox) :
With Range("RéceptionDonnées")
.Value = TNom
.Offset(0, 1) = TPrenom
.Offset(0, 2) = TAdresse
.Offset(0, 3) = TSuiteAdresse
.Offset(0, 4) = TCP
.Offset(0, 5) = TVille
...
ActiveWorkbook.Names.Add "RéceptionDonnées", .Offset(1)
End If
Les quelques lignes ci-dessus reportent les infos à partir d'une
cellule nommée "RéceptionDonnées", sur la même ligne.
Une fois le report terminé, l'emplacement de "RéceptionDonnées" est
mis à jour, en le décalant d'une ligne vers le bas avec .Offset(1), de
façon à pouvoir reporter au bon emplacement les infos relatives à la
personne suivante.
Personnellement je préfère cette méthode au End(XlUp) qui implique
qu'aucune cellule ne peut être utilisée plus bas dans la même colonne
que "RéceptionDonnées".Bien vu,
les déclarations approximatives me pourrissent la vie car si je ne
suis pas sur la feuille active qui reçoit des données en DDE au
moment du calcul, je pars en debug.
D'où l'importance d'intégrer tout ce que vous me dites, ainsi je
pourrais accéder à n'importe quelle feuille sans planter le calcul en
cours.
Je viens de faire la première étape avec Option Explicit. Gros boulot.
Maintenant définition complète de toutes les cellules...
Merci pour l'aide
à+twinleyBonjour,
Juste 2 précisions :
- Dans Each sh in sheets, il faut être conscient que sans
qualificatif, Sheets représente les feuilles du classeur actif, ce
qui peut conduire à des surprises, si le classeur actif n'est pas
celui auquel on s'attend.
Il est plus prudent d'écrire
For Each sh in ThisWorbook.Sheets
ou
For Each sh in Worbooks("Toto.xls").Sheets
ou
For Each sh in w.Sheets
où w représente un classeur
- Bien souvent, on n'a besoin de ne parcourir qu'un type de feuille
du classeur, les feuilles de calcul et pas les feuilles graphiques,
par exemple, auquel cas déclarer la variable de boucle et utiliser
la collection correspondante évite de mauvaises surprises si le
classeur contient des feuilles d'un autre type que celui auquel on
s'intérersse :
Dim w as Worksheet
For each w in ThisWorbook.Workheets
...
Next w
permet d'explorer les feuilles de calcul sans devoir se préoccuper
le l'existence éventuelles de feuilles d'un autre type.
Personnellement je préconise de ne faire appel à la collection
Sheets, QUE si on a réellement besoin de traiter toutes les
feuilles. Si ce n'est pas le cas, il vaut mieux utiliser la
collection correspondant au type de feuille à parcourir, Worksheets
ou Charts, selon le cas.bonjour,
si feuilGraph1 est une feuille graphique, c'est As Chart. Si c'est
une feuille de calcul c'est As worksheet.
Il n' y a pas d'objet sheet mais une collection sheets qui comprend
les feuilles de type worksheet et de type Chart.
En conséquence, dans le cas où p. ton classeur contient 1 feuille
graphique et une feuille de calcul, une boucle comme celle ci
fonctionne
for each sh in sheets
msgbox typename(sh)
next
mais la meme boucle avec Dim sh as Chart ou dim sh as worksheet en
déclaration ne passe pas la barre du débogger.Donc si tu as des
boucles comme ci- dessus à faire et que ton classeur ne contient
pas qu'un seul type de feuille, autant ne pas déclarer la variable
de boucle ou alors il faut gerer les erreurs potentielles.
Enfin écrire uen fois pour toute dans ton programme set wsh
=Workbooks("flux.xls").Sheets("Graph1") plutot que d'écrire à
chaque fois l'intégralité du texte ne sert qu'à alléger le code et
le rendre + lisible.
De plus , tu ne peux pas écrire moy = feuilGraph1.Range("O11") si
tu veux définir moy de type range, il faut écrire set moy
þuilGraph1.Range("O11") sauf si tu veux en obtenir la valeur
bien sur.
A+Bonjour,
comment dois-je déclarer feuilGraph1 qui est un "raccourci" pour
désigner la feuille d'un classeur ?
Dim feuilGraph1 As ?
Set feuilGraph1 = Workbooks("flux.xls").Sheets("Graph1")
moy = feuilGraph1.Range("O11")
si je met Dim feuilGraph1 As Sheets, il bute sur range("O11").
Autre question, est-ce une façon performante de manipuler une
feuille ou bien est ce mieux d'écrire
Workbooks("flux.xls").Sheets("Graph1") à chaque fois ?
merci pour l'aide
--
à+twinley