[Excel/vba] Indirection semi-automatisée

Résolu/Fermé
David-M Messages postés 5 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 16 octobre 2011 - 7 oct. 2011 à 10:07
David-M Messages postés 5 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 16 octobre 2011 - 16 oct. 2011 à 01:40
Bonjour,

Je cale sur la programmation d'une fonction personnalisée.

Ce que je veux faire :
Il existe la fonction INDIRECT qui permet de récupérer la valeur d'une cellule dans une feuille et un classeur donné.
Je voudrais une fonction qui fasse presque la même chose, à savoir renvoyer la valeur de la cellule de mêmes coordonnées que celle où on saisit la formule, mais dans une feuille et un classeur donné.
Donc, si dans la cellule D7, je saisis "=INDIRECT_SAME_CELL("uneautrefeuille"), je veux récupérer la valeur de la celulle D7 de la feuille "uneautrefeuille".
Et si je mets en J23 "=INDIRECT_SAME_CELL("encoreunefeuille","unclasseurquelconque"),
je veux récupérer la valeur de la cellule J23 de la feuille "encoreunefeuille" du classeur "unclasseurquelconque". (J'espère être assez clair dans mes explications. ^^)

Ce que j'ai fait :
Function INDIRECT_SAME_CELL(feuille, Optional classeur = 0)
If (classeur = 0) Then
classeur = ActiveWorkbook.Name
End If

INDIRECT_SAME_CELL = Windows(classeur).Sheets(feuille).Cells(ActiveCell.Col, ActiveCell.Row).Value

End Function


Sauf que bien sûr, ça ne fonctionne pas, alors qu'il ne me semble pas avoir fait d'erreur de syntaxe au premier abord...

(Je précise : Je suis un développeur confirmé, mais je n'ai quasiment jamais fait de vba. Donc autant l'algorithme ne me pose pas problème, autant le langage vba, si. ^^ )

Bref, merci d'avance à toutes les bonnes âmes qui me répondront! :-)

David

A voir également:

4 réponses

David-M Messages postés 5 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 16 octobre 2011
8 oct. 2011 à 13:06
Personne? :S
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié par michel_m le 8/10/2011 à 13:44
Bonjour
en utilisant une feuille excel, tu ne peux pas remplacer une formule (ou fonction) par une valeurou unr formule sans détruire la fonction applelante

il faut alors passer par VBA genre:

public adresse as string
sub xxxxx()
adresse=activecell.address 

activecell=INDIRECT_SAME_CELL(feuille as sheet,classeur as workbook )
.... 


...
attention au chemin si le classeur source n'est pas dans le m^dossier que l'actif
à toi d'adapter et de voir pour l'événement déclencheur...


Michel
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 257
Modifié par eriiic le 8/10/2011 à 21:23
Bonsoir tout le monde,

Michel, je ne pense pas qu'il veuille remplacer, mais que la fonction lui ramène la valeur recherchée.

Je crois que le plus gros pb est activecell.
Ce qui t'interesse est la cellule où est inscrite la fonction, c'est rarement la cellule active.
Il faut utiliser .caller

Function INDIRECT_SAME_CELL(feuille As String, Optional classeur As String) As Variant   
    Dim adr As String   
    Application.Volatile 'la fonction est réévaluée à chaque recalcul de la feuille   
    If classeur = "" Then   
        classeur = ActiveWorkbook.Name   
    End If   
    adr = Application.Caller.Address ' recup adresse cellule appelante   
    INDIRECT_SAME_CELL = Workbooks(classeur).Sheets(feuille).Range(adr).Value   
End Function

Teste et dis..

eric

edit: les noms de classeurs et de feuilles doivent être encadrés de " " (string) :
=INDIRECT_SAME_CELL("Feuil2";"Classeur2")
0
David-M Messages postés 5 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 16 octobre 2011
16 oct. 2011 à 01:40
Bonsoir tout le monde,

Désolé pour cette réponse tardive.

Tout d'abord, merci aux personnes ayant répondu.

And the winner is.... Eriiic! Merci pour ta fonction, c'est ce que je voulais (reste une ou deux touches personnelles à apporter, mais ça, c'est du détail, tu m'as fourni la mécanique, c'est ce qu'il me fallait. :-) )
0