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 !

ManuEven

XLDnaute Nouveau
Bonjour,

J’ai crée un planning représentant les mois et les années (pièce jointe), pour chaque mois il est possible de renseigner pour chaque jour le type d’événement (CA, RTT, RTC etc…), pour le moment ce changement n’est possible qu’ en effectuant le changement sur la feuille « planification » qui répercute sur la feuille « calendrier ».

Afin de pouvoir effectuer les changements d’événement directement dans la feuille « calendrier » je souhaite pouvoir faire un double-clic sur un jour, que le contenu de celle-ci s’efface , que le jour sélectionné s’affiche (par exemple si le jour sélectionné est le 12, que celui-ci s’affiche), qu’une boîte de dialogue apparaisse et me propose des événements via une liste déroulante (RTT, CA etc…) et que lorsque je clic sur un événement, que celui-ci s’affiche dans la case du jour sélectionné.

Pour avoir l’effet souhaité, j’ai vu sur internet la macro suivante :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'vérifier si les conditions d'utilisation de la macro sont validées
If Target.Column < 2 Or Target.Column > 8 Or Target.Row < 15 Or Target.Row > 20 Then Exit Sub
If Target.Value = 0 Then Exit Sub
'récupérer la date correspondant à la cellule de double-clic
laDate = DateValue(Replace(ActiveSheet.Range("B11"), "Focus : ", "")) + Left(Target.Value, 2) - 1
'Paramétrer le tableau
Dim letableau As ListObject
Set letableau = Worksheets("PLANIFICATION").ListObjects("tab_Events")
If Len(Target.Value) = 8 Then
'MsgBox "ajouter un événement"
'Ajouter un événement
letableau.DataBodyRange().Find(laDate).Offset(0, 3)= “CA”
Else
'MsgBox "supprimer l'événement"
'supprimer la valeur de la cellule correspondant à la bonne date
'dans le tableau des événements de la feuille PLANIFICATION
letableau.DataBodyRange().Find(laDate).Offset(0, 3).ClearContents
End If
ActiveSheet.Range("B14").Select
End Sub

Seulement dans la feuille « calendrier » quand je valide la macro, je peux sélectionner la case correspondant au jour mais en double cliquant dessus le texte s’efface mais je ne peux rien modifier, quand je clic sur une autre case le texte d’origine réapparaît.

Un message « débogage » apparaît sur la ligne :

letableau.DataBodyRange().Find(laDate).Offset(0, 3).ClearContents

j’ai regardé sur le net apparemment il faut changer la ligne avec celle-ci :

letableau.DataBodyRange().Find(DateValue(laDate)).Offset(0, 3).ClearContents

toujours pareil, ça ne fonctionne toujours pas.

Pourriez-vous me donner un coup de main SVP.

PS : je suis novice en la matière…
 

Pièces jointes

Bonjour

Seulement dans la feuille « calendrier » quand je valide la macro, je peux sélectionner la case correspondant au jour mais en double cliquant dessus le texte s’efface mais je ne peux rien modifier, quand je clic sur une autre case le texte d’origine réapparaît.
Vous validez avec quelle macro ??
Sinon c'est un peu logique. Vous cliquez où il y a une formule
Si vous modifiez à cet endroit vous allez écraser la formule et de toute façon vous ne pourrez pas modifiez dans la feuille Calendrier mais dans la feuille Planification

Un message « débogage » apparaît sur la ligne :
letableau.DataBodyRange().Find(laDate).Offset(0, 3).ClearContents
Oui puisque l'objet "letableau" est défini dans le code pour le tableau "Tab_events" qui est un nom attribué dans le gestionnaire de noms pour la feuille Planification et pas pour la feuille Calendrier
Le tableau dans la feuille Calendrier est une matrice et vous ne pouvez donc pas modifier des cellules.
Vous ne pouvez modifier que dans la colonne Evénements de la feuille Planification (comme vous le précisez au début de votre demande)
Le code de la feuille Calendrier n'a pas de raison d'être

Espérant avoir répondu à votre interrogation
 
Dernière édition:
Bonjour


Vous validez avec quelle macro ??
Sinon c'est un peu logique. Vous cliquez où il y a une formule
Si vous modifiez à cet endroit vous allez écraser la formule et de toute façon vous ne pourrez pas modifiez dans la feuille Calendrier mais dans la feuille Planification


Oui puisque l'objet "letableau" est défini dans le code pour le tableau "Tab_events" qui est un nom attribué dans le gestionnaire de noms pour la feuille Planification et pas pour la feuille Calendrier
Le tableau dans la feuille Calendrier est une matrice et vous ne pouvez donc pas modifier des cellules.
Vous ne pouvez modifier que dans la colonne Evénements de la feuille Planification (comme vous le précisez au début de votre demande)
Le code de la feuille Calendrier n'a pas de raison d'être

Espérant avoir répondu à votre interrogation
Bonjour DAN, merci pour votre réponse.
Vous me demandez avec quelle macro je valide, malheureusement je ne suis pas capable de vous répondre.
Concernant ma question, je fais référence à la vidéo (cf lien ), qui montre que de son côté ça fonctionne.
Cordialement.
lien:
Pour afficher ce contenu, nous aurons besoin de votre consentement pour définir des cookies tiers.
Pour plus d'informations, consultez notre page sur les cookies.
 
Re,

Bon après recherche, voici ce que vous devez faire dans votre fichier
1. Allez dans la feuille Calendrier et activer le code Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
2. Juste en dessous de cette ligne rajoutez :
VB:
Dim ladate As Date
3. Dans ce code, remplacez la ligne letableau.DataBodyRange().Find(ladate).Offset(0, 3).ClearContents par celle ci-dessous
Code:
letableau.ListColumns(1).DataBodyRange.Find(ladate, LookIn:=xlValues).Offset(0, 3).ClearContents
4. Désactivez le code qui se trouve dans la feuille Planification

Faites un test

NB : en dessous vous pouvez supprimer le ActiveSheet. dans cette ligne -->ActiveSheet.Range("B14").Select
Crdlt
 
Re,

Bon après recherche, voici ce que vous devez faire dans votre fichier
1. Allez dans la feuille Calendrier et activer le code Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
2. Juste en dessous de cette ligne rajoutez :
VB:
Dim ladate As Date
3. Dans ce code, remplacez la ligne letableau.DataBodyRange().Find(ladate).Offset(0, 3).ClearContents par celle ci-dessous
Code:
letableau.ListColumns(1).DataBodyRange.Find(ladate, LookIn:=xlValues).Offset(0, 3).ClearContents
4. Désactivez le code qui se trouve dans la feuille Planification

Faites un test

NB : en dessous vous pouvez supprimer le ActiveSheet. dans cette ligne -->ActiveSheet.Range("B14").Select
Crdlt
Bonjour,

Je viens de modifier la macro, ça fonctionne mais j’ai encore un petit problème.

La macro doit faire en sorte que lorsque je double clic sur une cellule (quand elle contient du texte), le texte doit s’effacer puis lorsque je double clic une seconde fois un tableau évènement à sélectionner (RTT, CA etc…) doit s’afficher et me propose de sélectionner un évènement (RTT,CA etc…)

La macro que j’ai modifié grâce à DAN (un grand merci) fonctionne mais seulement quand la cellule est vide (ne contient pas de texte RTT, CA etc…).

Lorsque je veux modifier une cellule qui contient du texte (RTT, CA etc…) je suis obligé de double cliquer dessus pour effacer le texte puis de cliquer sur une autre cellule pour revenir sur la cellule que je veux modifier (celle que je viens d’effacer) pour faire apparaître le tableau évènement pour sélectionner RTT, CA etc…

Merci à vous.

CDT
 

Pièces jointes

Dernière édition:
- 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
12
Affichages
432
Réponses
0
Affichages
379
Réponses
1
Affichages
467
Retour