Faire bouger un calendrier

Signaler
Messages postés
2
Date d'inscription
mercredi 25 novembre 2009
Statut
Membre
Dernière intervention
25 novembre 2009
-
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
-
Bonjour
bien que je sois très novice dans le domaine,à force de fouiller ci et là j'ai été capable de monter une grille de réservation de locaux sur excel. Une ligne correspond à une réservation. La première colonne est pour l'affichage de la date de la réservation. En cliquant sur la cellule, un calendrier apparaît, je choisis une date qui s'affiche ensuite dans la cellule.
Or le problème est que le calendrier ne s'affiche toujours que dans le haut de la grille alors que je suis, pas exemple, à compléter une entrée à la 10e ligne. Je dois alors remonter dans le haut de la page pour cliquer sur le calendrier. Comment faire pour que le calendrier s'affiche chaque fois à l'endroit où je suis rendue sur la grille?

Merci de votre aide.

Voici les paramètres pour mon calendrier:

Private Sub CheckBox1_Click()

End Sub

Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
Calendar1.Visible = False

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox100_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Intersection As Range, Plage As Range

Set Plage = Range("A4:A100")

Set Intersection = Application.Intersect(Target, Plage)
If Not (Intersection Is Nothing) Then
Calendar1.Visible = True

End If

End Sub

5 réponses

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bonjour,

Réponse (qui n'est pas la même sous VB6 et sous VBA) quand cette discussion sera placée dans le bon thème
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonsoir,

Demande déjà à un Admin de changer le thème pour mettre ta question dans celui consacré au VBA...

Ensuite, regardes du côté des propriétés .TOP et .LEFT qui définissent les coordonnées graphique de l'emplacement de ton contrôle. De même, une cellule possède les même propriété...

Ainsi, avant d'afficher ton contrôle, il suffit de lui attribuer les coordonnées de la cellule...

Quelque chose comme :
Calendar1.Top = Selection.Top
Calendar1.Left = Selection.Left


ou encore :
Calendar1.Top = Target.Top
Calendar1.Left = Target.Left


Bref, tu auras compris le principe... Tu peux aussi utiliser Range("A1").TOP, etc.

Amicalement,
Us.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Re...

Je n'ai pas actuellement le contrôle Calendar, mais MonthView... mais le principe est le même. Voici plutôt le code que j'utiliserai :

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
ActiveCell.Value = MonthView1.Value
MonthView1.Visible = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(Target, Range("A4:A100")) Is Nothing Then Exit Sub
    MonthView1.Visible = True
    MonthView1.Top = Selection.Top
    MonthView1.Left = Selection.Left
End Sub


Donc remplacer MonthView1 par Calendar1 dans ton cas.

Dans SelectionChange, il est préférable de mettre en avant le test et de sortir le plus rapidement possible de la SUB si ce n'est pas vérifié... car c'est le cas général !

Amicalement,
Us.
Messages postés
2
Date d'inscription
mercredi 25 novembre 2009
Statut
Membre
Dernière intervention
25 novembre 2009

MERCI À TOUS POUR CES INFOS.
Désolé d'avoir placé la question au mauvais endroit, mais je ne savais pas dans quelle rubrique la mettre ...

comme je suis débutant en la matière... je l'ai mis dans débutant... logique je pense!

Je vais essayer vos propositions.
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Non ami,
tu l'as "mise" à la rubrique "débutant", certes, mais dans Forum > Visual Basic 6 > Divers , qui n'est pas ton outil de développement.