Appliquer une macro à tout le classeur

Résolu/Fermé
Pimpoye Messages postés 87 Date d'inscription dimanche 5 juillet 2009 Statut Membre Dernière intervention 12 mars 2014 - 12 mars 2014 à 00:52
Pimpoye Messages postés 87 Date d'inscription dimanche 5 juillet 2009 Statut Membre Dernière intervention 12 mars 2014 - 12 mars 2014 à 12:56
Bonjour,

J'ai une macro qui me permet de mettre une date dans une cellule via un calendrier (plus pratique qu'une liste)
Ma question, comment appliquer cette macro à tout le classeur qui est composé de 12 feuilles identiques (12 mois)

Voici la macro (qui n'est pas de moi, merci à son auteur) :

Sub Calendar1_Click()
' Met la date sélectionnée dans la cellule active
ActiveCell.Value = Calendar1.Value
' Masque le calendrier
Calendar1.Visible = False
End Sub

Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row >= 3 And Target.Row <= 24 Then
' Si la cellule sélectionnée est dans la plage qu'on veut lier au calendrier,
' on affiche le calendrier
Calendar1.Visible = True
' Place le calendrier à côté de la cellule
Calendar1.Top = ActiveCell.Top
Calendar1.Left = ActiveCell.Left + ActiveCell.Width
Else
' Sinon, on masque le calendrier
Calendar1.Visible = False

If Target.Column = 8 And Target.Row >= 3 And Target.Row <= 24 Then
' Si la cellule sélectionnée est dans la plage qu'on veut lier au calendrier,
' on affiche le calendrier
Calendar1.Visible = True
' Place le calendrier à côté de la cellule
Calendar1.Top = ActiveCell.Top
Calendar1.Left = ActiveCell.Left + ActiveCell.Width
Else
' Sinon, on masque le calendrier
Calendar1.Visible = False
End If
End If
End Sub

Merci à toutes les bonnes ames pour leur aide.

4 réponses

via55 Messages postés 13896 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 6 octobre 2022 2 495
12 mars 2014 à 01:11
Bonjour

Cette macro est dans la Worksheet de la 1ere feuille

Il te suffit de la copier et de la coller 11 fois dans le worksheet de chacune des 11 autres feuilles

Cdlmnt
0
eriiic Messages postés 24453 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 4 octobre 2022 7 138
12 mars 2014 à 01:19
Bonjour à tous,

ou bien dans ThisWorkbook utiliser :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
....
End Sub 

Sh te passe l'objet feuille de l'évènement.
Tu peux tester sh.name si tu veux le restreindre à quelques feuilles.

eric
0
Pimpoye Messages postés 87 Date d'inscription dimanche 5 juillet 2009 Statut Membre Dernière intervention 12 mars 2014 3
Modifié par Pimpoye le 12/03/2014 à 09:09
Bonjour,

La première solution comme la deuxième me donne la même erreur que je suis incapable de résoudre.

Erreur 424 sur cette ligne : Calendar1.Visible = False

Merci et encore merci d'une nouvelle aide.
0
eriiic Messages postés 24453 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 4 octobre 2022 7 138
12 mars 2014 à 10:18
Bonjour,
Tu devrais le mettre dans un formulaire et afficher ce formulaire, ça évitera d'être lié à la feuille.

Par ailleurs je te déconseille d'utiliser les contrôles calendrier de microsoft. Selon la version d'excel installée il peut très bien ne pas être présent (moi je ne l'ai pas exemple), et c'est une bagarre sans fin à chaque fois si tu changes de version ou si tu dois l'installer sur plusieurs postes.
Intègre dans ton code un formulaire de sélection de date, comme celui de gb par exemple : https://www.cjoint.com/?DCmkomfE7Xb
Ou bien installe sur les postes mDF XLcalendar, très performant et joli.

Ensuite si tu as toujours des soucis n'oublie pas de joindre ton fichier réduit au nécessaire.
Déposer le fichier xls sur cjoint.com et coller ici le lien fourni.

eric
0
Pimpoye Messages postés 87 Date d'inscription dimanche 5 juillet 2009 Statut Membre Dernière intervention 12 mars 2014 3
12 mars 2014 à 12:56
Bonjour et merci pour vos réponses.

Eric, je ne comprends pas ta solution mais je te remercie de t'être penché sur mon cas.

J'ai repris la solution de via55 (qui me parait la plus simple à mon niveau VBA) et j'ai finalement trouvé la solution de l'erreur.
Il faut créer un calendrier par page avec des numéros différents.
Ensuite, il suffit de copier/coller et de changer le numéro du calendrier en rapport avec la page.

Merci à tous et à bientôt pour d'autres questions (et oui, je me lance dans le VBA, pas d'inquiétude, j'ai du stock en aspirine).
0