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