[Déplacé .Net --> VBA] visibilité d'une macro dans tous les worsheets

malouve Messages postés 56 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 20 juillet 2010 - 17 juil. 2009 à 16:49
malouve Messages postés 56 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 20 juillet 2010 - 20 juil. 2009 à 16:10
bonjour,

J'ai finalement reussi à créer mes graphes automatiques tant bien que mal , j'ai aussi créé un bouton afin de la lancer de n'importe quel workbooks mais cela ne marche pas pourtant toutes les macros sont activées.
Avez vous une idée de comment rendre visible ma macro dans n'importe quel workbook?

Merci pour vos réponses

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 juil. 2009 à 17:03
Salut
(merci de penser à utiliser la bonne catégorie)

"ça ne marche pas" ne veut rien dire
Que se passe t-il ? Que ne passe t-il pas ? Quelle erreur rencontres-tu ?

Pour qu'un code puisse être accessible depuis n'importe quelle feuille d'un classeur, il faut :
- Créer un module dans le calsseur
- Mettre le code dans ce module et ajouter le mot "Public" devant sa déclaration
- Fournir au code le nom de la feuille de référence
Exemple (au pif) :
Public Sub monProgramme(NomFeuille As String)
    Sheets(NomFeuille).Select
    MsgBox "Cellule A1 de la feuille " & NomFeuille & " vaut " & CStr(Cells("A1").Value)
End Sub

Et pour l'appeler depuis un bouton, par exemple :
    Call monProgramme("ma feuille")

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
malouve Messages postés 56 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 20 juillet 2010
17 juil. 2009 à 17:23
je suis désolée nde mettre tromper de catégories.
je voulais juste dire que je n'ai pas le résultat escompté
j'ai bien mis mon code dans un module mais je n'avais pas mis le mot 'public'
voici le début de mon code
c'est le main qui est la principale est appelle d'autres procédures et fonction
---------------------------------------
'variables globales
Dim ligntot As Long 'Ligne Total
Dim memopat As Long
Dim nom_feuille As String

Public Sub Main()
On Error GoTo err_main

If CNX_fichier Then Graphe (6)

Exit Sub
err_main:
MsgBox Err.Description
End Sub

Function CNX_fichier() As Boolean 'Connection au fichier
Dim Datas As String, Stockage As String
Dim i As Long
Dim l As Long
'définir le répertoire de stockage des fichiers
Stockage = "C:\Documents and Settings\lme00088\Desktop"
'demande le numéro d'article
Datas = Application.InputBox(prompt:="Entrez le nom du fichier", Type:=2)
If Datas > "" Then
'teste l'existence du fichier avant de l'ouvrir
If Not (Dir$(Stockage & Datas & ".txt", vbDirectory) = "") Then
Workbooks.OpenText Filename:=Stockage & Datas & ".txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar:=".", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
l = Cells.SpecialCells(xlCellTypeLastCell).Row
ligntot = l
'Set sheet = wbExcel.Worksheets(1)
Range("C" & 5 & "").Select
Range("C" & 5 & "") = ligntot
'Range("D" & 5 & "").Select
'Range("D" & 5 & "") = "0.001"
nom_feuille = Datas
Call Valid_condition_Replace(ligntot)
CNX_fichier = True
Else
MsgBox "Fichier " & Stockage & Datas & ".txt" & " non trouvé"
End If
End If

End Function


--------------------------------------
Même avec le mot Public, je ne vois pas la différence
je sais que je ne suis pas très futée mais le nom de la feuille dépend de ce que j'entre au clavier ...
As-tu une idée de comment je pourrai rattraper le coup?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 juil. 2009 à 15:29
Tu ne nous donnes toujours aucune indication sur ce que veut dire "ça marche pas".
Tu dis "avoir créé un bouton pour ..." : Où se trouve le bouton ? sur une feuille ? dans un UserForm ?
Ensuite, tu demandes "comment rendre visible ta macro de n'importe où" : On se dit donc que le problème que tu rencontres est "que tu ne vois pas ta macro depuis une des autres feuilles"
Et on te répond que pour être "visible", il faut que la macro soit dans un module ET déclarée en Public.

Le code que tu nous montres dans ton dernier message est surement très bien, mais on ne sait pas à quoi il sert et ce que tu cherches à faire.
Si tu dois fournir à ta macro le nom de ta feuille au moment ou tu cliques sur ton bouton, il faut bien que tu lui dises. Il faut donc que tu ajoutes un paramètre dans la définition de ta macro pour transmettre cette info. Exemple est donné par ma première réponse.

En regardant ton code :
If Datas > "" Then : audacieux, j'aurai hésité
Dir$(Stockage & Datas & ".txt", vbDirectory) = "" : Si tu recherches un fichier texte, pourquoi lui demander de rechercher un répertoire ?
Range("C" & 5 & "").Select : Comment faire compliqué quand on peut faire simple : Range("C5").Select suffit

Conclusion :
Tant que tu ne nous diras pas :
- où se trouve le bouton
- où tu as besoin du nom de la feuille, dans quelle instruction
- où se trouvent tes macros
- pourquoi tu as utilisé le nom "Main" à une de tes procédures (nom spécial) ET pourquoi tu passes par cette Sub pour en appeler une autre
... on ne pourra rien pour toi.
C'est à toi d'analyser ton propre programme, toi seul connait le cheminement de l'information.
On peut t'aider sur des points précis, pas sur un projet global.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
malouve Messages postés 56 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 20 juillet 2010
19 juil. 2009 à 17:53
Bonjour Jack,

Comme je le disais plus haut mon problème se situe au niveau de la visibilité de ma macro
Je l'ai créé en ouvrant un classeur ensuite un projer Vba que j'ai appelé "trace_log" , dans ce même classeur j'ai créé un bouton à partir du menu développeur , insérer , bouton de commande activeX pour lancer ma macro .
"ce qui ne marche pas" c'est le fait que je n'arrive pas à lancer ma macro dans n'importe quel classeur, j'ai activé toutes les macros mais je n'arrive pas à lancer "le main" c'est ma macro principale.

------------------------------------------------
En regardant ton code :
If Datas > "" Then : audacieux, j'aurai hésité
Dir$(Stockage & Datas & ".txt", vbDirectory) = "" : Si tu recherches un fichier texte, pourquoi lui demander de rechercher un répertoire ?
parce que mon fichier txt se trouve dans un repertoire
Range("C" & 5 & "").Select : Comment faire compliqué quand on peut faire simple : Range("C5").Select suffit
c'est vrai , j'avais changé l'écriture après

Conclusion :
Tant que tu ne nous diras pas :
- où se trouve le bouton
juste dans mon classeur dans lequel j'ai créé la macro
- où tu as besoin du nom de la feuille, dans quelle instruction
j'ai besoin du nom de la feuille pour faire les graphes ( je n'ai pas mis ici le code pour les graphes) , au fait pour ma macro, je n'ai pas de problème , elle me fait ce que je voudrais , c'est juste de pouvoir la lancer de n'importe quel classeur

- où se trouvent tes macros
dans un module

- pourquoi tu as utilisé le nom "Main" à une de tes procédures (nom spécial) ET pourquoi tu passes par cette Sub pour en appeler une autre
... on ne pourra rien pour toi.
juste parce que c'est la principale, est ce que c'est une erreur que de l'utiliser?

C'est à toi d'analyser ton propre programme, toi seul connait le cheminement de l'information.
On peut t'aider sur des points précis, pas sur un projet global.
çà pour cela, je l'avais bien compris, c'est pour cela que je me suis un peu arracher les cheveux pour faire cette macro avec l'aide d'internet , c'est la première fois que j'en fait ...
Le seul point qui me semble être précis dans mes questions , serait de pouvoir lancer ma procédure appelée "Main" d'un classeur vierge par exemple.
J'espère que j'ai été clair pour cette fois.

Je te remercie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juil. 2009 à 09:36
Re
Regarde du côté des macro complémentaires = XLA
(peut-être)
0
malouve Messages postés 56 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 20 juillet 2010
20 juil. 2009 à 16:10
Merci Jack, c'est exactement ce que je cherchais.
Pour ce que çà interesse
Enregistrer le classeur qui contient la macro en "macro comlémentaire ou Add-in" ensuite dans les options excel , allez dans "macro complémentaire", cochez la case activant votre classeur et le tour est joué.
j'ai juste un autre soucis avec les graphes mais je ferrai un autre post pour çà.
encore une fois merci
0
Rejoignez-nous