Exécuter macro par une fonction

georgeslb

XLDnaute Nouveau
Bonjour,

J'ai besoin d'un coup de main

J'ai une grande série de données Excel. Sur VBA j'ai créé un code qui m'aide à trié les données selon des critères spécifiques et qui permet de créer un tableau avec les données filtrée. Mon problème c'est que j'ai fait ce code dans une fonction pour faciliter la tache de l'utilisateur. Or dans le cadre de la fonction je ne peux pas afficher que la première cellule du tableau filtré. Donc j'ai crée une macro test qui me permet de récupérer les données du tableau sur une feuille mais cette macro n'est pas exécuter automatiquement.

En fait, je souhaite que vous me dites s'il est possible d'exécuter une macro avec une fonction vba.

Voilà mon code:
Dim tableau, cel As Range
Dim i, j, l, k

Function TableauCours(Contrat)
On Error Resume Next

ligtbl = 1
k = ActiveCell.Column
'détection taille du tableau principal
Do
i = 2
l = 0
Do While Cells(i, 1) <> ""
If Cells(i, 2) = Contrat Then
l = l + 1
End If
i = i + 1
Loop
Loop Until Cells(i, 1) = ""
'initialisation du tableau cible
ReDim tableau(1 To l, 1 To 6)

'remplissage du tableau cible avec élément du tableau principal
For n = 2 To i - 1
If Cells(n, 2) = Contrat Then
tableau(ligtbl, 1) = Cells(n, 1)
tableau(ligtbl, 2) = Cells(n, 2)
tableau(ligtbl, 3) = Cells(n, 3)
tableau(ligtbl, 4) = Cells(n, 4)
tableau(ligtbl, 5) = Cells(n, 5)
tableau(ligtbl, 6) = Cells(n, 6)
ligtbl = ligtbl + 1
End If
Next n

'résultat de la fonction
TableauCours = Contrat
'executer le test
TableauCours.Run ("Test")
End Function

Sub Test()
For u = 1 To l
For v = 1 To 6
Cells(ActiveCell.Row + u, ActiveCell.Column + v - 1).Value = tableau(u, v)
'MsgBox tableau(u, v)
Next v
Next u

End Sub
 

tbft

XLDnaute Accro
Re : Exécuter macro par une fonction

Bonjour

Je n'ai pas tout à fait compris ce que tu demandé.
Mais, je sais que si tu veux qu'une fonction "function" renvoi plusieurs résultat, il faut que:
+ elle renvoi un tableau
+ la saisir sur excel comme une fonction matricielle (ctrl+shift+Entrée il me semble)
 

Gorfael

XLDnaute Barbatruc
Re : Exécuter macro par une fonction

Salut georgeslb et le forum
Pas sûr de comprendre le besoin réel, mais...
Dans Excel, il existe deux types de macros :
- Les macros sub : elles peuvent exécuter toutes les instructions, modifier les cellules, etc... Mais il faut déterminer ce qui les lancent
- Les macros Function : Leur seul but est d'effectuer un calcul. Elle peut être considérée comme une fonction (avec application.volatile).

Les functions ne peuvent pas modifier une cellule, un format, etc...
Et si Microsoft a créé deux types, c'est bien parce qu'un seul ne pouvait pas faire le travail...

Pour lancer une macro, il existe des macros à lancement automatique : il suffit juste de trouver l'évènement qui va relancer ta macro. En général c'est Worksheet_Change, avec une instruction filtre, pour limiter le champ de la macro.

Ton code :
- Pourquoi il n'est pas entre des balises "code" ?
- On Error Resume Next : si on a une erreur, on ne s'en occupe pas :eek: ? Comme ça, pas de problème => donc, pas de solution :D.
A+
 

georgeslb

XLDnaute Nouveau
Re : Exécuter macro par une fonction

Bonjour

Je n'ai pas tout à fait compris ce que tu demandé.
Mais, je sais que si tu veux qu'une fonction "function" renvoi plusieurs résultat, il faut que:
+ elle renvoi un tableau
+ la saisir sur excel comme une fonction matricielle (ctrl+shift+Entrée il me semble)


Bonjour et Merci

En fait, j'ai compliqué un peu ma question.
Je vais reformuler :
Peut on faire appel à une macro SUB dans une fonction.
Si oui comment?
Normalement, nous faisons appel à la macro y en mettant le nom de la macro y dans le code de la macro x or dans mon cas ca ne marche pas!

Merci
 

kjin

XLDnaute Barbatruc
Re : Exécuter macro par une fonction

Bonjour,
En fait, j'ai compliqué un peu ma question.
A bien y regarder, il n'y a pas d'explication claire sur le but de la question...
Une procédure peut faire appel à une fonction (qui elle même peut faire appel à d'autres fonctions) pour les traitements intermédiaires, l'inverse n'a aucun sens...!
Je note également ceci...
Function TableauCours(Contrat)
....
TableauCours = Contrat
...
End Function
...pour le moins étonnant
En attendant qq éclaircissements et un bout de fichier peut-être...
A+
kjin
 

Staple1600

XLDnaute Barbatruc
Re : Exécuter macro par une fonction

Bonjour à tous, re sieur kjin

Une procédure peut faire appel à une fonction (qui elle même peut faire appel à d'autres fonctions) pour les traitements intermédiaires, l'inverse n'a aucun sens...!
Ou si sens, il y a, c'est que l'ami georges débute en VBA et comme tous les débutants, il commet des erreurs de débutants ;)
 

georgeslb

XLDnaute Nouveau
Re : Exécuter macro par une fonction

Bonjour,

A bien y regarder, il n'y a pas d'explication claire sur le but de la question...
Une procédure peut faire appel à une fonction (qui elle même peut faire appel à d'autres fonctions) pour les traitements intermédiaires, l'inverse n'a aucun sens...!
Je note également ceci...

...pour le moins étonnant
En attendant qq éclaircissements et un bout de fichier peut-être...
A+
kjin

En effet le résultat de la fonction est un peu bizarre il n'a aucun sens. En fait c'était juste pour essayer de voir si la macro derrière est déclencher.
Pour répondre à Staple non je ne débute pas dans VbA :p (Je parie que je connais plus que toi:D) mais j'essaie de faire des tests parfois.
En fait, Concrètement ca vient d'une truc sur Reuters, une plateforme boursière sur laquelle nous pouvons récupérer des données sur Excel en tapant une fonction (on tape la fonction, on a un historique de cotations). Donc leur fonction renvoie un tableau de cotations en fonction des paramètres et ce n'est pas une matrice puisque nous pouvons changer une valeur. Donc je voulais essayer de faire le même code pour l'instant en vain. mon but est de taper une fonction avec un nom de contrat, une date de début et une date de fin et que VBA cherche dans ma base de données la valeurs correspondant à mes critères. je peux faire ca avec un SUB normal pas de souci mais avec une Function comment le faire. bah, Je compte sur vous.

Merci pour votre aide
 

Staple1600

XLDnaute Barbatruc
Re : Exécuter macro par une fonction

Bonjour


Pour répondre à Staple non je ne débute pas dans VbA :p (Je parie que je connais plus que toi:D) mais j'essaie de faire des tests parfois.
Si tu le dis, ca doit être vrai :rolleyes:

Juste un conseil en passant
Peux-tu rendre ton message plus lisible en utilisant la balise BB adéquate
(Merci pour nos yeux)

(Je parie que je connais plus que toi l'usage de ces balises sur le forum XLD :D )
 

Gorfael

XLDnaute Barbatruc
Re : Exécuter macro par une fonction

Salut georgeslb et le forum
Sans me mêler de vos affaires, penser que tu en sais plus que quelqu'un, à part si tu le connais personnellement réellement... regarde donc ses postes...

Sans prétendre en connaître plus que qui que se soit, est-ce que la macro Change ne pourrait pas suffire (avec un filtre comprenant les antécédents de la fonction) ?
A+
 

Discussions similaires

Réponses
4
Affichages
234

Statistiques des forums

Discussions
312 494
Messages
2 088 960
Membres
103 991
dernier inscrit
Christine 974