<p>Comment puis-je obtenir la cellule depuis laquelle ma fonction VBA est appelée ?</p>
<p>En d’autres termes, quel est l’équivalent VBA de INDIRECT(ROW(), COLUMN()) ?</p>
<p>Je ne cherche <em>pas</em> <strong>ActiveCell</strong>.</p>
<p>Ce que je veux faire, c’est avoir une simple fonction <code>ThisRow_Col(rColumn As String)</code> qui retourne la colonne X de la ligne depuis laquelle elle est appelée. Par exemple, en B2, j’appelle =ThisRow_Col(“A”), elle devrait retourner la valeur de A2. Cela devrait fonctionner quelle que soit la cellule active.</p>
<p><strong>EDIT</strong> : Merci Charles pour la réponse : <strong>Application.Caller</strong>. Le code suivant obtient la colonne X de la ligne courante, indépendamment de l’endroit où se trouve la sélection :</p>
<pre><code class="lang-auto">Function ThisRow_Col(rColumn As Range)
' Return INDIRECT(rcolumn & ROW())
ThisRow_Col = Application.Caller.Worksheet.Cells(Application.Caller.Row, rColumn.Column).Value
End Function
</code></pre>
<p>Notez que passer la colonne en tant que Range (<code>ThisRow_Col(A1)</code>) est préférable à la passer en tant que chaîne, car Excel peut automatiquement mettre à jour les formules si vous déplacez ou insérez des colonnes. Bien sûr, la ligne <code>1</code> de <code>A1</code> est juste une convention.</p>