XL pour MAC Exécuter une macro selon le contenu de une liste déroulante

Valter

XLDnaute Occasionnel
Bonjour le forum, j'ai de nouveau besoin de vous, j'ai fait un petit programme de comptabilité avec ventilation automatique dans chaque compte respectif, j'utilise 1 compte par page, depuis le journal des écritures j'aimerai appeler le compte à consulter par une liste déroulante ou figurent tous les comptes, si je sélectionne le compte no 2, le compte no 2 s'affiche, si je sélectionne le compte no 5, le compte no 5 s'affiche...etc..... j'ai bien une macro qui m'ouvre chaque compte déjà faite, mais comment faire pour que la macro se mette en route selon le résultat de la listé déroulante. Je joins un petit fichier simplifié.... merci pour votre aide (sur le fichier d'exemple il n'y a aucune macro enregistrée)
 

job75

XLDnaute Barbatruc
Bonjour Valter, mapomme, le forum,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$F$6" Then Exit Sub
On Error Resume Next 'si la feuille n'existe pas
With Sheets(CStr(Target))
    .Visible = xlSheetVisible 'si la feuille est masquée
    .Activate
    .[A1].Select
End With
End Sub
Bonne journée.
 

Pièces jointes

  • Fichier d'exemple(1).xlsm
    26 KB · Affichages: 14

Valter

XLDnaute Occasionnel
Super Job 75, cela fonctionne très bien.... cependant j'ai un problème, je n'ai pas pensé de le mentionner, j'aimerai exécuter la macro qui m'ouvre la feuille et qui me la met au premier plan car cette macro exécute des opérations.... dans mon programme j'ai 50 comptes et pour chaque compte j'ai fait une macro qui s'appelle : ouvreCompte1 - ouvreCompte2...etc... y a t'il possibilité dans le code VBA d'ajouter l'exécution de la macro au lieu de faire simplement afficher la feuille.
 

job75

XLDnaute Barbatruc
dans mon programme j'ai 50 comptes et pour chaque compte j'ai fait une macro qui s'appelle : ouvreCompte1 - ouvreCompte2...etc...
Pour lancer chaque macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next 'si la macro n'existe pas
If Target.Address = "$F$6" Then Run "ouvre" & Target
End Sub
Cela dit je suis à peu près sûr que vos 50 macros peuvent être remplacées par une seule macro paramétrée mais puisque vous ne voulez rien nous dire faites comme ça.
 

Valter

XLDnaute Occasionnel
Pas du tout, je n'ai rien a cacher, seulement je n'ai pas pensé donner plus de détails, mais en y pensant bien, la première macro qui m'affiche le compte sélectionné selon liste déroulante, pourrait aussi fonctionner, je peux afficher en premier le compte et ensuite exécuter mes macros. Mais comme vous dites, je pourrai aussi faire une macro qui me permette de tout ramener à un seul compte, je vais y réfléchir car mon fichier excel est déjà très lourd, de toute façon merci pour ce dernier code, il va me rendre bien service.
 

Valter

XLDnaute Occasionnel
Bonsoir, Job75-Mapomme, bonsoir le forum
Je viens de faire un essai du code et cela ne fonctionne pas, justement pour ne pas avoir donné plus de détail, alors je me répète, j'aimerai améliorer un programme de comptabilité ou j'ai 50 feuilles, une feuille par compte, ou se ventilent les écritures passées dans le journal, pour sélectionner mes comptes, j'ai une page ou est inscrit le nom des 50 comptes et en cliquant sur le compte désiré, une macro m'ouvre le compte en exécutant quelque opérations comme : déprotéger la feuille, trier les opérations par date, masquer les lignes vides, reprotégér la feuille.... Or j'aimerai améliorer en mettant une liste déroulante qui me permette d'ouvrir le compté sélectionné, et pouvoir ainsi enlever la page de section de chaque compte. Je joins mon exemple revu et corrigé, ou j'ai reproduit exactement la même situation que sur mon programme de comptabilité. En espérant avoir été beaucoup plus clair cette fois-ci....

La prochaine étape sera de faire une maro (suite a l'idées de job75) qui me permettra de ramener les 50 comptes sur une seule feuille et alléger ainsi mon fichier....je dois encore y réfléchir un peu....
 

job75

XLDnaute Barbatruc
Bonjour Valter, patricktoulon, mapomme,

C'est bien ce que je disais, une seule macro paramétrée suffit :
VB:
Sub ouvreCompte(n%)
    Sheets("Compte" & n).Select
    '--------
End Sub
Elle est appelée par la macro affectée aux 9 boutons :
VB:
Sub Bouton()
Dim t$, i%, n%
t = ActiveSheet.DrawingObjects(Application.Caller).Text
For i = 1 To Len(t)
    If IsNumeric(Mid(t, i, 1)) Then n = Val(Mid(t, i)): Exit For
Next
Call ouvreCompte(n)
End Sub
ou par ce code dans la 1ère feuille (fichier joint) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$6" Then If Target <> "" Then Call ouvreCompte(Application.Match(Target, [F19:F100], 0))
End Sub
A+
 

Pièces jointes

  • AfficheFeuilleséléctionnéeAvecLISTEdéroulante2.xlsm
    44.3 KB · Affichages: 7

Valter

XLDnaute Occasionnel
Bonjour Job75 et ma pomme, bonjour le forum, de retour de quelques jours de vacances je reprend mon programme.
Après bonne réflection j'ai modifié mon petit programme et supprimé les 50 comptes, le fichier était arrivé a 8 mo et était bien trop lourd, j'ai remplacé par une seule feuille quand je sélectionne un numero de compte dans la liste déroulante, tout le compte se compose a l'instant, c'est beaucoup plus rapide et le fichier bien plus léger, bien entendu j'ai une tout autre situation et d'autres problèmes à régler. Je bute actuellement sur effacer la cellule de la colonne A,B,C,E,G,H de la ligne sélectionnée. J'ai récupéré ce code qui sélectionne toute la ligne d'une cellule sélectionnée n'importe ou dans la même ligne : ActiveSheet.Rows(ActiveCell.Row).EntireRow.Select - Je n'arrive pas a le modifier pour que à son exécution il m'efface les cellules des colonnes A,B,C,E,G,H e la ligne selectionnée. merci pour votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof