Un module unique pour toutes les feuilles

chiller

XLDnaute Nouveau
Bonjour à tous,

Je débute sous VB et je dois avouer que je commence à y prendre gout. :)
Mais depuis quelques jours maintenant, je ne parviens pas à résoudre un problème qui a l'air tout simple en apparence :

J'ai un classeur avec 53 feuilles qui représentent les 53 semaines de l'année. Ces 53 feuilles sont totalement identiques : on y trouve un tableau avec plusieurs boutons cliquables (des commandButton) qui ont simplement pour rôle d'incrementer la valeur d'une cellule de 1 au clic de l'utilisateur (la cellule incrémentée change automatiquement en fonction du jour de la semaine).

Plutot que de repeter le même code pour toutes mes feuilles (j'ai essayé cette solution : le fichier fait ce que je veux mais est très lent à l'ouverture et à la sauvegarde), j'ai donc crée un seul module avec tout mon code à l'intérieur, module qui est sensé s'appliquer à n'importe quel feuille active pour incrementer la cellule concernée au clic de l'utilisateur sur le bouton. Le probleme, c'est qu'au clic sur un bouton, il ne se passe rien : la cellule n'est pas incrémentée. En revanche, lorsque je suis sous l'editeur Visual Basic et que je clique sur le bouton "Executer sub/userform" la cellule est correctement incrémentée.

Pouvez-vous svp éclairer ma lanterne ?
Merci d'avance!


PS : Je travaille sous EXCEL 2002
 

Pièces jointes

  • pour_forum.zip
    15.4 KB · Affichages: 28
C

Compte Supprimé 979

Guest
Re : Un module unique pour toutes les feuilles

Bonjour Chiller et bienvenue sur le forum ;)

Pour pouvoir déclencher le code d'un bouton, il faut lui attribuer celui-ci

Donc dans le module que tu as créé, il faut modifier le code comme suit
Code:
Sub DossiersOuverts()
  Cells(9, TrouveNumDeCol()).Value = Cells(9, TrouveNumDeCol()).Value + 1
End Sub
Sub Classement()
  Cells(12, TrouveNumDeCol()).Value = Cells(12, TrouveNumDeCol()).Value + 1
End Sub
Sub Amiable()
  Cells(13, TrouveNumDeCol()).Value = Cells(13, TrouveNumDeCol()).Value + 1
End Sub
Sub Procedure()
  Cells(14, TrouveNumDeCol()).Value = Cells(14, TrouveNumDeCol()).Value + 1
End Sub
Public Function TrouveNumDeCol() As Integer
    If Weekday(Date) = 2 Then
        TrouveNumDeCol = 3
    ElseIf Weekday(Date) = 3 Then
        TrouveNumDeCol = 4
    ElseIf Weekday(Date) = 4 Then
        TrouveNumDeCol = 5
    ElseIf Weekday(Date) = 5 Then
        TrouveNumDeCol = 6
    ElseIf Weekday(Date) = 6 Then
        TrouveNumDeCol = 7
    Else: TrouveNumDeCol = 8
    End If
End Function

En revanche dans chaque feuille, ce qui donc, ne va rien changer à ton problème de départ, il faut appeler les procédures pour chaque bouton

Code:
Private Sub BoutonAmiable_Click()
  Call Amiable
End Sub
Private Sub BoutonClassement_Click()
  Call Classement
End Sub
Private Sub BoutonDossiersOuverts_Click()
  Call DossiersOuverts
End Sub
Private Sub BoutonProcedure_Click()
  Call Procedure
End Sub

A+
 

Pièces jointes

  • Chiller_pour_forum.xls
    48 KB · Affichages: 50
Dernière modification par un modérateur:

chiller

XLDnaute Nouveau
Re : Un module unique pour toutes les feuilles

Bonjour BrunoM45, et merci de ta réponse. :)
J'avais déjà testé cette solution. Il est vrai que le code est plus léger sur chaque feuille mais la lenteur à l'ouverture et à l'enregistrement se fait tout de même bien sentir. :(

Bonjout, carcharodon-carcharias.
Merci de m'avoir répondu, mais je n'ai pas vraiment compris ce que tu voulais dire.

Si vous avez d'autres solutions, je suis preneur.
 

youky(BJ)

XLDnaute Barbatruc
Re : Un module unique pour toutes les feuilles

Bonsoir à tous,
J'ai pris l'habitude de travailler avec des menus temporaires
en voici un bon exemple dans ce fichier, plus aucun bouton.
Ce menu flottant est détruit à la fermeture
Pour 1 ko j'ai été obligé de zipper
 

Pièces jointes

  • pour_forum2.zip
    14 KB · Affichages: 26

chiller

XLDnaute Nouveau
Re : Un module unique pour toutes les feuilles

Bonjour,

Merci à carcharodon-carcharias et youky(BJ) pour vos propositions.
Utiliser un userform (ou un menu flottant) semble donc la seule solution.

Je ne voulais pas vraiment en arriver là car d'abord, le tableau que j'ai posté en exemple est en fait un peu plus fourni (au total, il y a normalement une trentaine de lignes, et donc de boutons par feuille). Et les boutons tels qu'ils étaient disposés me semblaient plus pratiques et intuitifs à l'utilisation qu'un userform. Ensuite, il faut savoir que jusqu'à présent, ce tableau était imprimé hebdomadairement et complété à la main, car ses utilisateurs ne sont pas vraiment familiarisés à la pratique d'excel. Donc, je voulais faire le plus simple et clair possible pour eux et les boutons, de part leur position fixe et leur proximité par rapport aux intitulés des lignes du tableau, semblaient remplir ces exigences pour moi.

Donc, histoire de bien enfoncer le clou ( ;) ), confirmez-vous qu'il est impossible de faire ce que je veux en utilisant des boutons ?
Dans l'affirmative, est-il envisageable d'obtenir un positionnement de l'userform similaire a celui que j'avais mis en place pour mes boutons ??
 
Dernière édition:

Ubot303

XLDnaute Occasionnel
Re : Un module unique pour toutes les feuilles

Bonjour à tous,

Je prend le fil un peu en marche :)
Pour moi, il suffirai de dupliquer l'onglet et de copier-coller le code VB.
Cherches-tu à optimiser deux clics et un ctrlc ctrlv?

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet