Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Calendrier dans Useform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Roseline

XLDnaute Occasionnel
Bonjour,
Je travaille en VBA depuis quelques temps mais je ne suis jamais arrivé à créer un calendrier qui inscrivait la date dans ma cellule en cliquant sur le calendrier fait dans Useform. A l'aide de votre forum j'ai retrouvé exactement ce que je cherchais et tout fonctionne à merveille. Mon interrogation c'est que lorsque je protège mon fichier je suis incapable de faire fonctionner mon calendrier. Aussi, le calendrier s'affiche à toutes les cellules de mon document et pas seulement aux quelques cellules ou j'en ai besoin. Est-ce que vous pourriez m'aider svp.
 
Bonjour le fil, le forum

@Roseline [Bienvenue sur le forum]
Est-ce que vous pourriez m'aider svp.
T'aider comme cela, ex nihilo, à brûle pourpoint, sans le concours d'un fichier Excel que tu aurais concocté en guise d'exemple, risque d'être pas forcément évident.

Par contre, le ciel pourrait s'éclaircir si tu cliquais sur le bouton Téléverser un fichier pour joindre ton fichier anonymisé avec ton userform.
 
Re

@Roseline
Si j'ai bien compris ta problématique, remplaces le code existant de la feuille AQ par celui-ci
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([M6:M26], Target) Is Nothing Then
If Target.Count > 1 Then Exit Sub
UserForm1.Top = ActiveCell.Top + 100
UserForm1.Left = ActiveCell.Offset(0, 1).Left + 25
UserForm1.Show
End If
End Sub

PS: Mes amitiés au Gouvernement du Canada😉
 
Dernière édition:
Bonjour,

autre idée...
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.NumberFormat Like "*[d,m,y]*[d,m,y]*" Then
        UserForm1.Top = ActiveCell.Top + 100
        UserForm1.Left = ActiveCell.Offset(0, 1).Left + 25
        UserForm1.Show
    End If
End Sub
Si le format de cellule a au moins 2 éléments d'un format date, l'UF s'affiche.
Tout se fait donc sur la feuille sans retoucher la macro, par contre il faut peut-être ajouter des zones d'exclusions comme C3, ou des colonnes avec format date (tu en as beaucoup) qui ne seraient pas concernées. A toi de voir pour les finitions
eric
 
Dernière édition:
Exact. On pourrait imposer la présence d'un séparateur de date :
Like "*[d,m,y]*[/,.,-]*[d,m,y]*"
ou interdire le ":"
Like "*[d,m,y]*[!:]*[d,m,y]*"
Il reste aussi les cas date-heure, laisser passer ou pas ? C'est selon...
Je pense qu'il faut se limiter aux cas des formats réellement utilisés sur la feuille et ne pas chercher l'universalité.
eric
 
Re,

@Eriiiiic
Pourquoi ne pas simplement passer par:
If Not Intersect([M6:M26], Target) Is Nothing Then
En ajoutant des plages de cellules si besoin ?

Ceci dit, jamais lu de Like de ce genre, mais je les Like 😉
 
Bonsoir job75

Ce n'est pas ma macro, elle était déjà dans le fichier joint par Roseline
Je n'ai ajouté que ces deux lignes
If Not Intersect([M6:M26], Target) Is Nothing Then
If Target.Count > 1 Then Exit Sub

Je voulais juste savoir avant d'aller me coucher à qui s'adressait le dernier message de Roseline 😉

EDITION: job75
Tu viens de supprimer ton message.
Du coup le mien est moins compréhensible de par le fait 😉
 
Pourquoi ne pas simplement passer par:
If Not Intersect([M6:M26], Target) Is Nothing Then
En ajoutant des plages de cellules si besoin ?
Trop classique, j'ai voulu innover 🙂

Et puis ça fait une macro unique sans avoir besoin de recenser les plages à traiter.
Pas un grand plus sur une feuille statique et simple...
Mais une qui évolue, il suffit de mettre un format date sur une cellule et on a le sélecteur de date sans toucher au code.
Ou bien plusieurs feuilles, on peut mettre dans ThisWorkbook sans aller éplucher toutes les feuilles pour savoir quelles plages traiter pour chaque. N'importe quelle date mise n'importe où, à n'importe quel moment, aura le sélecteur d'office.
Si, si, il peut y avoir un intérêt je pense ;-)
Bon, il faut peut-être fignoler un peu plus le choix des formats déclencheurs, je n'ai pas voulu faire un truc à rallonge qui effraie...
 
Bonjour le fil, le forum

Eriiiiic
T'as bien eu raison d'innover.
Je suis friand des codes VBA qui sortent des chemins battus 😉

Suite à ton code, j'ai voulu voir de ce côté
Donc j'ai testé ceci
A1 est au format Date
en B1 on a =CELLULE("format";A1)
Et dans le code de la feuille
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x
x = Evaluate("=CELL(""format""," & Target & ")")
MsgBox x
End Sub
Si tu sélectionnes B1, le MsgBox s'affiche, sinon...
Tu peux m'expliquer le pourquoi de la chose, stp?
 
Bonjour Stapple,

Surprenant au début, mais avec Target.Address après c'est mieux ;-)

Je vois où tu veux en venir mais je me demande si la doc de Cellule() est correcte.
Les formats heure => Dx
Sans compter les éventuels formats personnalisés qu'il faudrait de toute façon analyser.
eric
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
426
Réponses
12
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…