Simplifier une macro

JP.ROBERT

XLDnaute Nouveau
Bonjour,

Je viens de créer un Userform contenant un certain nombre de boutons correspondant aux mois de l'année.

12 boutons pour l'année 2014, 12 boutons pour l'année 2015 et ce jusqu'à 2020.

Je voudrais que n’apparaissent sur mon Userform que les 12 boutons correspondant a l'année que je sélectionnerai.

J'ai donc actuellement dans l'Initialize de mon l'Userform ceci :

Janvier2014.Visible = True
Fevrier2014.Visible = True
Mars2014.Visible = True
Avril2014.Visible = True
Mai2014.Visible = True
Juin2014.Visible = True
Juillet2014.Visible = True
Aout2014.Visible = True
Septembre2014.Visible = True
Octobre2014.Visible = True
Novembre2014.Visible = True
Decembre2014.Visible = True


Mais ça risque de faire lourd et un peu fastidieux à gérer pour plusieurs années surtout qu'il va me falloir la même chose avec l'option False

Comment peut on simplifier cela ?

Merci

JP
 

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

Bonjour JP, et bienvenue,

Voici un petit classeur en exemple.

Sache qu'il est également possible d'afficher les boutons au même endroit, quelle que soit l'année choisie.

D'autre part, vu le nombre impressionnant de boutons que tu prévois, je pense que l'utilisation d'un module de classe serait justifié.

Ne connaissant pas ton niveau en matière de VBA, le plus simple serait de limiter le nombre de boutons à 12 et de changer leur Caption en fonction de l'année. Il faudrait bien entendu adapter le code de chaque bouton.

Mais ne connaissant pas la finalité de ton programme, il m'est difficile de t'aider davantage pour l'heure. Un fichier en PJ (sans données confidentielles) serait souhaitable.

Bon dimanche.

Cordialement.
 

Pièces jointes

  • Exemple JP Robert.xlsm
    21.3 KB · Affichages: 38

JP.ROBERT

XLDnaute Nouveau
Re : Simplifier une macro

Bonjour Papou-net

Merci pour l'exemple

Concernant mon niveau en VBA il est proche du zéro
En langage jeune on dira que je suis une "quiche" , comme ça c'est dit :)

Je vais essayer d'envoyer un fichier ce sera peut-être plus clair que mes explications
 

Pièces jointes

  • Classeur_JP_ROBERT.xlsm
    252.3 KB · Affichages: 44

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

Bonjour Papou-net

Merci pour l'exemple

Concernant mon niveau en VBA il est proche du zéro
En langage jeune on dira que je suis une "quiche" , comme ça c'est dit :)

Je vais essayer d'envoyer un fichier ce sera peut-être plus clair que mes explications

RE:

Personne n'est une "quiche" lorsqu'il cherche à savoir et c'est ce que tu fais. Comme ça c'est dit :)

Tes explications sont claires, j'ai bien compris le sujet. Mais c'est pour essayer de simplifier la programmation que j'ai besoin de connaître la structure de ton formulaire.

A +

Cordialement.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Simplifier une macro

Bonjour JP.ROBERT, Papou-net :),

Peut-être qu'avec des ListBox, c'est pas mal non plus :rolleyes:
On récupère directement l'année ( ListBox1.Text ou en nombre VAL(ListBox1.Text) ) et le numéro du mois ( ListBox2.listindex+1 ).
 

Pièces jointes

  • JP Robert- Liste de choix- v1.xlsm
    23.6 KB · Affichages: 38
Dernière édition:

JP.ROBERT

XLDnaute Nouveau
Re : Simplifier une macro

Merci mapomme pour cet exemple qui est très intéressant et qui va me servir pour autre chose.

Pour mon classeur actuel j'aimerai conserver l'aspect bouton, juste question de visuel et de cohérence avec le reste du classeur
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

RE:

Pour illustrer mes propos précédents, voici une esquisse de solution écrémée (euh, je veux dire allégée) au niveau du formulaire et du code. Je laisse le soin de comparer.

Par ailleurs, j'aimerais que tu précises la manière de filtrer les données selon le mois choisi, afin de finaliser le code.

Restera ensuite à traiter de la même façon les données annuelles, mais réglons d'abord ce premier chapitre.

Cordialement.

PS: bonjour mapomme
 

Pièces jointes

  • Copie de Classeur_JP_ROBERT.xlsm
    229.6 KB · Affichages: 39

Paf

XLDnaute Barbatruc
Re : Simplifier une macro

Bonjour JP.ROBERT, Papou-net, mapomme

Après être arriver à une solution, je m'aperçois que c'est la même que celle de Papou-net . (Flûte !!)

je mets quand même la sub, que j'avais appelé FiltreMois, qui filtre le tableau du 13 du mois précédent au 12 du mois sélectionné (si j'ai bien compris):

Code:
Private Sub FiltreMois(Mois)
 Dim DateDeb As Long, DateFin As Long
 DateDeb = DateSerial(ComboBox1, Mois - 1, 13)
 DateFin = DateSerial(ComboBox1, Mois, 12)
 Worksheets("Prepaye").Range("$A$3:$AJ$2015").AutoFilter Field:=1, Criteria1:=">=" & DateDeb, Operator:=xlAnd _
        , Criteria2:="<=" & DateFin
End Sub

A+
 

JP.ROBERT

XLDnaute Nouveau
Re : Simplifier une macro

Génial cette version.
Tu peux le dire c'est vraiment allégé, il va falloir que j'étudie ça de plus près.

Concernant la manière de filtrer les données c'est très simple :

Pour chaque mois sélectionné la période prise en compte va du 13 du mois précédent au 12 du mois en cours correspondant à l'année choisie.

Exemple :

je clic sur Janvier 2014

Le filtre prend en compte la période allant du 13 Décembre 2013 au 12 Janvier 2014

je clic sur Février 2014

Le filtre prend en compte la période allant du 13 Janvier 2014 au 12 Février 2014

et ainsi de suite


Sinon, il y a 2 boutons sur mon formulaire ( juste la pendant la phase de test ) qui me servent à afficher ou masquer le ruban de la page excel , mais est-il possible de masquer aussi les entêtes de lignes et de colonnes ?
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

RE:

Voici la copie 01 fonctionnelle.

Merci à Paf (que je salue au passage) pour son module de filtre dont je me suis inspiré, pour ne pas dire plagié.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Copie 01 de Classeur_JP_ROBERT.xlsm
    221.7 KB · Affichages: 33

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

Oups, j'ai oublié de répondre à cette question.

Sinon, il y a 2 boutons sur mon formulaire ( juste la pendant la phase de test ) qui me servent à afficher ou masquer le ruban de la page excel , mais est-il possible de masquer aussi les entêtes de lignes et de colonnes ?
Voilà qui est fait.

Code:
Private Sub CommandButton1_Click()
Application.DisplayFullScreen = False
ActiveWindow.DisplayHeadings = True
End Sub

Private Sub CommandButton2_Click()
Application.DisplayFullScreen = True
ActiveWindow.DisplayHeadings = False
End Sub
Cordialement.
 

JP.ROBERT

XLDnaute Nouveau
Re : Simplifier une macro

Bonjour,

Un grand merci Papou-net pour cette aide précieuse, ça fonctionne parfaitement bien.
Il ne me reste plus qu'à essayer de comprendre le code, ce qui n'est pas encore le cas pour le moment. Mais je vais regarder ça de plus près
 

Papou-net

XLDnaute Barbatruc
Re : Simplifier une macro

Il ne me reste plus qu'à essayer de comprendre le code, ce qui n'est pas encore le cas pour le moment. Mais je vais regarder ça de plus près

Bonjour JP.ROBERT,

La structure du programme n'a rien de très compliqué mais pour t'aider à la compréhension, je te joins une nouvelle copie avec le code commenté.

Tu trouveras des détails concernant le formulaire sur le deuxième onglet.

A ta disposition si tu as d'autres questions.

Cordialement.
 

Pièces jointes

  • Copie commentée de Classeur_JP_ROBERT.xlsm
    509.8 KB · Affichages: 54

JP.ROBERT

XLDnaute Nouveau
Re : Simplifier une macro

Bonjour

Merci pour la copie commentée

J'ai un petit souci que j'espère résoudre bientôt en fouillant un peu.
J'ai recopié ton code dans mon programme principal mais malheureusement j'ai un message d'erreur.

Message d'erreur Variable non définie concernant la variable a et ctl

Je cherche ..
 

Statistiques des forums

Discussions
311 711
Messages
2 081 782
Membres
101 817
dernier inscrit
carvajal