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 :

[VBA Excel]Glisser et pinceau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Tan
    Tan est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Par défaut [VBA Excel]Glisser et pinceau
    Bonjour,
    Je souhaitais détecté l'action "glisser une cellule" dans mon projet excel, ce que j'ai fait en gérant les évènements 2 change puis1 selectionChange
    Dans le premier évènement change, je regarde si la cellule d'origine est différente de la cellule de destination.
    Si oui, il s'agit d'un glisser, et je fais ce que j'ai à faire (undo pour récupérer les anciennes valeurs, puis traitement).

    Cela marche bien, sauf que récemment j'ai constaté que mon traitement ce déclenchait lorsque j'utilisais le pinceau (déclenche 1 change et 1 selectionChange).
    Le premier change a aussi une cellule d'origine et une cellule de destination différente, donc il déclenche le traitement et je ne le veux pas.

    Voici (simplifié), comment je procède:
    Dans une feuille Excel, je mets ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        ' Si l'origine et la destination sont différentes
        If Target.Address <> prevCel.Address Then
            MsgBox "Il y a un glissé"
            ' Traitement
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Set prevCel = Target
    End Sub
    Ce que je voudrais, ce serait un moyen de détecter si j'utilise le pinceau (variable récupérant le contenu du pinceau, si ça existe).

    Ceci, me permetterai de garder mon code en rajoutant simplement une condition.
    Sinon, je devrait tout modifier, et ce ne sera pas évident à cause du traitement.

    Sinon une solution serait:
    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
    18
    19
    20
    21
    22
    Dim prevCel As Range
    Dim intcountEvent As Integer
    Dim bGlisserPeinture As Boolean
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        ' On compte les passsages dans change
        intcountEvent = intcountEvent + 1
        ' Si l'origine et la destination sont différentes on indique un glisser où une peinture
        If Target.Address <> prevCel.Address Then bGlisserPeinture = True
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Set prevCel = Target
        ' Si peinture
        If intcountEvent = 1 And bGlisserPeinture = True Then
            MsgBox "il y a eu peinture"
        ElseIf intcountEvent = 2 And bGlisserPeinture = True Then
            MsgBox "il y a eu glisser"
        End If
        intcountEvent = 0
        bGlisserPeinture = False
    End Sub
    Mais le traitement que j'ai fait complique énormement la chose. Donc, s'il existe un moyen de détecter les peintures...

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    qu'est ce donc que le pinceau

  3. #3
    Tan
    Tan est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Par défaut
    Pardon,
    Dans, la barre d'outil standard d'excel, à côté de couper, copier, coller et il y a un pinceau. Cela sert à reproduire la mise en forme des cellules selectionnées.
    Enfin, moi j'appelle ça pinceau.

    Tu selectionnes des cellules, tu cliques sur le "pinceau", là les cellules sont encadrées comme pour un couper. Tu selectionnes des cellules de destination et ça copie la mise en forme.

    C'est une sorte de copier, mais sans les valeurs.

    Comme, les cellules sont encadrées, il doit y avoir quelque part, une infos permettant de savoir quelque sont ces cellules encadrées.
    Cela pourrait m'aider si ça existe, sinon, je recherche une autre fonction ou propriété permettant de savoir, si le "pinceau" est actif.
    Merci.

  4. #4
    Tan
    Tan est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Par défaut
    J'ai trouvé la propriété CutCopyMode qui indique si l'on est en mode copy (ce qui est le cas pour l'utilisation du pinceau)

    Mais dès l'entrée dans l'évenement change, le mode CutCopyMode est déjà inactif.

    Voilà, le raisonnement est pas mal, si seulement le mode CutCopyMode devenait inactif après l'évènement change

    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
    Dim prevCel As Range
     
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        ' Si l'origine et la destination sont différentes on indique un glisser où une peinture
        If Target.Address <> prevCel.Address Then
            ' Si le mode copie est actif, il s'agit d'une peinture
            If Application.CutCopyMode = xlCut Then
                MsgBox "il y a peinture"
            Else
                MsgBox "il y a glisser"
            End If
        End If
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Set prevCel = Target
    End Sub
    Je n'ai donc toujours pas trouvé.

  5. #5
    Tan
    Tan est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Par défaut
    Pour info, je n'ai pas trouvé les propriétés que je voulais, j'ai donc utilisé la méthode alternative que j'avais mis dans mon premier message.
    Ca m'a fait faire pas mal de modif du coup,mais au moins ça m'a fait mettre de l'ordre.

    Il est a noter qu'il peut y avoir des problème avec le la fonction annuler. Mais ce n'est pas grave.

    Mais, je ne crois pas qu'il soit possible de détecter l'annulation (sauf peut-être de manière très bourrin).

    Je considère donc ce post come résolu.

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

Discussions similaires

  1. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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