Macro calendrier de saisie
Résolu
surplus
Messages postés
673
Date d'inscription
Statut
Membre
Dernière intervention
-
surplus Messages postés 673 Date d'inscription Statut Membre Dernière intervention -
surplus Messages postés 673 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j ai trouvé une macro d'eric que je voudrais adapter si possible de sélectionner des plages au lieu de colonnes car iil me la faudrait sur plusieurs colonnes et lignes de la même page si quelqu'un pourrait la modifier pour cela
.............................................................................................................................................
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' si la sélection sur la feuille change (target est la référence de la sélection)
If Target.Column <> 1 Or Target.Row < 9 Or Target.Cells.Count > 1 Then
'si la colonne <>3 (C) ou la ligne <2 ou la sélection fait plus d'1 cellule
Calendar1.Visible = False
'alors on cache le calendrier
Exit Sub
Else
'sinon
Calendar1.Top = Target.Offset(1, 0).Top + 2
' aligner le calendrier avec le haut de la cellule en dessous
Calendar1.Left = Target.Left + 10
' l'aligner à gauche de la cellule
'Calendar1.LinkedCell = Target.Address
' mettre la cellule liée au contrôle sur la cellule sélectionnée
If IsDate(Target.Value) Then
'si la cellule sélectionnée contient une date
Calendar1.Value = Target.Value
' la récupérer
Else
' sinon mettre la date du jour
Calendar1.Value = Date
End If
Calendar1.Visible = True
'afficher le calendrier
End If
End Sub
merci
j ai trouvé une macro d'eric que je voudrais adapter si possible de sélectionner des plages au lieu de colonnes car iil me la faudrait sur plusieurs colonnes et lignes de la même page si quelqu'un pourrait la modifier pour cela
.............................................................................................................................................
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' si la sélection sur la feuille change (target est la référence de la sélection)
If Target.Column <> 1 Or Target.Row < 9 Or Target.Cells.Count > 1 Then
'si la colonne <>3 (C) ou la ligne <2 ou la sélection fait plus d'1 cellule
Calendar1.Visible = False
'alors on cache le calendrier
Exit Sub
Else
'sinon
Calendar1.Top = Target.Offset(1, 0).Top + 2
' aligner le calendrier avec le haut de la cellule en dessous
Calendar1.Left = Target.Left + 10
' l'aligner à gauche de la cellule
'Calendar1.LinkedCell = Target.Address
' mettre la cellule liée au contrôle sur la cellule sélectionnée
If IsDate(Target.Value) Then
'si la cellule sélectionnée contient une date
Calendar1.Value = Target.Value
' la récupérer
Else
' sinon mettre la date du jour
Calendar1.Value = Date
End If
Calendar1.Visible = True
'afficher le calendrier
End If
End Sub
merci
A voir également:
- Macro calendrier de saisie
- Mon calendrier - Télécharger - Santé & Bien-être
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Saisie gestuelle iphone - Guide
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Calendrier partagé google - Guide
7 réponses
Bonjour,
Une autre solution, faites donc un petit crochet chez mDF : http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=28
Une autre solution, faites donc un petit crochet chez mDF : http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=28
Bonjour,
pour 3 plages définies dans cette ligne :
If Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20]))...
Quand tu colles un code mets-le en entier pour qu'il soit fonctionnel pour les lecteurs suivants...
Jette un oeil aussi à la très belle réalisation de mDF proposée par Le Pingou
eric
pour 3 plages définies dans cette ligne :
If Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20]))...
Private Sub Calendar1_Click() ActiveCell = Calendar1 End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' si la sélection sur la feuille change (target est la référence de la sélection) If Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20])) Is Nothing Or Target.Cells.Count > 1 Then 'alors on cache le calendrier Calendar1.Visible = False Exit Sub Else 'sinon Calendar1.Top = Target.Offset(1, 0).Top + 2 ' aligner le calendrier avec le haut de la cellule en dessous Calendar1.Left = Target.Left + 1 ' l'aligner à gauche de la cellule 'Calendar1.LinkedCell = Target.Address ' mettre la cellule liée au contrôle sur la cellule sélectionnée If IsDate(Target.Value) Then 'si la cellule sélectionnée contient une date Calendar1.Value = Target.Value ' la récupérer Else ' sinon mettre la date du jour Calendar1.Value = Date End If Calendar1.Visible = True 'afficher le calendrier End If End Sub
Quand tu colles un code mets-le en entier pour qu'il soit fonctionnel pour les lecteurs suivants...
Jette un oeil aussi à la très belle réalisation de mDF proposée par Le Pingou
eric
bonjour
il faut faire clic droit + G pour entrer la date c'est plus court clic sur cellule et que le calendrier apparaisse j'ai déjà cet utilitaire il ne convient pas a mon projet
toujours en attente d'autres solutions
merci
il faut faire clic droit + G pour entrer la date c'est plus court clic sur cellule et que le calendrier apparaisse j'ai déjà cet utilitaire il ne convient pas a mon projet
toujours en attente d'autres solutions
merci
bonjour
merci de ta réponse mais le code manquant je pensais qu'il est destiné au bouton appelant le calendrier ou je me trompe?
merci
a bientôt
merci de ta réponse mais le code manquant je pensais qu'il est destiné au bouton appelant le calendrier ou je me trompe?
merci
a bientôt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour
la macro fonctionne pas il me dit
erreur de compilation
argument non facultatif
et il met Union en bleue
je travaille avec excel 2007 si cela peut varier
merci
la macro fonctionne pas il me dit
erreur de compilation
argument non facultatif
et il met Union en bleue
je travaille avec excel 2007 si cela peut varier
merci
Bonjour,
Je viens de contrôler la procédure d'eriiic (salutations) qui fonctionne parfaitement.
Contrôler que la ligne d'instruction soit identique à celle du message d'eriiic !
If Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20])) Is Nothing Or Target.Cells.Count > 1 Then
Petite remarque sur la fonction de MDF, si vous regardez bien les options, cocher la case [Auto détect] et ainsi dès que vous cliquez la cellule au format date le calendrier s'active pas besoin du clic droit + G.
Salutations.
Le Pingou
Je viens de contrôler la procédure d'eriiic (salutations) qui fonctionne parfaitement.
Contrôler que la ligne d'instruction soit identique à celle du message d'eriiic !
If Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20])) Is Nothing Or Target.Cells.Count > 1 Then
Petite remarque sur la fonction de MDF, si vous regardez bien les options, cocher la case [Auto détect] et ainsi dès que vous cliquez la cellule au format date le calendrier s'active pas besoin du clic droit + G.
Salutations.
Le Pingou
bonsoir
autant pour moi le copier coller ne fonctionnait pas bien j'ai saisi les cellules a la main et c'est ok
par contre un autre soucis se présente sur mon calendrier fait avec excel pas autre la saisie me donne 1 jour de moins que sélectionné et année 2016 au lieu de 12
j ai eu beau generer un autre calendrier voir les options elles paraissent bonnes
une solution?
merci
autant pour moi le copier coller ne fonctionnait pas bien j'ai saisi les cellules a la main et c'est ok
par contre un autre soucis se présente sur mon calendrier fait avec excel pas autre la saisie me donne 1 jour de moins que sélectionné et année 2016 au lieu de 12
j ai eu beau generer un autre calendrier voir les options elles paraissent bonnes
une solution?
merci
Re,
argument non facultatif : tu ne mets pas ce qu'il faut dans les parenthèses.
Qui dit union, dit 2 plages au moins. Si tu n'en as qu'une ne pas faire union mais :
If Intersect(Target, [B6:C10]) Is Nothing Or Target.Cells.Count > 1 Then
....
le classeur de test : https://www.cjoint.com/?BEAxCmH5AOj
eric
PS: regarde aussi la remarque interessante de le pingou au dessus
argument non facultatif : tu ne mets pas ce qu'il faut dans les parenthèses.
Qui dit union, dit 2 plages au moins. Si tu n'en as qu'une ne pas faire union mais :
If Intersect(Target, [B6:C10]) Is Nothing Or Target.Cells.Count > 1 Then
....
le classeur de test : https://www.cjoint.com/?BEAxCmH5AOj
eric
PS: regarde aussi la remarque interessante de le pingou au dessus
re
excuse je voulais m'adresser a toi je connais pas bien le systeme du forum
j ai vu mon soucis c'est qu'en fait je n'ai que la place de 30 plages a mettre alors qu'il m'en faudrait 36 jusqu'à 30 ça marche a 31 ça coince
et pour le calendrier qui me donne pas la bonne date
une idée?
ou je dois ouvrir un autre post?
merci
excuse je voulais m'adresser a toi je connais pas bien le systeme du forum
j ai vu mon soucis c'est qu'en fait je n'ai que la place de 30 plages a mettre alors qu'il m'en faudrait 36 jusqu'à 30 ça marche a 31 ça coince
et pour le calendrier qui me donne pas la bonne date
une idée?
ou je dois ouvrir un autre post?
merci
Bonjour,
il faut changer un peu la structure.
ou bien tester si on a affaire à une date et réagir à toutes les dates sans lister les plages.
eric
il faut changer un peu la structure.
Private Sub Calendar1_Click() ActiveCell = Calendar1 End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ok As Boolean ' si la sélection sur la feuille change (target est la référence de la sélection) ok = Not Intersect(Target, Union([B6:C10], [F6:H10], [B15:B20])) Is Nothing ' si plus de 30 plages ok = ok Or Not Intersect(Target, Union([E6:E10], [K6:K10])) Is Nothing ok = ok And Target.Cells.Count = 1 ' If Not ok Then 'alors on cache le calendrier Calendar1.Visible = False Exit Sub Else 'sinon Calendar1.Top = Target.Offset(1, 0).Top + 2 ' aligner le calendrier avec le haut de la cellule en dessous Calendar1.Left = Target.Left + 1 ' l'aligner à gauche de la cellule 'Calendar1.LinkedCell = Target.Address ' mettre la cellule liée au contrôle sur la cellule sélectionnée If IsDate(Target.Value) Then 'si la cellule sélectionnée contient une date Calendar1.Value = Target.Value ' la récupérer Else ' sinon mettre la date du jour Calendar1.Value = Date End If Calendar1.Visible = True 'afficher le calendrier End If End Sub
ou bien tester si on a affaire à une date et réagir à toutes les dates sans lister les plages.
eric
bonjour
ça marche super merci de ta science
pour ma connaissance
faut il utiliser le calendrier 1904 ou pas?
j ai commencé un classeur avec si je le décoche j ai une différence de 4 ans avec le calend1 je dois refaire toutes mes dates ou une autre solution?
merci de ton aide précieuse sur ce coup
a bientot
ça marche super merci de ta science
pour ma connaissance
faut il utiliser le calendrier 1904 ou pas?
j ai commencé un classeur avec si je le décoche j ai une différence de 4 ans avec le calend1 je dois refaire toutes mes dates ou une autre solution?
merci de ton aide précieuse sur ce coup
a bientot
Le calendrier 1904 est à éviter tant que possible sur windows.
Son seul intérêt est de ne pas bugger sur l'affichage d'heures négatives, et ce n'est pas forcément toujours la meilleure solution.
C'est la valeur par défaut pour les mac et a été ajouté dans les options pour la compatibilité avec eux.
Ceci dit si tu as beaucoup de dates ça parait délicat de les reprendre sans erreur...
et jongler sur les 2 options est à coup à faire des cagades dont on se rend compte que trop tard.
eric
Son seul intérêt est de ne pas bugger sur l'affichage d'heures négatives, et ce n'est pas forcément toujours la meilleure solution.
C'est la valeur par défaut pour les mac et a été ajouté dans les options pour la compatibilité avec eux.
Ceci dit si tu as beaucoup de dates ça parait délicat de les reprendre sans erreur...
et jongler sur les 2 options est à coup à faire des cagades dont on se rend compte que trop tard.
eric