Userform s'ouvrant par double-clique

vdh_xavier

XLDnaute Junior
Bonjour à tous,

J'ai un problème concernant une userform que j'active par un double clique sur un cellule.

Je ne sais pas comment exprimer le fait que les données entrées dans l'userform aillent se mettre dans la cellule qui a été double-cliquée.

Voici mes codes.

DOUBLE CLIQUE :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("I6:I2000")) Is Nothing Then
Load UserForm1
UserForm1.Show
End If

USERFORM :
Private Sub Bt_AJD_Click()
Target.Value = UserForm1.TextBox1
End Sub


Il doit y avoir un problème au niveau du "Target.Value", parce que quand je mets [A1] = UserForm1.TextBox1, cela fonctionne.

J'ai essayé avec Target.Address ou en ajoutant une variable pour l'adresse du double-clique, mais je n'y arrive pas.

Je vous remercie d'avance pour votre aide.

Bonne journée

Xavier
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Userform s'ouvrant par double-clique

Bonsoir
Moi je dis que si l'Userform doit communiquer avec autre chose, il ne faut pas hésiter à l'équiper d'une méthode, c'est à dire d'une procédure Public qui remplacera le Show
VB:
DOUBLE CLIQUE :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("I6:I2000")) Is Nothing Then Userform1.Afficher Target
End Sub

USERFORM:
Public Sub Afficher(ByVal Cible As Range)
Me.Show
Cible.Value = Userform1.TextBox1
Unload Me
End Sub
Private Sub Bt_AJD_Click()
Me.Hide
End Sub
Ce principe peut être appliqué à d'autres architectures selon le besoin. Ça peut s'avérer plus clair que de communiqué via une variable déclarée Public et As Range dans un module ordinaire.
 

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Grand merci pour cette réponse Dranreb.

Je viens d'essayer, mais je ne m'en sors pas. J'avoue que c'est la première fois que j'utilise les userform.

En fait ma demande était plus complexe.

Je voudrais qu'après le double-clique, un userform s'affiche avec 4 boutons, donc 4 possibilités laissées à l'utilisateur.

1. Dans la cellule double-cliquée se met la date du jour
2. Un second userform s'ouvre afin de demander à l'utilsateur quelle date il veut introduire dans la cellule double-cliquée
3. Dans le cellule double-cliquée se met un "x"
4. On annule et on ne fait rien

Je me permets de joindre mon fichier excel pour plus de facilité.

Encore merci.

Xavier
 

Pièces jointes

  • Tableau de bord avant homologation XV 06.05.13.xlsm
    149.4 KB · Affichages: 49

Dranreb

XLDnaute Barbatruc
Re : Userform s'ouvrant par double-clique

Je n'arrive pas à ouvrir votre fichier: Excel rencontre un problème et doit fermer.
Pouvez vous le joindre au format .xls

Sinon tel que vous le décrivez ça me semble un peu lourd.
Ne pourriez vous afficher l'userform avec tout de suite un calendrier modifiable mais initialisé à la date du jour, plus un bouton pour mettre un x, un autre pour annuler ?

Vous auriez peut être intéret aussi à déclarer CelCbl As Range et tête de l'userform et à faire Set CelCbl = Cible dans la procédure Afficher. Ce sera plus simple de travailler avec CelCbl ensuite.
 
Dernière édition:

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Voilà je vous renvoie mon fichier.

Si bien sûr, ça serait également bon, mais j'avoue que je ne suis malheureusement pas capable de le faire.

Cordialement

Xavier
 

Pièces jointes

  • Tableau de bord avant homologation XV 06.05.13.xls
    463 KB · Affichages: 60
  • Tableau de bord avant homologation XV 06.05.13.xls
    463 KB · Affichages: 58
  • Tableau de bord avant homologation XV 06.05.13.xls
    463 KB · Affichages: 62

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Sorry, je l'avais enlevée ne sachant pas si elle était toujours applicable vu qu'il me fallait 2 userform et que le problème était plus complexe.

Si vous aviez encore un petit temps à me consacrer, pourriez-vous vérifier mon fichier à présent?

Je bloque donc dans ma userform 1 et je ne sais pas comment faire pour mettre en oeuvre ce que vous proposiez en début d'après-midi, càd d'afficher l'userform avec tout de suite un calendrier modifiable mais initialisé à la date du jour + un bouton pour mettre un x + un bouton pour annuler.

Merci beaucoup pour votre aide précieuse

Xavier
 

Pièces jointes

  • Tableau de bord avant homologation XV 06.05.13.xls
    445 KB · Affichages: 63
  • Tableau de bord avant homologation XV 06.05.13.xls
    445 KB · Affichages: 52
  • Tableau de bord avant homologation XV 06.05.13.xls
    445 KB · Affichages: 63

Dranreb

XLDnaute Barbatruc
Re : Userform s'ouvrant par double-clique

Quelques corrections non exhaustives :
VB:
Public Sub Afficher(ByVal Cible As Range)
Set CelCbl = Cible ' C'est une affectation d'objet: il faut Set devant.
VB:
Private Sub Bt_Autre2_Click()
' Le projet a été fait un autre jour (date inconnue), donc on met un "x" dans la cellule double-cliquée
CelCbl.Value = "x" ' Cible n'est plus bon: le paramètre Cible de Afficher n'est plus connu dans les autres procédures.
Unload Me ' Remplacez partout dans le code d'un objet son nom par le mot clé Me, ainsi il n'y aura rien à changer si vous le changez.
End Sub
Voyez si vous pouvez trouver dans les contrôles supplémentaires un MonthView ou un DTPicker pour la suite des améliorations.
 
Dernière édition:

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Ok merci, je me lance sur la piste du MonthView et du DTPicker.

En ce qui concerne le code de l'userform, est-ce que les différentes private sub se lancent automatiquement après la public sub?

Je demande cela parce que j'ai le message d'erreur (erreur d'exécution '424' : objet requis) lorsque j'effectue le double-clique.

J'ai ce code-ci dans mon userform :

Dim CelCbl As Range

Public Sub Afficher(ByVal Cible As Range)
Set CelCbl = Cible
End Sub

Private Sub Bt_AJD_Click()
' Le projet a été fait aujourd'hui, donc on met la date d'aujourd'hui dans le cellule double-cliquée
CelCbl.Value = AJD
Unload Me
End Sub

Private Sub Bt_Autre2_Click()
' Le projet a été fait un autre jour (date inconnue), donc on met un "x" dans la cellule double-cliquée
CelCbl.Value = "x"
Unload Me
End Sub

Private Sub Bt_Annuler()

'Si on ne veut rien mettre dans la cellule couble-cliquée, l'userform se ferme
Unload Me
End Sub


Est-ce que je fais quelque chose de faux?

Merci

Xavier
 

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Merci de continuer à m'aider dans mes débuts en userform.

En fait, c'est le partie "Annulation" qui fait planter.

Je reçois le message d'erreur suivant : "Le membre existe déjà dans un module objet dont le présent module est dérivé."

Je ne vois cependant pas où j'aurais pu déjà écrire le même code.

De plus, lorsque j'enlève la partie "Annulation" pour faire un test, le "x" ne se met pas.

Finalement j'ai réussi à trouver une solution pour la date (aujourd'hui ou autre date), mais je ne sais juste pas comment faire pour qu'elle se mette dans ma cellule cible.

Je me permets de vous renvoyer mon fichier au cas où vous auriez encore un petit peu de temps à me consacrer.

Merci

Xavier
 

Pièces jointes

  • Tableau de bord avant homologation XV 06.05.13.xls
    643.5 KB · Affichages: 61
  • Tableau de bord avant homologation XV 06.05.13.xls
    643.5 KB · Affichages: 57
  • Tableau de bord avant homologation XV 06.05.13.xls
    643.5 KB · Affichages: 65

Dranreb

XLDnaute Barbatruc
Re : Userform s'ouvrant par double-clique

Bt_Annulation ça existe déjà bien sûr, réfléchissez, vous ne pouvez pas donner ce nom à une Sub
Prenez l'habitude d'implanter vos procédures évènement à l'aide des listes déroulantes qui surmontent la fenêtre de code : Elles n'oublient jamais de mettre _Click derrière !

L'autre problème était moins évident mais simple: le Me.Show Stoppe l'exécution de la procédure Afficher jusqu'à ce qu'il soit masqué ou déchargé, de sorte que le Set CelCbl = Cible n'était jamais exécuté pendant qu'il était affiché. Mettre donc le Me.Show en dernier dans la procédure.
Information: il est aussi possible de mettre la propriété ShowModal du Userform à False. Ça réglait aussi le problème puisque le Show ne stoppe alors plus l'exécution. Mais ça confère à l'userform un tout autre comportement vis à vis du reste.

P.S. Terminez la Worksheet_BeforeDoubleClick par Cancel = True, sinon l'effet normal du double clic opère quand même après, or il est interdit par la protection de la feuille.
 
Dernière édition:

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Génial, ça marche pour le "x", merci beaucoup.

Pourriez-vous encore me dire ce que je dois faire pour que la date dans le DTPicker s'insère dans ma cellule cible lorsque je clique sur valider?

Merci

Xavier
 

Dranreb

XLDnaute Barbatruc
Re : Userform s'ouvrant par double-clique

Je connais assez mal les DTPicker à vrai dire.
Mais j'ai rapidement trouvé :
VB:
Private Sub DTPicker1_Change()
MsgBox "DTPicker1.Value est de type """ & TypeName(DTPicker1.Value) & """." ' Instruction à supprimer c'était pour un test
CelCbl.Value = DTPicker1.Value
Unload Me
End Sub
Apparemment vous avez pris la première procédure qui se présentait pour ce DTPicker1, et malheureusement ce n'était pas la bonne.

Ah, vous avez dit
cellule cible lorsque je clique sur valider?
Eh bien mettez alors à peu près la même chose mais dans une Private Sub Bt_Valider_Click(), Et supprimez les procédures de DTPicker1. Mais je trouve plus pratique que la date se mette dès qu'on la choisit.
 
Dernière édition:

vdh_xavier

XLDnaute Junior
Re : Userform s'ouvrant par double-clique

Super ça marche.

Tout tout grand merci et désolé pour toutes ces questions.

J'aimerais créer un userform un petit plus complexe (mais pas très complexe), juste 3-4 cases à remplir et à insérer dans un endroit de ma feuille.

Accepteriez-vous de relire mon code une fois que je l'aurai terminé?

Encore merci.

Bien à vous

Xavier
 

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS