Before double click...

  • Initiateur de la discussion Initiateur de la discussion Demouret
  • Date de début Date de début

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 !

D

Demouret

Guest
Bonjour le Forum,

J'ai le bout de code ci dessous qui me permet d ouvrir un USF en double cliquant sur une cellule dans la zone B8:B100

Mon petit soucis est que je voudrais garder le même principe pour ouvrir un AUTRE USF en double cliquant dans une plage A8:A100 cette fois
Sauf qu'en recopiant le code et en changeant la plage de cellule et le nom de l'USF j'ai bien sur un message d'erreur qui me dit "nom ambigu détecté".
Cela provient je pense que du coup les 2 "Private Sub" on le même nom.. non ?
Que dois je faire pour que cela fonctionne ?

Merci de votre aide

Bien cordialement

Pierre

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [b8:b100]) Is Nothing Then
Cancel = True
If Target.Font.Strikethrough = True Then
Exit Sub
Else
UserForm2.Show
Cancel = True
End If
End If
End Sub
 
Re : Before double click...

Bonjour à tous,

Peux-tu essayer ceci :

VB:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [A8:A100]) Is Nothing Then
        Cancel = True
        If Target.Font.Strikethrough = True Then
            Exit Sub
        Else
            UserForm2.Show
        End If
    End If
    If Not Intersect(Target, [B8:B100]) Is Nothing Then
        Cancel = True
        If Target.Font.Strikethrough = True Then
            Exit Sub
        Else
            UserForm1.Show
        End If
    End If
End Sub

A + à tous
 
Re : Before double click...

salut Tous

Si... tu veux un peu plus court, tu peux tester :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("A8:A100,B8:B100")) Is Nothing Then Exit Sub
  Cancel = True
  If Target.Font.Strikethrough = True Then Exit Sub
  If Target.Column = 1 Then UserForm2.Show Else UserForm1.Show
End Sub

@JCGL : merci pour la correction (autre fil) 😉
 
Re : Before double click...

Merci beaucoup à vous deux... les deux codes fonctionnent mais j'ai tout de même un petit soucis...

Je m explique

J'ai adapté un poil pour que l'USF se remplisse :

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("c8:c100,B8:B100")) Is Nothing Then Exit Sub
  Cancel = True
  If Target.Font.Strikethrough = True Then Exit Sub
  If Target.Column = 3 Then UserForm1.Show Else: UserForm2.Show

UserForm1.TB1.Value = Cells(ActiveCell.Row, 30)
UserForm1.TB2.Value = Cells(ActiveCell.Row, 31)
UserForm2.TextBox1.Value = Cells(ActiveCell.Row, 31)
UserForm2.TextBox2.Value = Cells(ActiveCell.Row, 38)

End Sub

En fait cela fonctionne très bien si je n'ai qu'une seule plage et qu'un seul USF mais dès que j'en ai deux différents (comme ci dessus) les USF ne se remplissent pas des valeurs de la ligne ou j'ai double cliqué en dernier... Un peu comme si le double clique n'activait pas la bonne ligne
En fait si je double clique une fois ce ne sont pas les bonnes valeurs dans l'USF mais si je le ferme et que double clique à nouveau sur la même cellule alors là ce sont les bonnes valeurs dans l'USF...

Encore merci pour votre aide

Bonne journée

Pierre
 
Re : Before double click...

bonjour le fil, JCGL, Si..., Demouret,

tu peux essayer :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As  Boolean)
  If Intersect(Target, Range("B8:c100")) Is Nothing Then Exit Sub
  Cancel = True
  If Target.Font.Strikethrough = True Then Exit Sub
  If Target.Column = 3 Then 
     UserForm1.Show
     UserForm1.TB1.Value = Cells(ActiveCell.Row, 30)
     UserForm1.TB2.Value = Cells(ActiveCell.Row, 31)
  Else : 
     UserForm2.Show
     UserForm2.TextBox1.Value = Cells(ActiveCell.Row, 31)
     UserForm2.TextBox2.Value = Cells(ActiveCell.Row, 38)
  End If

End Sub
ou alors, tu valides directement les TextBox dans le UserForm.Initialize
à+
(solution non testée)

bizarre, les codes couleurs, doit y avoir un truc à cocher...
voilà, c'est plus lisible
 
Dernière édition:
Re : Before double click...

Bonjour à tous,

Plus de souci si l'on ouvre les UserForms en non modal, voyez ce code :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("C8:C100,B8:B100")) Is Nothing Then Exit Sub
  Cancel = True
  If Target.Font.Strikethrough = True Then Exit Sub
  IIf(Target.Column = 3, UserForm1, UserForm2).Show 0 'non modal
  UserForm1.TB1 = Cells(Target.Row, 30)
  UserForm1.TB2 = Cells(Target.Row, 31)
  UserForm2.TextBox1 = Cells(Target.Row, 31)
  UserForm2.TextBox2 = Cells(Target.Row, 38)
End Sub
A+
 
Re : Before double click...

Re,

Sinon renseigner les TextBox avant l'ouverture des UserForms :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("C8:C100,B8:B100")) Is Nothing Then Exit Sub
  Cancel = True
  If Target.Font.Strikethrough = True Then Exit Sub
  UserForm1.TB1 = Cells(Target.Row, 30)
  UserForm1.TB2 = Cells(Target.Row, 31)
  UserForm2.TextBox1 = Cells(Target.Row, 31)
  UserForm2.TextBox2 = Cells(Target.Row, 38)
  IIf(Target.Column = 3, UserForm1, UserForm2).Show
End Sub
A+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
9
Affichages
508
Retour