problème de sélection de cellules et VBA

guizmo114

XLDnaute Nouveau
bonjour à toutes et à tous,
félicitation pour ce forum très pratique (je le visite régulièrement et j'ai toujours réussi à trouver l'info qui me manquait... sauf aujourd'hui :rolleyes: )

voila mon problème:
dans le but de faire un document utilisable au sein de ma boite, j'ai décidé de faire des cases à cocher afin de faciliter la démarche. j'ai donc récupérer sur internet le code VBA :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Teste si la cellule ayant recu un double-clic fait partie de la plage Hotte, gants et masque
'Cette plage a été définie de manière dynamique à l'aide de la fonction suivante :
' =DECALER(fiche_exposition!$K$13;;;100) pour Hotte
' =DECALER(fiche_exposition!$L$13;;;100) pour Gants
' =DECALER(fiche_exposition!$M$13;;;100) pour masque
'Voir le menu Insertion - Nom - Définir

If Not (Intersect(Target, Range("Hotte", "Masque")) Is Nothing) Then
'Mise en forme de la cellule
Target.Font.Name = "Wingdings"
Target.HorizontalAlignment = xlCenter
'Empêche la sélection de la cellule après le double-clic Cancel = True
'Teste de la valeur de la cellule
If Target.Value = "o" Then
Target.Value = "ý"
ElseIf Target.Value = "ý" Then
Target.Value = "o"
Else: Target.Value = "ý"
End If
Target.Select
End If
End Sub

que j'ai fait à ma sauce (au niveau de la plage de donnée). cette plage contenant 3 colonnes : Hotte, Gants, Masque.
Ceci marche super bien dans la feuille 1 (cela coche les cases quand on double clic dans l'une ou l'autre des 3 colonnes) et ne coche aucune autre cellule, cepandant, dès que je double clic dans n'importe quelle cellule d'une autre feuille (feuille 2 , feuille 3 etc...) VBA m'affiche un message d'erreur du type :
"erreur d'exécution 1004, la méthode 'Range' de l'objet '_global' a échoué"

et quand je clic sur débogage, il me surligne en jaune la ligne

If Not (Intersect(Target, Range("Hotte", "Masque")) Is Nothing) Then

avez-vous une idée ?
 

G.David

XLDnaute Impliqué
Re : problème de sélection de cellules et VBA

tes plages sont définies dans la feuille "fiche_exposition" uniquement donc en toutes logique si ce même code est lancé en feuille 2 ou 3 les plages ne sont pas définie dans ces feuilles
=DECALER(fiche_exposition!$K$13;;;100) pour Hotte
' =DECALER(fiche_exposition!$L$13;;;100) pour Gants
' =DECALER(fiche_exposition!$M$13;;;100) pour masque

le double clic reponds sur la feuille active
 

BrunoM45

XLDnaute Barbatruc
Re : problème de sélection de cellules et VBA

Salut Guizmo114,

Tu peux utiliser : On Error Resume Next

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Teste si la cellule ayant recu un double-clic fait partie de la plage Hotte, gants et masque
'Cette plage a été définie de manière dynamique à l'aide de la fonction suivante :
' =DECALER(fiche_exposition!$K$13;;;100) pour Hotte
' =DECALER(fiche_exposition!$L$13;;;100) pour Gants
' =DECALER(fiche_exposition!$M$13;;;100) pour masque
'Voir le menu Insertion - Nom - Définir
On Error Resume Next
If Not (Intersect(Target, Range("Hotte", "Masque")) Is Nothing) Then
  'Mise en forme de la cellule
  Target.Font.Name = "Wingdings"
  Target.HorizontalAlignment = xlCenter
  'Empêche la sélection de la cellule après le double-clic Cancel = True
  'Teste de la valeur de la cellule
  If Target.Value = "o" Then
    Target.Value = "ý"
  ElseIf Target.Value = "ý" Then
    Target.Value = "o"
  Else: Target.Value = "ý"
  End If
  Target.Select
End If
On Error GoTo 0
End Sub

Ou tester le nom de la feuille ou se fait le double clique

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Teste si la cellule ayant recu un double-clic fait partie de la plage Hotte, gants et masque
'Cette plage a été définie de manière dynamique à l'aide de la fonction suivante :
' =DECALER(fiche_exposition!$K$13;;;100) pour Hotte
' =DECALER(fiche_exposition!$L$13;;;100) pour Gants
' =DECALER(fiche_exposition!$M$13;;;100) pour masque
'Voir le menu Insertion - Nom - Définir
If Sh.Name = "MaFeuille" Then
  If Not (Intersect(Target, Range("Hotte", "Masque")) Is Nothing) Then
    'Mise en forme de la cellule
    Target.Font.Name = "Wingdings"
    Target.HorizontalAlignment = xlCenter
    'Empêche la sélection de la cellule après le double-clic Cancel = True
    'Teste de la valeur de la cellule
    If Target.Value = "o" Then
      Target.Value = "ý"
    ElseIf Target.Value = "ý" Then
      Target.Value = "o"
    Else: Target.Value = "ý"
    End If
    Target.Select
  End If
End If
End Sub

A+
 

Pierrot93

XLDnaute Barbatruc
Re : problème de sélection de cellules et VBA

Bonjour Guizmo, David

peut être placé ce code dans le module de la feuille concernée, plutot que dans le module "thisworkbook", comme cela le code ne se déclenchera que sur le double click fait sur la bonne feuille :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

@+

Edition : bonjour Bruno
 
Dernière édition:

guizmo114

XLDnaute Nouveau
Re : problème de sélection de cellules et VBA

merci de ta réponse G.David et c'est ce que je pensais, il est donc nécessaire que je modifie le code VBA cependant, comment le modifier et où ?
j'ai fais pas mal d'essais cependant, rien n'est concluant (faut dire aussi que je ne connais pratiquement pas VBA (voir pas du tout))
il faudrait donc que je définisse dans le code quelle feuille est concernée par la commande... mais comment faire :confused:

thomas qui est perdu

EDIT: je viens de voir vos messages et je vais essayer ça de suite.
je vous tient au courant...
 

guizmo114

XLDnaute Nouveau
Re : problème de sélection de cellules et VBA

merci a tous pour vos réponses plus que rapide... allez retournez travailler c'est fini la pause ! :D

Bruno, ta première solution ne marche pas (les cases ne se cochent plus) par contre la seconde marche:

Ou tester le nom de la feuille ou se fait le double clique

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Teste si la cellule ayant recu un double-clic fait partie de la plage Hotte, gants et masque
'Cette plage a été définie de manière dynamique à l'aide de la fonction suivante :
' =DECALER(fiche_exposition!$K$13;;;100) pour Hotte
' =DECALER(fiche_exposition!$L$13;;;100) pour Gants
' =DECALER(fiche_exposition!$M$13;;;100) pour masque
'Voir le menu Insertion - Nom - Définir
If Sh.Name = "MaFeuille" Then
  If Not (Intersect(Target, Range("Hotte", "Masque")) Is Nothing) Then
    'Mise en forme de la cellule
    Target.Font.Name = "Wingdings"
    Target.HorizontalAlignment = xlCenter
    'Empêche la sélection de la cellule après le double-clic Cancel = True
    'Teste de la valeur de la cellule
    If Target.Value = "o" Then
      Target.Value = "ý"
    ElseIf Target.Value = "ý" Then
      Target.Value = "o"
    Else: Target.Value = "ý"
    End If
    Target.Select
  End If
End If
End Sub


merci encore à tous pour votre aide.

Thomas
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
290 833
Messages
1 910 790
Membres
176 869
dernier inscrit
veusavoir
Haut Bas