IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Déselection d'une cellule après Worksheet_BeforeDoubleClick


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 660
    Par défaut Déselection d'une cellule après Worksheet_BeforeDoubleClick
    Bonjour,

    Si je n'inscris rien dans la cellule (cf. mon code, à la ligne "mon pb est ici), le curseur apparaît néanmoins et permet une autre saisie que celle que j'ai prévue par la variable "synthese". Comment peut-on éviter la présence du curseur ? J'ai essayé avec un "application.cutcopymode" mais ça ne fonctionne pas.
    Par ailleurs, quand je clique sur une cellule protégée de ma feuille, le curseur de déplace spontanément sur la zone non protégée et dans le cas présent ça peut poser problème à l'utilisateur distrait. Peut-on éviter cela ?
    Je vous remercie d'avance pour vos réponses éventuelles,
    Cordialement,

    '------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'ok
     
        prem_col = [i2]
        dern_col = [i3]
        prem_lign = [i4]
        dern_lign = [i5]
        synthese = [i11]
     
        If Target.Row > prem_lign - 1 And Target.Row < dern_lign + 1 And (Target.Column > prem_col - 1 And Target.Column < dern_col + 1) Then
             If Target.Offset(0, 0).Value = "" Then
               Target.Offset(0, 0).Value = synthese
            Else
               Target.Offset(0, 0).Value = ""   [mon problème est ici !]
            End If
        End If
        Cancel = True
    End Sub
    '------

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour jpma75,

    Je n'ai pas réellement compris ton problème, peux-tu le réexpliquer avec un exemple plus concret ?

    En tout cas, tu peux simplifier ton code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim rg As Range, synthese 'as type
        Set rg = Range(Cells([I4], [I2]), Cells([I5], [I3]))
        synthese = [I11]
            If Not Application.Intersect(Target, rg) Is Nothing Then
                If Target = "" Then
                    Target = synthese
                Else
                    Target = ""
                End If
            End If
        Cancel = True
    End Sub
    Il fait exactement la même chose.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 660
    Par défaut
    Bonjour,

    Merci pour ta proposition de simplification de code.

    Je vais essayer d'être plus clair.
    La variable "synthèse" est la combinaison d'une date et des initiales de l'utilisateur (informations concaténées et renseignées dans la cellule I11).
    Sur ma feuille, si je fais un double-clic sur la zone prédéfinie (et donc non protégée), la valeur de "I11" s'inscrit dans la cellule sélectionnée. Cette même valeur s'efface, si je refais un double-clic.
    Le problème est que si je l'efface, le curseur reste dans la cellule et clignote comme s'il attendait une pression sur la touche "ENTER". A ce moment-là, si l'utilisateur décider d'entrer quoique ce soit, ça s'inscrit dans la cellule alors que ne devrait y figurer que le contenu de la cellule "I11".
    Comme artifice, j'avais prévu, une fois le double-clic effectué, de sélectionner une autre cellule de la zone non protégée, ce qui revenait à valider la cellule initiale !
    J'ai posté une autre question dans la même logique : "comment puis-je sauvegarder l'adresse de cette cellule initiale" de sorte que si je déplace temporairement ma sélection sur une autre cellule (lambda) je puisse revenir à la cellule "active".

    Question subsidiaire : Je me suis rendu compte que si je fais un double-clic sur une zone protégée de ma feuille, le curseur se déplace automatiquement sur la première cellule en haut à gauche de ma zone non protégée... Et dans le cas présent, l'utilisateur distrait pourrait saisir le contenu d' "I11" par inadvertance ! Peut-on rendre le "double-clic" inactif sur une zone protégée (sachant qu'il doit normalement opérer que sur la zone que j'ai prédéfinie et pour laquelle tu as simplifié mon code) ?

    Merci beaucoup pour ton aide et désolé de n'être peut-être pas assez clair.

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Cells(i,i) est la cellule au croisement de la ligne i et de la colonne j.
    C'est plus simple à utiliser que Range lorsque tu n'as qu'une cellule à prendre.

    Ensuite Range(Cellule_1,Cellule_2) est la plage qui comme première cellule Cellule_1 et pour dernière Cellule_2.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(1,1),Cells(2,2))
    est en fait la même chose que ou même pour raccourcir directement

    En utilisant tout ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rg = Range(Cells([I4], [I2]), Cells([I5], [I3]))
    est en fait une plage dont la première colonne est inscrite en I2, la dernière colonne en I3, la première ligne en I4 et la dernière ligne en I5

    Test le même code avec des valeurs dans ces 4 cellules, y a pas de raison que ça ne marche pas

    jpma75, je n'arrive pas simuler ton problème, chez moi la cellule s'inscrit bien avec la valeur en I11, elle reste sélectionnée mais pas de clignotement.
    Ensuite s'il n'y a pas de cellule protéger dans la plage bornée pas les valeurs des cellules I2, I3, I4 et I5, la sélection ne bouge pas grâce à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, rg) Is Nothing Then
    En gros si tu n'es pas dans la plage bornée, la macro n'exécute que Cancel = True

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rg = Range(Cells([I4], [I2]), Cells([I5], [I3]))
    ce n'est pas l'utilisatin de cells qui me pose problèmes mais l'utilisation entre crochet à l'intérieur de la fonction.
    Chez moi cette notation ne fonctionne pas du tout.

    ceci dis pour le probleme original.

    on peut pour la cellule I11 et le double click In et out faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if not intersect(target, [I11]) is nothing then
        if target="" then 
            target= machinchose
            application.sendkeys "{ESC}"
        else
            target=""
        end if
    end if

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Effectivement Échap ou Enter résoudrait le problème.
    Mais ce n'est pas logique car Dbl_clic fait entrer dans la cellule mais ça ne devrait pas être le cas car dans le l'évènement il y a Cancel = True qui est toujours exécuté.

    EDIT : [A1] et la même chose que Range("A1") c'est juste pour les fainéants ^^
    Tu peux faire [A1].row ou Sheets("Feuil1").[A1] et bien d'autres choses que tu pourais faire avec Range()

  7. #7
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    Bonjour,

    Citation Envoyé par antonysansh Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
        Set rg = Range(Cells([I4], [I2]), Cells([I5], [I3]))
    ...
    ...
    Je ne connais pas cette notation avec cells, et elle ne fonctionne pas chez moi. Tu peux l'expliquer??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment vider une cellule après une validation
    Par PhilGood11 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/02/2012, 21h08
  2. Sélection d'une cellule Après la mise a jour
    Par peofofo dans le forum Composants
    Réponses: 8
    Dernier message: 28/06/2011, 14h44
  3. Réponses: 1
    Dernier message: 22/06/2009, 15h19
  4. Réponses: 3
    Dernier message: 26/02/2009, 14h51
  5. Sélection d'une cellule après un filtre ?
    Par derin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/10/2008, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo