VBA : Appel de fonction

alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 25 janv. 2008 à 12:04
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 25 janv. 2008 à 14:06
bonjour,




le code VBA Excel suivant fonctionne :




Private Sub Workbook_Open()
 MenuBars(xlWorksheet).Menus.Add Caption:="monMenu"
 MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _
  Caption:="Cacher la ligne.", _
  OnAction:="cacherLigne"
End Sub


Sub cacherLigne()
 Rows(1).Select
 Selection.EntireRow.Hidden = True
End Sub




pourquoi celui-ci ne fonctionne t'il pas ? :


Private Sub Workbook_Open()
 MenuBars(xlWorksheet).Menus.Add Caption:="monMenu"
 MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _
  Caption:="Cacher la ligne 1.", _
                OnAction:="cacherLigne(1)"
End Sub


Sub cacherLigne(ByVal nb as Integer)
 MsgBox nb
 Rows(nb).Select
 Selection.EntireRow.Hidden = True
End Sub


en realite, le "MsgBox nb" fonctionne mais la ligne 1 n'est pas masquee.


sauriez-vous me dire quel est le disfonctionnement du 2eme code et comment le corriger pour qu'il fonctionne ?


merci a vous,




alonsyl

1 réponse

alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 12
25 janv. 2008 à 14:06
je me suis rendu compte que je n'ai probablement pas assez due commenter mon code :

' a l'ouverture du classeur => dans "thisworkbook"
Private Sub Workbook_Open()
' je cree un menu deroulant (a cote de "fichier", "edition", "affichage", ...)
MenuBars(xlWorksheet).Menus.Add Caption:="monMenu"
' j'y adjoint 1 sous-menu
MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _
' sur lequel sera ecrit "Cacher ligne 1."
Caption:="Cacher la ligne 1.", _
' qd on clique sur ce sous-menu, ca lance la procedure cacherLigne (qui se trouve sur un module distinct) en passant en parametre la valeur 1
OnAction:="cacherLigne(1)"
End Sub

' voici la procedure lancee par le sous-menu. il est a noter que la valeur qui etait en parametre est recuperee dans une variable nommee "nb"
Sub cacherLigne(ByVal nb as Integer)
' je verifie par une boite de dialogue que le 1 a bien ete passe en parametre dans la variable "nb"
MsgBox nb
' je supprime la ligne nb (ie la ligne 1)
Rows(nb).EntireRow.Hidden = True
End Sub

dans l'exemple precedent, la commande "MsgBox nb" m'affiche bien une boite de dialogue avec un 1 mais la ligne 1 n'est pas masquee. d'autre part, aucun message d'erreur ou alerte n'est renvoye.

pour trouver d'ou vient le pbl, j'ai egalement essaye le code (plus simple) suivant :
Private Sub Workbook_Open()
MenuBars(xlWorksheet).Menus.Add Caption:="monMenu"
MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _
Caption:="Cacher la ligne.", _
' la difference c'est qu'ici je n'envoie pas de valeur en parametre
OnAction:="cacherLigne"
End Sub

Sub cacherLigne()
' et la, ca marche, la ligne 1 est masquee
Rows(1).EntireRow.Hidden = True
End Sub

c'est la que je suis un peu desabuse : je ne comprends pas pourquoi la procedure fonctionne lorsqu'il n'y a pas de parametre et pourquoi elle ne fonctionne qu'a moitie (MsgBox nb) lorsqu'il y a un parametre.
0
Rejoignez-nous