Datepicker - Dans la colonne d'un tableau
Bonjour,
Je cherchais une solution pour utiliser un datepicker et je suis finalement arrivé ici ^^
Disposant de Office365 en 64bits, impossible de faire sans la solution (fonctionnelle !!!) évoqué sur votre page : https://www.excel-pratique.com/fr/fonctions-complementaires/date-picker
Tout est en place et un rapide petit essai est concluant.
Merci beaucoup pour ce pack !
Alors personnelement, n'aillant pas les aptitudes nécessaires pour adapter le code donné en exemple aux besoins que j'ai, je sollicite votre aide afin que le code VBA s'applique, dès lors que l'on double clic sur une colonne entière. Plus précisément, sur les cellules d'une colonne contenues dans un tableau (donc identifiable par une en-tête).
Voici le code de départ :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$A$1" Then 'Si cellule A1
Cancel = True
maDate = datePicker(Range("A1"))
If maDate <> "" Then 'Si date choisie par l'utilisateur
Range("A1") = maDate
End If
End If
End SubIdéalement, remplacer la référence absolue A1 par l'étiquette de ma colonne. Au pire, une plage du style A1:A9 fera l'affaire.
J'ai essayé mais sans succès :(
Merci beaucoup pour votre aide.
En vous souhaitant, une bien bonne nouvelle année 2022.
Bonjour,
Voici le principe avec la référence à adapter (Tableau est le nom du tableau, Colonne le nom de la colonne) :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If not intersect(Target, range("Tableau[Colonne]")) is nothing Then 'Si cellule A1
Cancel = True
maDate = datePicker(target)
If maDate <> "" Then target = maDate
End If
End SubTrès bon réveillon et excellente année 2022 à vous !
Cdlt,
Par contre, un petit "effet indésirable" :
Avec le code précédement adapté, dès le double clic dans une cellule, la date du jour s'inscrit, même si l'on ne valide pas notre choix dans le calendrier.
Alors que de base(code initial), la cellule reste vide tant que notre choix n'est pas validé. Comportement que je préfère car il évite de remplir des cases que l'on ne souhaite pas forcement...
Bonjour Gotcha et tous mes voeux pour cette nouvelle année !
Je n'ai rien changé de particulier à ce niveau là. Avant, c'était la valeur de A1 qui rentrait en argument du datepicker et maintenant, c'est la cellule cliquée qui appartient à la colonne définie.
Je ne connais pas la fonction datepicker donc je ne saurais pas expliquer le résultat mais j'imagine qu'il dépend de la valeur rentrée en argument.
Cdlt,
Par défaut, le contenu dans la cellule cliqué est pris en compte pour définir la date du datepicker. Si le contenu est vide, la date du jour est utilisé dans le datepicker MAIS rien n'est inscrit dans la dite-cellule tant que la validation du datepicker n'est pas effective.
Autrement dit, il est tout à fait possible de double-cliquer sur une cellule qui contient déjà une date (différente du celle du jour d'aujourd'hui) ce qui ouvre le datepicker centré sur cette date, de pouvoir naviguer dans le calendrier et refermer se dernier sans valider et sans avoir modifié la valeur initial de la dite cellule.
Peut-être manque t-il un petit système de prise en compte de la valeur de la cellule dans votre code @3GB pour venir compenser cette différente ?
Merci
C'est bon j'ai trouvé la solution :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("Tableau_des_commandes[Livraison prévue le]")) Is Nothing Then
Cancel = True
maDate = datePicker(Target.Value, 2, , 1, "Date de livraison")
If maDate <> "" Then
Target.Value = maDate
End If
End If
End SubIl fallait pointer sur "Target.Value" et non simplement "Target"
Encore merci pour votre aide @3GB !!!
Pour un tout petit peu plus loin, j'ai voulu pousser le vis pour ajouter la fonctionnalité du datepicker toujours dans la même feuille mais dans une seconde colonne également, le tout, avec une personnalisation qui diffère légèrement.
Du coup, voici le code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
'
' Permet d'insérer un "date-picker" dans une colonne. ATTENTION à bien installer et activer tout ce qu'il faut sur les postes de travail de manière identique !
'
' Source : https://www.excel-pratique.com/fr/fonctions-complementaires/date-picker
' Forum : https://forum.excel-pratique.com/s/goto/1028248
If Not Application.Intersect(Target, Range("Tableau_des_commandes[Livraison prévue le]")) Is Nothing Then
Cancel = True
maDate = datePicker(Target.Value, 2, 1, 1, "Date de livraison")
If maDate <> "" Then
Target.Value = maDate
End If
ElseIf Not Application.Intersect(Target, Range("Tableau_des_commandes[Date de commande]")) Is Nothing Then
Cancel = True
maDate = datePicker(Target.Value, , 1, , "Date de la commande")
If maDate <> "" Then
Target.Value = maDate
End If
End If
End Sub