Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

With (VBA)

9 réponses
Avatar
Daniel
Bonsoir.
Où est l'erreur ?
Dim wb As Workbook, sh As Worksheet
Var = Range("A1") 'OK
Var = sh.Range("A1") 'OK
Var = wb.sh.Range("A1") 'Plante !!!
Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")
donne le résultat correct.
Qu'est-ce qui cloche ?
Merci d'avance.
Daniel

9 réponses

Avatar
Daniel
Je compplète :
Bonsoir.
Où est l'erreur ?
Dim wb As Workbook, sh As Worksheet
Set wb = ActiveWorkbook
Set sh = Sheets("Syndication et Assurance")
Var = Range("A1") 'OK
Var = sh.Range("A1") 'OK
Var = wb.sh.Range("A1") 'Plante !!!
Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")
donne le résultat correct.
et donc :
with wb.sh ne fonctionne pas.
Qu'est-ce qui cloche ?
Merci d'avance.
Daniel

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

Bonsoir.
Où est l'erreur ?
Dim wb As Workbook, sh As Worksheet
Var = Range("A1") 'OK
Var = sh.Range("A1") 'OK
Var = wb.sh.Range("A1") 'Plante !!!
Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")
donne le résultat correct.
Qu'est-ce qui cloche ?
Merci d'avance.
Daniel





Avatar
MichDenis
Tu as omis d'associer tes variables aux dits objets de ton application

Dim wb As Workbook, sh As Worksheet

Set Wk = ThisWorkbook
OU
Set Wk = Workbooks("NomDuClasseurOuvert.xls")
' En supposant que tu veuilles identifier une feuille du
' classeur identifié

Set Sh = Wk.Worksheets("NomDeLaFeuille")

Var = Sh.Range("A1") 'OK

' Le fait de faire référence à Wb est superfétatoire
' puisque tu l'as fait au moment de pointé l'objet
Var = sh.Range("A1") 'Plante !!!
'Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")




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

Bonsoir.
Où est l'erreur ?
Dim wb As Workbook, sh As Worksheet
Var = Range("A1") 'OK
Var = sh.Range("A1") 'OK
Var = wb.sh.Range("A1") 'Plante !!!
Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")
donne le résultat correct.
Qu'est-ce qui cloche ?
Merci d'avance.
Daniel
Avatar
MichDenis
Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"



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

Tu as omis d'associer tes variables aux dits objets de ton application

Dim wb As Workbook, sh As Worksheet

Set Wk = ThisWorkbook
OU
Set Wk = Workbooks("NomDuClasseurOuvert.xls")
' En supposant que tu veuilles identifier une feuille du
' classeur identifié

Set Sh = Wk.Worksheets("NomDeLaFeuille")

Var = Sh.Range("A1") 'OK

' Le fait de faire référence à Wb est superfétatoire
' puisque tu l'as fait au moment de pointé l'objet
Var = sh.Range("A1") 'Plante !!!
'Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")




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

Bonsoir.
Où est l'erreur ?
Dim wb As Workbook, sh As Worksheet
Var = Range("A1") 'OK
Var = sh.Range("A1") 'OK
Var = wb.sh.Range("A1") 'Plante !!!
Je me suis assuré avec :
Var = wb.Name
Var = sh.Name
que le classeur et la feuille sont les bons.
D'ailleurs :
Var = Workbooks(wb.Name).Sheets(sh.Name).Range("A1")
donne le résultat correct.
Qu'est-ce qui cloche ?
Merci d'avance.
Daniel
Avatar
Daniel
Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel

Avatar
MichDenis
Un autre façon de définir tes variables

Set Wk = Workbooks("Classeur1.xls")
With Wk
Set Sh = .Worksheets("Feuil1")
End With

With Sh
x = .range("A1")
End With

Ce type de syntaxe est impossible
with Wb.Sh
x = .range("A1")
End with

Wb et Sh sont 2 variables objets et lorsqu'elles ont été bien renseignées
ces variables sont autonomes.
Il y a aussi ceci
With Wk.Worksheets("Feuil1")
x = .range("A1")
End with






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

Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel

Avatar
MichDenis
Un autre façon de définir tes variables

Set Wk = Workbooks("Classeur1.xls")
With Wk
Set Sh = .Worksheets("Feuil1")
End With

J'allais oublié, à chaque fois que tu veux déclarer un objet Feuille
tu n'est pas oubligé de déclarer un objet Workbook

Exemple : Set Sh = Workbooks("NomDuClasseur.xls").Worksheets("Feuil1")

With Sh
x = .range("A1")
End With

Ce type de syntaxe est impossible
with Wb.Sh
x = .range("A1")
End with

Wb et Sh sont 2 variables objets et lorsqu'elles ont été bien renseignées
ces variables sont autonomes.
Il y a aussi ceci
With Wk.Worksheets("Feuil1")
x = .range("A1")
End with






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

Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel

Avatar
Daniel
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"MichDenis" a écrit dans le message de news:
%

Un autre façon de définir tes variables

Set Wk = Workbooks("Classeur1.xls")
With Wk
Set Sh = .Worksheets("Feuil1")
End With

J'allais oublié, à chaque fois que tu veux déclarer un objet Feuille
tu n'est pas oubligé de déclarer un objet Workbook

Exemple : Set Sh = Workbooks("NomDuClasseur.xls").Worksheets("Feuil1")

With Sh
x = .range("A1")
End With

Ce type de syntaxe est impossible
with Wb.Sh
x = .range("A1")
End with

Wb et Sh sont 2 variables objets et lorsqu'elles ont été bien renseignées
ces variables sont autonomes.
Il y a aussi ceci
With Wk.Worksheets("Feuil1")
x = .range("A1")
End with






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

Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel







Avatar
MichDenis
With Wb.Sh

End with

Pourquoi ceci ne fonctionne pas : Wb.Sh

Il faut d'abord savoir qu'une variable est d'abord et avant
qu' un espace mémoire réservé de la mémoire vive de
ton ordinateur pouvant contenir soit une valeur, soit un objet.

Chacune des variables est autonome. S'il est vrai que les
objets de l'application ont une hiérarchie, cette dernière
ne s'applique pas aux variables mais seulement aux objets
dûment créés dans un classeur. Par exemple, tu as
Workbook -> Worksheet -> Range

La variable objet lorsque tu la crées, tu dois lui spécifié
exactement ce qu'elle représente en utilisant "SET"... et
lorsque c'est fait, elle s'en souvient durant tout la durée de
son existence. Nul besoin de passer ton temps à lui rappeler.
Exemple : pour déclarer un objet Range
Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("A25")

Dans le reste de ton code, lorsque tu appelles la variable Rg comme dans
x = Rg.Value peu importe le nombre de classeur ouvert ou que le classeur
soit actif ou non, la variable Rg est toujours identifiée à la feuille "Mafeuille"
du classeur Denis.xls

Une variable ne peut contenir plus qu'une valeur ou un objet à la fois.
Rien ne t'empêche, cependant, de lui atribuer différents objets au cours
de la procédure :
Dim Rg as range
Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("A25")

et un peu plus loin.... en respectant le type d'objet que représente la variable.

Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("c25:G50")

Rg représentera toujours la dernère attribution que tu lui as adressé.




"Daniel" a écrit dans le message de news:
%235hi%
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"MichDenis" a écrit dans le message de news:
%

Un autre façon de définir tes variables

Set Wk = Workbooks("Classeur1.xls")
With Wk
Set Sh = .Worksheets("Feuil1")
End With

J'allais oublié, à chaque fois que tu veux déclarer un objet Feuille
tu n'est pas oubligé de déclarer un objet Workbook

Exemple : Set Sh = Workbooks("NomDuClasseur.xls").Worksheets("Feuil1")

With Sh
x = .range("A1")
End With

Ce type de syntaxe est impossible
with Wb.Sh
x = .range("A1")
End with

Wb et Sh sont 2 variables objets et lorsqu'elles ont été bien renseignées
ces variables sont autonomes.
Il y a aussi ceci
With Wk.Worksheets("Feuil1")
x = .range("A1")
End with






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

Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel







Avatar
Daniel
OK. Merci pour l'explication.
Daniel
"MichDenis" a écrit dans le message de news:

With Wb.Sh

End with

Pourquoi ceci ne fonctionne pas : Wb.Sh

Il faut d'abord savoir qu'une variable est d'abord et avant
qu' un espace mémoire réservé de la mémoire vive de
ton ordinateur pouvant contenir soit une valeur, soit un objet.

Chacune des variables est autonome. S'il est vrai que les
objets de l'application ont une hiérarchie, cette dernière
ne s'applique pas aux variables mais seulement aux objets
dûment créés dans un classeur. Par exemple, tu as
Workbook -> Worksheet -> Range

La variable objet lorsque tu la crées, tu dois lui spécifié
exactement ce qu'elle représente en utilisant "SET"... et
lorsque c'est fait, elle s'en souvient durant tout la durée de
son existence. Nul besoin de passer ton temps à lui rappeler.
Exemple : pour déclarer un objet Range
Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("A25")

Dans le reste de ton code, lorsque tu appelles la variable Rg comme dans
x = Rg.Value peu importe le nombre de classeur ouvert ou que le classeur
soit actif ou non, la variable Rg est toujours identifiée à la feuille
"Mafeuille"
du classeur Denis.xls

Une variable ne peut contenir plus qu'une valeur ou un objet à la fois.
Rien ne t'empêche, cependant, de lui atribuer différents objets au cours
de la procédure :
Dim Rg as range
Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("A25")

et un peu plus loin.... en respectant le type d'objet que représente la
variable.

Set Rg = Workbooks("Denis.xls").Worksheets("MaFeuille").Range("c25:G50")

Rg représentera toujours la dernère attribution que tu lui as adressé.




"Daniel" a écrit dans le message de news:
%235hi%
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"MichDenis" a écrit dans le message de news:
%

Un autre façon de définir tes variables

Set Wk = Workbooks("Classeur1.xls")
With Wk
Set Sh = .Worksheets("Feuil1")
End With

J'allais oublié, à chaque fois que tu veux déclarer un objet Feuille
tu n'est pas oubligé de déclarer un objet Workbook

Exemple : Set Sh = Workbooks("NomDuClasseur.xls").Worksheets("Feuil1")

With Sh
x = .range("A1")
End With

Ce type de syntaxe est impossible
with Wb.Sh
x = .range("A1")
End with

Wb et Sh sont 2 variables objets et lorsqu'elles ont été bien renseignées
ces variables sont autonomes.
Il y a aussi ceci
With Wk.Worksheets("Feuil1")
x = .range("A1")
End with






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

Et si tu veux utiliser with pour travailler avec ta feuille

With sh
'Ton code
End With

Tu n'as pas à utiliser la variable objet "Wb"

Euh si. J'ai plusieurs classeurs.

Mais je peux mettre :
set sh = leclasseur.lafeuille.
Bizarre quand même que ça plante ?
Daniel