Microsoft 365 Appel UserForm par double clic

mymyetnono

XLDnaute Junior
Bonjour,

Je voudrais savoir si il y a une macro qui pourrait m'ouvrir un UserForm quand je double-clic dans une cellule entre B7 à AF42 avec différents champs dont la date correspondant à la cellule ou il y a eu le double clic (année selon la cellule A3) plutot que de créer une macro par jour.
 

ChTi160

XLDnaute Barbatruc
Bonjour
je n'ai pas utilisé le Double Click car tu as des formules Partout Lol
Donc dans le code de la feuille "Année"
j'ai mis ceux ci qui semble répondre à la demande
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Worksheets("Année")Avec la feuille Année
If Not Intersect(Target, .Range("B8:AF42")) Is Nothing Then 'si la sélection se trouve dans la plage ainsi définie
UserForm1.Show 0 'on affiche le Userform'
End If
End With
End Sub
j'ai aussi (Double Click) Testé celui ci avec l'utilisation du Cancel
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Worksheets("Année")
If Not Intersect(Target, .Range("B8:AF42")) Is Nothing Then
Cancel = False
UserForm1.Show 0
Cancel = True
End If
End With
End Sub
jean marie
 
Dernière édition:

mymyetnono

XLDnaute Junior
Bonjour et merci,

J'ai trouver ce code qui va pas trop mal hormis qui m'indique constamment le jour comme un samedi.
VB:
Public irow%, icol%, ladate, jour$, mois$

Private Sub Worksheet_beforedoubleclick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("B8:AF42")) Is Nothing Then '<<< ADAPTER REFERENCE ZONE DOUBLE CLIC
    Cancel = True
    irow = Target.Row 'ligne de la cellule double cliquée
    icol = Target.Column 'colonne double clic
    With Sheets("Année")
        jour = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")(Weekday(ladate, vbTuesday)) & " " & .Cells(6, icol) 'jour converti en français (format JJJJ JJ) à partir de la valeur numérique du jour
        mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre")(Int((irow - 7) / 3)) 'mois converti en français à partir du mois numériqueladate = DateSerial(.[A3], Application.RoundUp((irow - 7) / 3, 0), .Cells(6, icol)) 'date reconstituée

    End With

    With UserForm1
        .ComboBox1 = jour & " " & mois 'prend la jour et le mois au format jjjj jj mmmm
        .TextBox_Année = Sheets("Année").[A3].Value
        .Show 'afficher userform
    End With
End If

End Sub


Mais après réflexion, il serais plus utile de pouvoir changer la date dans l'UserForm via un calendrier qui apparaît lorsqu'on clique sur la flèche du ComboBox de la date et de reprendre l'année et de l'afficher dans le TextBox_Année. (servira pour les noms de feuilles).
 

ChTi160

XLDnaute Barbatruc
Bonjour
Peut être parce que Tu as ceux ci :
VB:
Weekday(ladate, vbTuesday))
Le premier jour de la semaine est le mardi
Et ou trouve t'on la variable. "ladate" ?
Pas pu tester pas d'ordi.
A voir ou alors explique nous
Jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
As tu regarde où est déterminé "ladate" dans la procédure mais je ne pense pas que la fonction weekday() puisse être modifiée au hasard elle dépends de toi de ton calendrier !
la semaine chez toi commence t'elle un mardi ?
Jean marie
 

mymyetnono

XLDnaute Junior
Visiblement il me manquait la ligne avec ladate,

VB:
Public irow%, icol%, ladate, jour$, mois$

Private Sub Worksheet_beforedoubleclick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("B8:AF42")) Is Nothing Then '<<< ADAPTER REFERENCE ZONE DOUBLE CLIC
    Cancel = True
    irow = Target.Row 'ligne de la cellule double cliquée
    icol = Target.Column 'colonne double clic
    With Sheets("Année")
        ladate = DateSerial(.[A3], Application.RoundUp((irow - 7) / 3, 0), .Cells(6, icol)) 'date reconstituée
        jour = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")(Weekday(ladate, vbTuesday)) & " " & .Cells(6, icol) 'jour converti en français (format JJJJ JJ) à partir de la valeur numérique du jour
        mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre")(Int((irow - 7) / 3)) 'mois converti en français à partir du mois numérique

    End With

    With UserForm1
        .ComboBox1 = jour & " " & mois 'prend la jour et le mois au format jjjj jj mmmm
        .TextBox_Année = Sheets("Année").[A3].Value
        .Show 'afficher userform
    End With
End If

End Sub

Je souhaiterais qu'un calendrier s'ouvre dans le ComboBox1 lorsqu'on clic sur la petite flèche afin de modifier la date si erreur on clic au mauvais endroit, et que l'année dans la TextBox_Année soit prise dans le ComboBox1 plutôt que dans la cellule a3 de la feuille "Année"
 

mymyetnono

XLDnaute Junior
Oui, je veut que le TextBox_Année contienne l'année vu que j'ai des feuilles qui sont nommer ainsi (2017, 2018, 2019 etc...) et je pense que ce sera plus facile pour mettre les informations dans les bonne feuille (je ne voudrait pas que mes heures du mercredi 18 novembre 2020 soit au 18 novembre 2018 par exemple. Cela me permettrait aussi de faire une recherche de renseignement d'une journée via cet UserForm.

Je suis encore novice dans ce types de programmation et je m'explique et/ou m'y prends très mal.

Si vous me trouvez dans l'un de ses cas (ou les 2 ;)), j'en suis vraiment désolé.
 

ChTi160

XLDnaute Barbatruc
Re pourquoi as tu ComboBox1 et Non RefEdit1
j'ai modifié la macro
Pour que l'on puisse utiliser la Fonction WeekDay correctement
soit Weekday(ladate, vbMonday) - 1 ce qui permet d'avoir le Bon retour dans l'Array Jour
le premier élément étant 0 pour " Lundi " soit 1-1 etc etc 7 pour "Dimanche" soit 7-1
j'ai aussi renommé les Controls ComboBox et TextBox
Regarde :
VB:
Private Sub Worksheet_beforedoubleclick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B8:AF42")) Is Nothing Then '<<< ADAPTER REFERENCE ZONE DOUBLE CLIC
    Cancel = True
    irow = Target.Row 'ligne de la cellule double cliquée
    icol = Target.Column 'colonne double clic
    With Sheets("Année")
        ladate = DateSerial(.[A3], Application.RoundUp((irow - 7) / 3, 0), .Cells(6, icol)) 'date reconstituée
        jour = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")(Weekday(ladate, vbMonday) - 1) & " " & .Cells(6, icol) 'jour converti en français (format JJJJ JJ) à partir de la valeur numérique du jour
        mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre")(Int((irow - 7) / 3)) 'mois converti en français à partir du mois numérique
    End With
    With UserForm1
        .RefEdit1 = jour & " " & mois 'prend la jour et le mois au format jjjj jj mmmm
        .TextBox_Année = Sheets("Année").[A3].Value
        .Show 'afficher userform
    End With
End If
End Sub
jean marie
 

Discussions similaires

Réponses
18
Affichages
652

Statistiques des forums

Discussions
312 330
Messages
2 087 349
Membres
103 526
dernier inscrit
HEC