Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je voudrais savoir s'il est possible, en utilisant l'instruction "With", de faire référence à l'objet lui-même plutôt qu'à l'un de ses attributs.
Par exemple:
Code:
Sub Test()
With Thisworkbook.Worksheets(1) 'avec la première feuille du classeur
.Cells(1,1) = "toto" 'je met "toto" dans la cellule A1
Call FonctionQuiPrendUneFeuilleEnArgument(Thisworkbook.Worksheets(1)) 'Ici je veux remplacer Thisworkbook.Worksheets(1) par autre chose de plus simple...
.Cells(2,1) = "titi" 'je met "titi dans la cellule B1
End With
End Sub
Sub FonctionQuiPrendUneFeuilleEnArgument(Sht as Worksheet)
[...]
End Sub
En fait, je voudrais savoir si, comme je suis dans un "With", je peux remplacer le "Thisworkbook.Worksheets(1)" lors de l'appel de la fonction par quelquechose d'autre? J'ai essayé de mettre juste un point "." mais cela ne marche pas...
Je suis pas sûr que ce soit ce que tu désires, mais tu peux tester comme ça:
Code:
Sub Test()
With Thisworkbook
with .Worksheets(1) 'avec la première feuille du classeur
.Cells(1,1) = "toto" 'je met "toto" dans la cellule A1
.Cells(2,1) = "titi" 'je met "titi dans la cellule B1
End With
Call FonctionQuiPrendUneFeuilleEnArgument(.Worksheets(1)) 'Ici je veux remplacer Thisworkbook.Worksheets(1) par autre chose de plus simple...
end with
End Sub
Sub FonctionQuiPrendUneFeuilleEnArgument(Sht as Worksheet)
[...]
End Sub
A priori, c'est juste une question de formulation, sauf si tu mets tes instructions dans un ordre bien précis.
Dim Wks1 As Worksheet
Set Wks1 = ThisworkBook.Worksheets(1)
With Wks1
.Cells(1,1) = "toto"
Call FonctionQuiPrendUneFeuilleEnArgument(Wks1)
.Cells(2,1)= "titi"
End With
Thomas, tirex28, merci d'avoir répondu si rapidement! 🙂
Vos deux propositions sont intéressantes!
La première proposition pose effectivement le problème de l'ordre d'exécution, en obligeant à exécuter la procédure FonctionQuiPrendUneFeuilleEnArgument à la fin, une fois sorti de la boucle With. Donc si on avait besoin de cette fonction pour exécuter un traitement dans la boucle with, et que l'on ne peut pas changer l'ordre, cela risque de poser problème! Mais cela me donne quand même quelques idées pour des with imbriqués (jamais pensé à appeler un With dans un autre With).
La proposition de tirex28 est aussi intéressante
tirex28 à dit:
Bonjour,
En utilisant une variable:
Code:
Dim Wks1 As Worksheet
Set Wks1 = ThisworkBook.Worksheets(1)
With Wks1
.Cells(1,1) = "toto"
Call FonctionQuiPrendUneFeuilleEnArgument(Wks1)
.Cells(2,1)= "titi"
End With
C'est ce que je fais pour le moment: j'ai déclaré une variable. Mais je me demandais si, comme j'utilisais un With, j'aurais pu éviter de déclarer cette variable (car elle est alors mise en mémoire deux fois, une fois dans la variable et une fois dans le With...), avec peut-être une possibilité dans une boucle With Myobject de faire appel à l'objet directement. Par exemple:
Code:
Sub Test()
With ThisWorkbook.Worksheets(1)
[...]
Call FonctionQuiPrendUneFeuilleEnArgument(.Thisobject) 'Ou ". " ou ".ActiveObject" enfin quelquechose du genre qui se réfère à l'objet déclaré dans With... Bien sûr ceux-ci ne marchent pas
[...]
End With
End Sub
En fait, je vois qu'il est possible de le faire en déclarant des variables, mais je me demandais si on ne pourrait pas le faire simplement en utilisant le "With" et en faisant référence à l'objet lui-même plutôt qu'à un de ses arguments.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.