OVH Cloud OVH Cloud

faire apparaitre un userform en double cliquant

13 réponses
Avatar
croky23
bonjour le forum
dans mon tableau j'ai un calcul d'heure de travail à faire
j'ai cree un userform de calcul
je voudrais appeler cet userform en double cliquant dans la cellule ou le
resultat doit etre inscrit (toute les cellules sont dans une meme colonne)
ex: en A1 je double clique mon userform apparait (je rentre mes données)et
en validant le resultat s'inscrit dans la cellule selectionnée.
quel est le code pour obtenir ce resultat
merci de votre aide et bon dimanche

3 réponses

1 2
Avatar
croky23
en effet cela fonctionne tres bien mais , oui il y a un ...!j'ai plusieurs
colonnes ou je voudrais que l'userform apparaisse. 4 exactement .en AE / AT
/ BO et CK
comment modifier le code
encore un grand merci à vous


Re,

Qu'estce qui ne fonctionne pas?

Lorsque tu DblClicque dans la colonne A
le userform calcul_heure doit apparaître, si tant est
que le .Name ainsi défini respecte la casse et
que ce userform appartient bien au classeur.

Sinon mets un lien ici
après avoir posé l'exemple là http://cjoint.com

Cordialement.

lSteph



j'ai donc entre ce code dans mon userform:
Private Sub B_Validation_Click()
Calcul_2
ActiveCell = Format(CDate(Me.Total_heures_travaillées))
Unload Me
End Sub
et cela fonctionne
mais j'ai un soucis pour faire apparaitre mon userform
j'ai rentre ce code dans ma feuille
Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
If Target.Column = 1 Then calcul_heure.Show
End Sub

(calcul_heure étant le nom de mon userform)mais cela ne fonctionne pas



merci bcp pour votre implication
je vais essayer de suivre vos conseils
pour information je vous livre le code de mon userform
Private Sub UserForm_Initialize()
temps_de_repos.AddItem "0"
temps_de_repos.AddItem "1"
temps_de_repos.AddItem "2"
Me.temps_de_repos = "0"
Me.total_heure_de_repas = "0.00"
End Sub

Private Sub heure_de_repas_Click()
If Me.heure_de_repas Then
Me.total_heure_de_repas = "1.00"
End If
If Not Me.heure_de_repas Then
Me.total_heure_de_repas = "0.00"
End If
End Sub

Private Sub temps_de_repos_Change()
If Me.temps_de_repos = 0 Then
Me.total_temps_de_repos = "00.00"
End If
If Me.temps_de_repos = 1 Then
Me.total_temps_de_repos = "0.10"
End If
If Me.temps_de_repos = 2 Then
Me.total_temps_de_repos = "0.20"
End If

End Sub


Private Sub total_heure_de_repas_Change()
Calcul_2
End Sub

Private Sub total_temps_de_repos_Change()
Calcul_2
End Sub


Private Sub Heure_debut_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_debut) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_debut_Change()
Calcul
End Sub

Private Sub heure_fin_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_fin) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_fin_Change()
Calcul
End Sub

Sub Calcul()
If IsDate(Me.heure_debut) And IsDate(Me.heure_fin) Then
Me.sous_total = Format(((CDate(Me.heure_debut)) * 24 * 60 -
CDate(Me.heure_fin) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub
Sub Calcul_2()
If IsDate(Me.sous_total) And IsDate(Me.total_heure_de_repas) And
IsDate(Me.total_temps_de_repos) Then
Me.Total_heures_travaillées = Format(((CDate(Me.sous_total)) * 24 * 60 -
CDate(Me.total_temps_de_repos) * 24 * 60 - CDate(Me.total_heure_de_repas) *
24 * 60) / (24 * 60), "hh:mm")
End If
End Sub



....suite, précision

dans l'exemple j'ai pris un calcul quelconque et
utilisé val et n'ai pas mis de format de cellule
Il est bien évident que selon ton propre calcul et le type de données
utilisées cela restera à adapter, sachant qu'un textbox contient du
texte et que pour le calcul il faudra sans doute convertir comme le
suggère Anonymous et aussi , penser que la cellule envisage la donnée en
standard selon ce qui sort de vba. Il peut donc être nécessaire de
forcer un format de cellule après rstitution de la donnée.

Il conviendra également de s'assurer que les textbox sont remplis avant
d'autoriser la commande.

Cdlt.

lSteph










Avatar
LSteph
Bonsoir,

Il faut indiquer les numéros de colonne, pour simplifier
remplacer le if target.column=1 par un select case

Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
Select Case Target.Column
Case 31, 46, 67, 89
UserForm1.Show
End Select
End Sub


'@bientôt.

'lSteph

en effet cela fonctionne tres bien mais , oui il y a un ...!j'ai plusieurs
colonnes ou je voudrais que l'userform apparaisse. 4 exactement .en AE / AT
/ BO et CK
comment modifier le code
encore un grand merci à vous


Re,

Qu'estce qui ne fonctionne pas?

Lorsque tu DblClicque dans la colonne A
le userform calcul_heure doit apparaître, si tant est
que le .Name ainsi défini respecte la casse et
que ce userform appartient bien au classeur.

Sinon mets un lien ici
après avoir posé l'exemple là http://cjoint.com

Cordialement.

lSteph



j'ai donc entre ce code dans mon userform:
Private Sub B_Validation_Click()
Calcul_2
ActiveCell = Format(CDate(Me.Total_heures_travaillées))
Unload Me
End Sub
et cela fonctionne
mais j'ai un soucis pour faire apparaitre mon userform
j'ai rentre ce code dans ma feuille
Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
If Target.Column = 1 Then calcul_heure.Show
End Sub

(calcul_heure étant le nom de mon userform)mais cela ne fonctionne pas



merci bcp pour votre implication
je vais essayer de suivre vos conseils
pour information je vous livre le code de mon userform
Private Sub UserForm_Initialize()
temps_de_repos.AddItem "0"
temps_de_repos.AddItem "1"
temps_de_repos.AddItem "2"
Me.temps_de_repos = "0"
Me.total_heure_de_repas = "0.00"
End Sub

Private Sub heure_de_repas_Click()
If Me.heure_de_repas Then
Me.total_heure_de_repas = "1.00"
End If
If Not Me.heure_de_repas Then
Me.total_heure_de_repas = "0.00"
End If
End Sub

Private Sub temps_de_repos_Change()
If Me.temps_de_repos = 0 Then
Me.total_temps_de_repos = "00.00"
End If
If Me.temps_de_repos = 1 Then
Me.total_temps_de_repos = "0.10"
End If
If Me.temps_de_repos = 2 Then
Me.total_temps_de_repos = "0.20"
End If

End Sub


Private Sub total_heure_de_repas_Change()
Calcul_2
End Sub

Private Sub total_temps_de_repos_Change()
Calcul_2
End Sub


Private Sub Heure_debut_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_debut) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_debut_Change()
Calcul
End Sub

Private Sub heure_fin_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_fin) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_fin_Change()
Calcul
End Sub

Sub Calcul()
If IsDate(Me.heure_debut) And IsDate(Me.heure_fin) Then
Me.sous_total = Format(((CDate(Me.heure_debut)) * 24 * 60 -
CDate(Me.heure_fin) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub
Sub Calcul_2()
If IsDate(Me.sous_total) And IsDate(Me.total_heure_de_repas) And
IsDate(Me.total_temps_de_repos) Then
Me.Total_heures_travaillées = Format(((CDate(Me.sous_total)) * 24 * 60 -
CDate(Me.total_temps_de_repos) * 24 * 60 - CDate(Me.total_heure_de_repas) *
24 * 60) / (24 * 60), "hh:mm")
End If
End Sub


....suite, précision

dans l'exemple j'ai pris un calcul quelconque et
utilisé val et n'ai pas mis de format de cellule
Il est bien évident que selon ton propre calcul et le type de données
utilisées cela restera à adapter, sachant qu'un textbox contient du
texte et que pour le calcul il faudra sans doute convertir comme le
suggère Anonymous et aussi , penser que la cellule envisage la donnée en
standard selon ce qui sort de vba. Il peut donc être nécessaire de
forcer un format de cellule après rstitution de la donnée.

Il conviendra également de s'assurer que les textbox sont remplis avant
d'autoriser la commande.

Cdlt.

lSteph











Avatar
croky23
merci
j'avais opté pour cette solution

Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
If Target.Column = 31 Then calcul_heure.Show
If Target.Column = 46 Then calcul_heure.Show
If Target.Column = 67 Then calcul_heure.Show
If Target.Column = 89 Then calcul_heure.Show
End Sub
ce qui marchait
mais je vais prendre la tienne

encore merci pour tout
bonne semaine


Bonsoir,

Il faut indiquer les numéros de colonne, pour simplifier
remplacer le if target.column=1 par un select case

Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
Select Case Target.Column
Case 31, 46, 67, 89
UserForm1.Show
End Select
End Sub


'@bientôt.

'lSteph

en effet cela fonctionne tres bien mais , oui il y a un ...!j'ai plusieurs
colonnes ou je voudrais que l'userform apparaisse. 4 exactement .en AE / AT
/ BO et CK
comment modifier le code
encore un grand merci à vous


Re,

Qu'estce qui ne fonctionne pas?

Lorsque tu DblClicque dans la colonne A
le userform calcul_heure doit apparaître, si tant est
que le .Name ainsi défini respecte la casse et
que ce userform appartient bien au classeur.

Sinon mets un lien ici
après avoir posé l'exemple là http://cjoint.com

Cordialement.

lSteph



j'ai donc entre ce code dans mon userform:
Private Sub B_Validation_Click()
Calcul_2
ActiveCell = Format(CDate(Me.Total_heures_travaillées))
Unload Me
End Sub
et cela fonctionne
mais j'ai un soucis pour faire apparaitre mon userform
j'ai rentre ce code dans ma feuille
Private Sub Worksheet_BeforeDoubleClick(ByVal _
Target As Range, Cancel As Boolean)
If Target.Column = 1 Then calcul_heure.Show
End Sub

(calcul_heure étant le nom de mon userform)mais cela ne fonctionne pas



merci bcp pour votre implication
je vais essayer de suivre vos conseils
pour information je vous livre le code de mon userform
Private Sub UserForm_Initialize()
temps_de_repos.AddItem "0"
temps_de_repos.AddItem "1"
temps_de_repos.AddItem "2"
Me.temps_de_repos = "0"
Me.total_heure_de_repas = "0.00"
End Sub

Private Sub heure_de_repas_Click()
If Me.heure_de_repas Then
Me.total_heure_de_repas = "1.00"
End If
If Not Me.heure_de_repas Then
Me.total_heure_de_repas = "0.00"
End If
End Sub

Private Sub temps_de_repos_Change()
If Me.temps_de_repos = 0 Then
Me.total_temps_de_repos = "00.00"
End If
If Me.temps_de_repos = 1 Then
Me.total_temps_de_repos = "0.10"
End If
If Me.temps_de_repos = 2 Then
Me.total_temps_de_repos = "0.20"
End If

End Sub


Private Sub total_heure_de_repas_Change()
Calcul_2
End Sub

Private Sub total_temps_de_repos_Change()
Calcul_2
End Sub


Private Sub Heure_debut_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_debut) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_debut_Change()
Calcul
End Sub

Private Sub heure_fin_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(Me.heure_fin) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub heure_fin_Change()
Calcul
End Sub

Sub Calcul()
If IsDate(Me.heure_debut) And IsDate(Me.heure_fin) Then
Me.sous_total = Format(((CDate(Me.heure_debut)) * 24 * 60 -
CDate(Me.heure_fin) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub
Sub Calcul_2()
If IsDate(Me.sous_total) And IsDate(Me.total_heure_de_repas) And
IsDate(Me.total_temps_de_repos) Then
Me.Total_heures_travaillées = Format(((CDate(Me.sous_total)) * 24 * 60 -
CDate(Me.total_temps_de_repos) * 24 * 60 - CDate(Me.total_heure_de_repas) *
24 * 60) / (24 * 60), "hh:mm")
End If
End Sub


....suite, précision

dans l'exemple j'ai pris un calcul quelconque et
utilisé val et n'ai pas mis de format de cellule
Il est bien évident que selon ton propre calcul et le type de données
utilisées cela restera à adapter, sachant qu'un textbox contient du
texte et que pour le calcul il faudra sans doute convertir comme le
suggère Anonymous et aussi , penser que la cellule envisage la donnée en
standard selon ce qui sort de vba. Il peut donc être nécessaire de
forcer un format de cellule après rstitution de la donnée.

Il conviendra également de s'assurer que les textbox sont remplis avant
d'autoriser la commande.

Cdlt.

lSteph














1 2