VBA: Choix de syntaxe (erreurs ou pas)

  • Initiateur de la discussion Initiateur de la discussion Staple1600
  • 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 !

Staple1600

XLDnaute Barbatruc
Bonne nuit le forum

Une question avant d'éteindre le PC

De ces deux macros, laquelle dois-je privilégier?
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ListCOL: ListCOL = 2: Set f = Worksheets(ActiveSheet.Name)
With Selection
    If .Row > 1 And .Column = 2 Then _
    f.Cells(Selection.Row, ListCOL) = f.Cells(1, ListCOL)
End With
End Sub
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ListCOL: ListCOL = 2: Set f = Worksheets(ActiveSheet.Name)
If Selection.Row > 1 And Selection.Column = 2 Then
f.Cells(Selection.Row, ListCOL) = f.Cells(1, ListCOL)
End If
End Sub

Quelque la macro choisie, il se passe parfois des choses bizarres

(selection de B1 aléatoire et non désirée)

Précision: en B1 Données/Validation/Liste : Présent,Absent,Déplacement,Autre

Merci pour votre aide et vos conseils avisés.

Bonne nuit à tous.
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Bonjour Staple,

je sais pas laquelle des 2, mais perso je mélangerais pas les déclarations de variables et les instructions, je déclarerais f comme suit :
Code:
Dim f As Worksheet
quoique a priori, inutile de le déclarer et l'utiliser, puisque nous sommes forement sur cette feuille... et surtout je remplacerais "selection" par "Target", variable déclarée dans la procédure évènementielle.

bonne journée
@+
 
Dernière édition:
Re : VBA: Choix de syntaxe (erreurs ou pas)

Staple1600 à dit:
Bonne nuit le forum

Une question avant d'éteindre le PC

De ces deux macros, laquelle dois-je privilégier?
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ListCOL: ListCOL = 2: Set f = Worksheets(ActiveSheet.Name)
With Selection
    If .Row > 1 And .Column = 2 Then _
    f.Cells(Selection.Row, ListCOL) = f.Cells(1, ListCOL)
End With
End Sub
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ListCOL: ListCOL = 2: Set f = Worksheets(ActiveSheet.Name)
If Selection.Row > 1 And Selection.Column = 2 Then
f.Cells(Selection.Row, ListCOL) = f.Cells(1, ListCOL)
End If
End Sub

Quelque la macro choisie, il se passe parfois des choses bizarres

(selection de B1 aléatoire et non désirée)

Précision: en B1 Données/Validation/Liste : Présent,Absent,Déplacement,Autre

Merci pour votre aide et vos conseils avisés.

Bonne nuit à tous.
Salut
P'vez répéter la question ?!? 😕
Pourquoi tu utilises selection ? Pourquoi tu n"annules pas le passage en mode édition qui lance la macro ? Pourquoi tu définis certaines variables (sans les définir complêtement) et pas toutes ?

L'utilisation de with est une astuces de programmeur pour éviter de répéter des préfixes d'instructions. Donc, ça n'a pas d'incidence sur le fonctionnement de ton code (surtout sur 3 lignes).

Mais le fait de ne pas sortir du mode édition (avec Cancel=true) lui doit avoir des corrélations avec ton problème.

Moi, je traiterais ta macro comme ça :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 
Cancel=true
If target.Row > 1 And target.Column = 2 Then _
    target = range("B1")
End Sub
Mais comme je ne connais pas la finalité de ta macro, ce n'est qu'une interprétation perso de ton code

A+
 
Dernière édition:
Re : VBA: Choix de syntaxe (erreurs ou pas)

Bonjour à tous et merci pour vos réponses


Voici un fichier exemple


J'ai utilisé et modifié le code de Gorfael (merci à toi)


Le code de départ vient d'un fichier exemple trouvé sur le net
(J' ai le repris en le modifiant selon mes tatonnements)

Le but est: quand double-clic dans la colonne B, une valeur s'inscrit
(en fontion d'un valeur affichée en B1 à l'aide d'une liste)

Le bouton RAZ efface le contenu de la colonne B.

Ce qui m'amène à la question suivante

Comment faire ceci:

1 clic dans un cellule (en B:B) -> la valeur s'inscrit dans la cellule
1 second clic -> effacement de la précedente valeur

Merci pour vos conseils et bonne journée.
 
Dernière édition:
Re : VBA: Choix de syntaxe (erreurs ou pas)

Re,

je sais pas si j'ai tout compris, je verrais bien cela comme ca :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 2 Or Target.Row = 1 Then Exit Sub
If IsEmpty(Range("B1")) Then
    MsgBox "Veuillez renseigner la cellule B1"
Else
    Target.Value = Range("B1").Value
End If
Cancel = True
End Sub

bon après midi
@+
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Aarf mauvaise version, voilà la bonne, enfin j'espère...

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 2 Or Target.Row = 1 Then Exit Sub
If IsEmpty(Range("B1")) Then
    MsgBox "Veuillez renseigner la cellule B1"
Else
    If IsEmpty(Target.Value) Then
        Target.Value = Range("B1").Value
    Else
        Target.Value = ""
    End If
End If
Cancel = True
End Sub
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Bonjour Pierrrot93 (re pour les autres)


J'ai teste ta dernière version

Cela fonctionne en faisant un double-clic

J'ai souvenir d'avoir teste un classeur (je ne sais plus son origine)

ou quand on clique (un seul clic) sur une cellule la macro se déclenche.
(dans ce classeur un clic mettait un X dans la cellule active)

C'est ce que je voudrais obtenir

Un clic= valeur inscrite dans la cellule active (selon valeur Liste B1)
Un deuxième clic= valeur effacée

Je cherche en attendant vos conseils.

Bonne fin de journée
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Oui je me disais aussi...l'évènement simple click(gauche) n'existe pas, il me semble avoir déjà vu un ou 2 fils la dessus utilisant l'évènement selectionchange, mais pas trop le top... déclencher avec les flêches de direction, les tabulations ou entrée...il faut controler les touches utilisées...

@+
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Staple1600 à dit:
Bonjour Pierrrot93 (re pour les autres)


J'ai teste ta dernière version

Cela fonctionne en faisant un double-clic

J'ai souvenir d'avoir teste un classeur (je ne sais plus son origine)

ou quand on clique (un seul clic) sur une cellule la macro se déclenche.
(dans ce classeur un clic mettait un X dans la cellule active)

C'est ce que je voudrais obtenir

Un clic= valeur inscrite dans la cellule active (selon valeur Liste B1)
Un deuxième clic= valeur effacée

Je cherche en attendant vos conseils.

Bonne fin de journée
Salut
un clic remplit la cellule concernée si elle est seule et vide avec B1
si elle n'est pas vide, la vide
si la sélection est multiple ou concerne B1 ne fait rien
A+
 

Pièces jointes

Re : VBA: Choix de syntaxe (erreurs ou pas)

Bonjour Gorfael (re pour les autres)


J'ai teste ton exemple

Cela fonctionne mais il reste quelques soucis

En B1 Données/Validation/Listes valeur1;valeur2;valeur3

En B1 je choisis valeur2

Si je clique par exemple en B3 alors B3 prend la valeur2 (donc ca ok)
Si je clique une seconde fois (mais il faut d'abord sortir de la cellule active)
Le contenu de B3 est effacé (ca ok)

Mais si je change la valeur de B1 en valeur1
et je clique sur B3, le contenu est effacé
et il faut recliquer une fois pour mettre la nouvelle valeur dans B3.

Question:
Peut-on rémédier à ces légers problèmes
ou l'évenment Private Sub Worksheet_SelectionChange()
impose t-il de faire comme Gorfael dans le code de son exemple?
 
Re : VBA: Choix de syntaxe (erreurs ou pas)

Bonsoir à tous

Excel_lent
J'ai commenté cela dans ton code
' Range("B1").Select

Pas besoin de selectionner la cellule B1 à chaque fois

Autrement cela semble fonctionner (merci à toi, à tous)

Bonne soirée
 
- 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

Discussions similaires

Retour