VBA : Appel de fonction

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

Bonjour,

Corriger ton code :

Sub cacherLigne() 
Dim nb as Integer
MsgBox nb 
Rows(nb).EntireRow.Hidden = True 
End Sub 

Il faut savoir à quoi correspond "nb" et le définir là je ne vois rien. dis moi ...

Amicalement

Dan

desole , 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 1

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 1 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.

re,

Non j'ai compris ton code. Il est bon.

Msgbox te renvoie nb mais je ne vois dans ton code où se trouve nb.

Lorsque tu dis rows(1), c'est la ligne 1 qui est cachée.

Je t'ai demandé avant à quoi correspondait nb.

Si c'est à la ligne sélectionnée tu dois le dire dans ta macro -> nb= activecell.row

si nb est toujours égal à 1, mets nb = 1 dans ta macro "sub cacherligne()"

A te relire

Dan

dans mon code il y a "Rows(nb).EntireRow.Hidden = True ".

je veux que la ligne cachée soit celle designee par nb.

en fait, mon "vrai" code est du genre :

Private Sub Workbook_Open()

MenuBars(xlWorksheet).Menus.Add Caption:="monMenu"

MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _

Caption:="Cacher la ligne 1.", _

OnAction:="cacherLigne(1)"

MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _

Caption:="Cacher la ligne 2.", _

OnAction:="cacherLigne(2)"

MenuBars(xlWorksheet).Menus("monMenu").MenuItems.Add _

Caption:="Cacher la ligne 3.", _

OnAction:="cacherLigne(3)"

End Sub

Sub cacherLigne(ByVal nb as Integer)

Rows(nb).EntireRow.Hidden = True

End Sub

ma question est :

ca marche pas, comment le faire fonctionner ?

merci a toi !

re,

On tourne en rond là....

J'ai l'impression que tu crois que onaction.....cacheligne(1) te cache la ligne 1.

L'instruction ONACTION permet de déclencher une macro. Ici la macro Sub cacheligne(1).

Donc relis ce que je t'ai écrit au sujet de "nb".

A te relire

Dan

Rechercher des sujets similaires à "vba appel fonction"