XL 2013 Dans un With faire référence à l'objet With ?

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

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 !

Dudu2

XLDnaute Barbatruc
Bonjour à tous,

Question qui peut paraître étrange mais dont les conditions se posent à moi de temps en temps.
Dans un With, comment faire référence à l'objet cité dans le With autrement que par lui-même ou par un artifice ?
Exemple:
VB:
Sub a()
    With ThisWorkbook.Worksheets("Feuil1")
        .Cells(10, 1).Value = "Dernière ligne utilisée de la feuille ->"
      
        'Objet de la question, syntaxe non valide:
        '.Cells(10, 4).Value = b(.)
      
        'Méthode détournée
        .Cells(10, 4).Value = b(.Cells(1, 1).Parent)
    End With
End Sub

Function b(WS As Worksheet)
    b = WS.UsedRange.Row + WS.UsedRange.Rows.Count - 1
End Function

Merci pour vos avis éclairés.
 
Solution
Bonjour
Non. With n'est pas un objet, mais une instruction appliquée à un objet.
Ce bloc With ne peut donc contenir que des membres de l'objet qu'il concerne

Il t'est bien évidemment possible de faire face de plusieurs manières. La plus simple est probablement celle-ci (en utilisant la propriété Name de ta feuille):

VB:
    With ThisWorkbook.Worksheets("Feuil1")
        .Cells(10, 1).Value = "Dernière ligne utilisée de la feuille ->"
        .Cells(10, 4).Value = b(.Name)
    End With

et la fonction (donc transformée) appelée :
VB:
Function b(WS As String) As Long
    b = Worksheets(WS).UsedRange.Row + Worksheets(WS).UsedRange.Rows.Count - 1
End Function
Bonjour
Non. With n'est pas un objet, mais une instruction appliquée à un objet.
Ce bloc With ne peut donc contenir que des membres de l'objet qu'il concerne

Il t'est bien évidemment possible de faire face de plusieurs manières. La plus simple est probablement celle-ci (en utilisant la propriété Name de ta feuille):

VB:
    With ThisWorkbook.Worksheets("Feuil1")
        .Cells(10, 1).Value = "Dernière ligne utilisée de la feuille ->"
        .Cells(10, 4).Value = b(.Name)
    End With

et la fonction (donc transformée) appelée :
VB:
Function b(WS As String) As Long
    b = Worksheets(WS).UsedRange.Row + Worksheets(WS).UsedRange.Rows.Count - 1
End Function
 
Bonjour jmfmarques,

En effet, ta solution est une alternative. Même si dans ce cas, le niveau de qualification "transporté" par l'argument n'inclue plus le Workbook.

D'ailleurs, si j'ai posé la question, je suis plus que sceptique sur l'existence d'une syntaxe dédiée car le "." est fait pour introduire une propriété ou méthode donc seul, il est forcément de trop. Et absent, il ne reste plus rien, et rien c'est pas pas grand chose 😛 !
C'était pour passer le temps 🙄

Confirnement vôtre,
JP

Edit: j'ai parlé de "l'objet With" et il fallait lire évidemment "l'objet introduit par le With"
 
Dernière édition:
- 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

Discussions similaires

Réponses
7
Affichages
185
Réponses
0
Affichages
381
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
507
Retour