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 :

[E-07-VBA] Evenement au niveau cellulaire :D


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut [E-07-VBA] Evenement au niveau cellulaire :D
    Bonjour,
    Voila je sais que dans les modules il y a les événements changement de feuilles de calcul j'aimerais savoir si il y a un événement pour la cellule.
    Je m'explique:
    Pour un module que je dois développer je dois prendre en compte la modification de la cellule. Je recherche donc un moyen dans une feuille de calcul précise enfin un ensemble de feuille de calcul dont le nom est similaire de voir quand une cellule est modifié accéder à cette cellule et y faire un traitement.
    Ou sinon j'avais une autre piste celle d'aller chercher l'historique des actions d'excel mais là encore je ne sais pas si c'est possible...
    Enfin je cherche des pistes ....
    si cela n'est pas possible cela n'est pas très grave j'ai une autre solution qui reste lourde mais qui convient pour mon projet...
    Sauvegarde comparaison de feuille de calcul...
    Lourd mais marche
    Merci de votre aide.
    HqSeO

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Il n'existe pas d'évènement permettant de traiter une même plage de plusieurs feuilles - il faut traiter chaque feuille séparément.
    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
    '   Dans le module de feuille concernée     '
    ' --------- Exemple de filtrage --------    '
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case Target.Address
            Case "$E$3"
                If Target.Value = 1 Then myProcédureDeTraitementGlobal Target
     
        End Select
    End Sub
     
    'Dans un module standart                    '
    ' --------- Exemple de traitement --------  '
    Sub myProcédureDeTraitementGlobal(rg As Range)
        Dim sh As Worksheet
     
        Set sh = rg.Parent
        Debug.Print rg.Address, sh.Name
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut
    excuse moi mais je comprend pas ton bout de code à quoi il sert ^^
    hum de toute façon c'est pas grave y a t'il un moyen pour accéder à l'historique des actions de excel ?
    Merci de ta réponse

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Alors, voici quelques éléments de réponse qui vont probablement t'intéresser:
    -si tu regarde dans l'explorateur d'objets, tu vois qu'il n'y a aucun évènement associé au type Range, donc non il n'y a aucun évènement pour les cellules.
    -pour les évènements qui ne sont ni liés aux objets de type Workbook, ni liés aux objets de type Worksheet, tu dois utiliser la syntaxe suivante, à mettre dans un quelconque module de classe (ThisWorkbook et les modules de feuilles Excel peuvent donc faire l'affaire). Exemple pour gérer les évènements de l'objet Application dans un module de classe quelconque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Withevents appXL As Excel.Application
     
    Private Sub appXL_NewWorkbook(ByVal Wb As Workbook)
        ' Tu gères l'ouverture d'un nouveau classeur
    End Sub
     
    Private Sub Class_Initialize()
        Set appXL = Excel.Application
    End Sub
    -si tu veux tout de même gérer des "évènements" pour tes cellules, je pense que cela peut être possible via ce qu'on appelle le sous-classement, mais cela fait appel à des connaissances très poussées en VB/VBA que je ne maîtrise pas, de par le fait que je ne m'en suis jamais servi (en plus je ne comprends pas tout). Pour ça je connais quelqu'un qui pourrait t'aider, mais je pense qu'on ne va pas le déranger si cela n'est pas absolument nécessaire.


    Voilà. J'espère avoir répondu à tes attentes.

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par decondelite Voir le message
    Alors, voici quelques éléments de réponse qui vont probablement t'intéresser:
    -si tu regarde dans l'explorateur d'objets, tu vois qu'il n'y a aucun évènement associé au type Range, donc non il n'y a aucun évènement pour les cellules.
    .../...
    Surement mon neveu - vérifie avant d'affirmer.

    ---

    Cette fois-ci, maché et prédigéré.

    Ajouter un module de classe nommé classSheetEvents avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private WithEvents sh_ As Worksheet
     
    Public Sub Init(sh As Worksheet)
        Set sh_ = sh
    End Sub
     
    Private Sub sh__Change(ByVal Target As Range)
        ' Exemple de traitement '
        MsgBox "La cellule [" & Target.Parent.Name & "!" & Target.Address & "] vient d'être modifiée" & vbCrLf & "Nouvelle valeur : " & Target.Value
    End Sub
    Dans l'exemple utilisé, toute modification de la valeur d'une cellule entraine le traitement (ici msgbox ...)
    PS: Seules les modifications manuelles seront traitées (modification par le code VBA ou DDE inactives)



    Dans le module ThisWorkBook, déclaration des feuilles à traiter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim clsE() As classSheetEvents
     
    Private Sub Workbook_Open()
        Dim i As Long, sh As Worksheet
        For Each sh In ThisWorkbook.Worksheets
          if sh.name like "Feuil*" then
            i = i + 1: ReDim Preserve clsE(1 To i)
            Set clsE(i) = New classSheetEvents
            clsE(i).Init sh
          endif
        Next
    End Sub
    Dans l'exemple utilisé, c'est l'évènement Worksheet_change qui est traité
    mais tout autre évènement de feuille peut également l'être.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Sans vouloir te vexer, ça c'est ce que j'appelle des évènements de feuille, pas des évènements de cellule.
    Ne mélangeons pas les termes, svp. Un évènement de cellule et un évènement ayant une cellule en paramètre, ce n'est pas la même chose.

    De plus, il n'est peut-être pas nécessaire de déclarer une variable supportant les évènements dans le cas des évènements de feuille, dans la mesure où la gestion de l'évènement ne doit être appliquée qu'à une seule feuille, auquel cas c'est le module de feuille qui doit contenir le code.

    Je reconnais que je n'ai pas lu le post en entier car je ne voulais faire qu'un très rapide passage, auquel cas j'aurais mieux cerné la demande, mais il faut tout de même avouer que la phrase initiale a de quoi mettre en doute. Les feuilles gèrent les évènements, mais pas les cellules, ça ressemble beaucoup à ce qu'il y a d'écrit dedans.

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

Discussions similaires

  1. [VBA] Problème au niveau du copier
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/03/2009, 15h57
  2. [Word VBA]Obtenir le niveau de hiérarchisation
    Par Tealck dans le forum VBA Word
    Réponses: 3
    Dernier message: 05/03/2009, 18h57
  3. O2K3-VBA : Evenement à la création d'un contact
    Par sebinator dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 09/07/2008, 13h07
  4. [VBA] erreur au niveau du code
    Par torNAdE dans le forum Access
    Réponses: 9
    Dernier message: 26/07/2006, 15h33
  5. [VBA] Evenement Click Cellule
    Par kribot dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2005, 10h47

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