Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 18h37   #1
Invité de passage
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 0
Points : 0
Par défaut Fonction personnalisée - Retourner le résultat dans plusieurs cellules

Bonjour,

Je voudrais écrire une fonction appelable via Excel qui me retournerait un résultat de type "matrice" (plusieurs lignes, plusieurs colonnes). Seulement, j'aimerais n'entrer mon appel à la fonction que dans une SEULE cellule dans Excel (plutôt que de passer par CTRL+SHIFT+ENTREE).

Ex : je tape =test() en A1, et cela inscrit le chiffre 0 en cellules B1,B2,B3.

J'ai lu qu'une fonction appelée via une spreadsheet ne pouvait agir sur d'autres cellules que celle à partir de laquelle cette fonction a été appelée. Seulement, j'ai déjà vu dans certaines API des fonctions qui, appelées dans une seule cellule, affichaient un résultat sur une plage entière de cellules (je parle ici notamment de certaines fonctions Bloomberg for Excel, type BLPH(), qui prennent en arguments le code d'une ou plusieurs actions, une date de début, une date de fin, et retournent l'historique des valeurs de cette(ces) action(s)).

J'ai beau chercher sur différents forums, je suis incapable de trouver une solution. Passer par une procédure appelée par la fonctione elle-même appelée par la spreadsheet ? J'ai l'impression que ça n'est pas possible ...

Merci infiniment pour votre aide précieuse

Rémi
rquilliet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 18h42   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 706
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 706
Points : 3 627
Points : 3 627
Salut, lire ce tuto http://silkyroad.developpez.com/vba/fonctions/
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 23h01   #3
Invité de passage
 
Homme
Développeur décisionnel
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Transports

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 3
Points : 3
bonjour
si la plage oû tu va ecrire le resultat est fixe (non pas paramatre) alors c'est faisable, j'ai deja une sub qui fait ça
sinon , si la plage doit etre entrée en paramatre, dans ce cas tu a exactement le meme probleme que moi, que j'ai posé d'ailleur sur ce forum
mermar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 15h59   #4
Invité de passage
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 0
Points : 0
Merci pour vos réponses.
Mermar, la plage qui sera utilisée par la fonction dépendra des paramètres de la fonction (en fait, les paramètres de la fonction permettront de définir une requête SQL dont je voudrais afficher le résultat).
Sa taille dépendra donc de la requête effectuée ...
Peux-tu coller ta sub histoire que je vois si ça peut régler mon pb ?

En continuant à chercher, voilà ce que j'ai trouvé comme pistes :


Citation:
Since you cannot change the sheet while the UDF is calculating, you
need some way to do the changes after calculation is complete. The
basic plan is to save enough information as a to-do list in some
global state (e.g. a static variable) so that a subsequent update can
make the changes. Among other bits, you'll need xlfCalller to keep
track of which range was called. Then to trigger the update there are
a few plans:
1. Make a separate thread that will call into Excel using the
Automation interface (other threads can't call Excel4/Excel12).

2. Trap the sheet calculate event, then check your to-do list and do
the updates,
3. Set a timer to trigger a macro that does the update (though
xlcTimer does not work from a UDF, so you'd have to use
Application.Timer). Or you could set up a repeated timer based on
xlcTimer from the AutoOpen to poll for work to do. There is some user-
inconvenience from timer-calls though (e.g copy/cut selection is
cleared).

It has been suggested that Bloomberg uses DDE to poke Excel. I don't
know how this would work.
Il semble qu'utiliser l'Automation soit la solution la plus conseillée. Any idea de comment cela pourrait fonctionner ?

Merci encore
rquilliet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 18h28   #5
Invité de passage
 
Homme
Développeur décisionnel
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Transports

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 3
Points : 3
Bonjour
Je pense que tu es aller trop loin avec Automation !
Je comprends pas pourquoi t'a pas mis la partie de ton code qui pose le probleme , ç'est plus facile à comprendre pour pouvoir t'aider
mermar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web