Se connecter avec
S'enregistrer | Connectez-vous

module et feuille

Dernière réponse : dans Programmation

Hello !

je reviens pour de nouvelles questions. Apres avoir fait toutes ces macros, je m'occupe des userforms.

je voudrais choisir une machine puis cliquer sur detail pour avoir... les details.
donc j'ai crée ma liste, j'ai un bouton "voir" qui renvoie sur la page ou il y auras tt les details, et je voudrais reprendre mes macros...

j'ai essayé :
  1. dim machine as string
  2. machine = ComboBox2.Text ' par exemple machine=café ( 1 des choix dans la liste combobox2 !)
  3. Sheets("detail").Select
  4. If machine = "café" Then fairecafe().Activate
  5. End If


"detail" est un onglet
"café" un texte
fairecafe() est une macro deja implanté (dans le même classeur, dans module 1)

le probleme c'est que pour lui, fairecafe() n'est pas définis

dailleur, j'ai le même probleme si à la place de fairecafe().activate (ou .select) je mets worksheet("moudre cafe").select pour qu'il ouvre l'onglet "moudre cafe" !!

je pense qu'il y a une instruction à rajouter en tête de page pour lui dire de regarder sur les autres feuilles et autres modules.. mais je ne la connais pas.. pourriez vous m'aider ?

Autres pages sur : module feuille

Lassé par la pub ? Créez un compte
Expert Programmation

fairecafe() est une fonction (function) ou une procédure (sub) ?
Est-elle définie en publique ou en privée (public/private) ?
Si c'est une fonction, de quelle type est-elle (Function fairecafé() As <type> ?)

(Evidemment, tu te seras précipité sur les pages d'aide de function, sub, public, private, ...)

bon, reprenons l'exemple le plus simple : l'exemple avec Sheet
  1. Private Sub CommandButton1_Click()
  2.  
  3. machine = ComboBox2.Text
  4. If machine = "MANDELLI 1500" Then Sheet("mandelli").Select
  5. End If
  6.  
  7. End Sub

je mettrais plusieurs if pour chaque "machine".
il me met que la fonction ou la procedure n'est pas définie en parlant de "Sheet" ou "Worksheet...
que je mette private ou public devant. J'avoue que j'ai du mal a suivre...

Je viens d'aller lire les aides sur private et public, donc si je comprend bien, il faudrais que je rajoute public devant les procedures (des modules) que j'utilise dans d'autre "fichiers" (c'est à dire dans les userform ?)

Oui Sheet n'existe pas comme tu l'utilises.
Toi tu veux utiliser la collection et indexer un élément de celle-ci par son nom. La syntaxe est
WorkSheets("mandelli")
Et si tu veux réutiliser souvent cet objet tu peux l'affecter à une variable objet de type WorkSheet, comme ceci :
  1. Dim ws As WorkSheet
  2. Set ws = WorkSheets("mandelli")
Expert Programmation

+1

Précisions:

Sheets existe. C'est l'union des collections Worksheets et Charts. Puisque tu ne traites que des feuilles de calcul, utilise Worksheets comme te le préconise tegu.

merci
j'ai trouver les reponses à mes questions, j'en fait juste part ici pour finir le sujuet.

  1. Private Sub CommandButton1_Click()
  2.  
  3. machine = ComboBox2.Text
  4. If machine = "MANDELLI 1500" Then WorkSheets("mandelli" ).Select
  5.  
  6. End Sub

Quand c'est juste une ligne d'instruction, il n'y a pas besoin de "end if" (j'ai testé et cela fonctionne, j'ai excel 2000)

pour exécuter une procédure (merci ZEb, promis, je lirais plus souvent l'aide... mais je n'avais pas encore trop l'habitude d'y aller...t'inquiète pas, cela finiras par rentrer !!)
  1. If machine = "630T" Then Module1.tableau_630t

avec Module1 la "feuille" ou se trouve la procédure "tableau_630t"
Expert Programmation

Ben voilà. :) 

Petites précisions :
Et si la macro n'est pas dans le même classeur ?
Tu peux utiliser la procédure run. L'exemple de l'aide en ligne est clair. Autre possibilité, "référencer" (menu Outils / Références) dans le classeur cible, le classeur qui contient la macro.
Lassé par la pub ? Créez un compte