With (VBA)

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel
Le #4653971
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"
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





MichDenis
Le #4653961
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"
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
MichDenis
Le #4653951
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"
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"
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
Daniel
Le #4653921
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

MichDenis
Le #4651621
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"
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

MichDenis
Le #4651601
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"
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

Daniel
Le #4651581
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"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"
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







MichDenis
Le #4651561
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" %235hi%
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"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"
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







Daniel
Le #4651531
OK. Merci pour l'explication.
Daniel
"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" %235hi%
C'est vrai. Je demande seulement en quoi la syntaxe que j'ai utilisée est
fautive
Daniel
"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"
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












Publicité
Poster une réponse
Anonyme