[Excel/vba] Indirection semi-automatisée
Résolu
David-M
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
David-M Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
David-M Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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 :
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
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:
- [Excel/vba] Indirection semi-automatisée
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
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:
...
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
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
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
Teste et dis..
eric
edit: les noms de classeurs et de feuilles doivent être encadrés de " " (string) :
=INDIRECT_SAME_CELL("Feuil2";"Classeur2")
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")
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. :-) )
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. :-) )