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 :

Workbook SheetSelection Change [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Workbook SheetSelection Change
    Bonjour,

    Je débute en vba et suis actuellement en stage... J'ai besoin d'un peu d'aide.
    Dans mon classeur, l'utilisateur à la possibilité de sélectionner un traitement dans la cellule E4. En fonction du traitement affiché cela me rajoute ou non des colonnes à chaque changement de sélection.

    Cependant mon code de cette manière là fais que à chaque fois que en code je fais une sélection ça m'execute pour rien Workbook_SheetSelectionChange. J'aimerai savoir comment remédier à ça... :
    En regardant sur les forums j'ai fait plusieurs tests, j'ai notamment essayé avec If Not Intersect("E4",Target) Is Nothing Then mais je n'arrive pas à comprendre et donc à faire fonctionner mon code...

    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
    23
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
     
        If Range("E4").Value = "Recyclage" Then                     'Si traitement = recyclage alors il faut :
               Range("N34").Value = "Lab Recyclage"                    'Remplir l'en tête de N34, O34 et P34
               Range("O34").Value = "Spec Recyclage"
               Range("P34").Value = "Ind Recyclage Product"
               ActiveWorkbook.Save                                     'Sauvegarde du classeur
        Else
               If Range("E4").Value = "Valorisation" Then
                   Range("N34").Value = "Lab Valorisation"             'Remplir l'en tête de N34, O34 et P34
                   Range("O34").Value = "Spec Valorisation"
                   Range("P34").Value = "Ind Valorisation Product"
                   ActiveWorkbook.Save                                 'Sauvegarde du classeur
                Else
                    Range("N34").Value = ""
                    Range("O34").Value = ""
                    Range("P34").Value = ""
                    End If
        End If
     
    End Sub
    Merci d'avance pour votre aide...

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Par défaut
    Bonjour,
    c'est quoi (n34,p34...)?tu veux rajouter des colonnes ou modifier les entête?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Par défaut
    Bonjour juju1988,

    Je pense que tu n'es pas loin de la solution. Essaie avec ça :

    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
      If Not Intersect(Target, Range("E4")) Is Nothing Then
        If Range("E4").Value = "Recyclage" Then                     'Si traitement = recyclage alors il faut :
               Range("N34").Value = "Lab Recyclage"                    'Remplir l'en tête de N34, O34 et P34
               Range("O34").Value = "Spec Recyclage"
               Range("P34").Value = "Ind Recyclage Product"
               ActiveWorkbook.Save                                     'Sauvegarde du classeur
        Else
               If Range("E4").Value = "Valorisation" Then
                   Range("N34").Value = "Lab Valorisation"             'Remplir l'en tête de N34, O34 et P34
                   Range("O34").Value = "Spec Valorisation"
                   Range("P34").Value = "Ind Valorisation Product"
                   ActiveWorkbook.Save                                 'Sauvegarde du classeur
                Else
                    Range("N34").Value = ""
                    Range("O34").Value = ""
                    Range("P34").Value = ""
                    End If
        End If
      End If
    End Sub
    J'ai volontairement repris tel quel ton code en y ajoutant le traitement demandé, sans chercher à l'optimiser.

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est pas l'évènement SlectionChange qu'il faudrait, mais seulement le change
    si tu as le code à affecter à une seule feuille, utilise l'évènement Change de la feuille en question
    ce qui donne
    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_Change(ByVal Target As Range)
    If Target.Address = "$E$4" Then
        Application.EnableEvents = False
        If Target.Value = "" Then
            Range("N34:P34").ClearContents
        Else
            Range("N34").Value = "Lab " & Target.Value
            Range("O34").Value = "Spec" & Target.Value
            Range("P34").Value = "Ind " & Target.Value & " Product"
        End If
        Application.EnableEvents = True
    End If
    End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    thugelife : je modifie mes entêtes de colonne ...

    Yoyo57 : J'ai essayé comme tu m'as dit mais du coup mes en têtes ne se modifient pas à chaque changement de sélection dans ma cellule E4

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Citation Envoyé par mercatog Voir le message
    C'est pas l'évènement SlectionChange qu'il faudrait, mais seulement le change
    si tu as le code à affecter à une seule feuille, utilise l'évènement Change de la feuille en question
    ce qui donne
    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_Change(ByVal Target As Range)
    If Target.Address = "$E$4" Then
        Application.EnableEvents = False
        If Target.Value = "" Then
            Range("N34:P34").ClearContents
        Else
            Range("N34").Value = "Lab " & Target.Value
            Range("O34").Value = "Spec" & Target.Value
            Range("P34").Value = "Ind " & Target.Value & " Product"
        End If
        Application.EnableEvents = True
    End If
    End Sub
    J'ai essayé ton code ... Cependant pareil cela ne me change pas mes en têtes à chaque sélection d'un traitement dans E4 ...

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Où tu as mis le code? sur le module de la feuille en question?
    la valeur de E4 est changée par l'utilisateur ou par formule?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    ex : valorisation, recyclage, react ...
    Si il sélectionne valorisation et recyclage cela ajoute des colonnes dans un tableau de la feuille comme vous avez pu le voir dans mon code

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu lis ce que j'écrivais ou hâtivement vers le copier coller?
    C'est pas l'évènement SlectionChange qu'il faudrait, mais seulement le Change
    si tu as le code à affecter à une seule feuille, utilise l'évènement Change de la feuille en question
    Donc à mettre dans le module de la feuille en question

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Alors j'ai essayé de copier coller dans le module (désolée j'avais pas vu cette ligne) cependant cela ne fonctionnait pas car cela ne me modifiait pas les intitulés des colonnes selon la sélection.
    J'ai donc testé de mettre le code dans la feuille directement et cela fonctionne de cette manière j'ai juste inversé les boucles :

    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_Change(ByVal Target As Range)
    If Target.Address = "$E$4" Then
        Application.EnableEvents = False
        If Target.Value = "Recyclage" Or Target.Value = "Valorisation" Then
            Range("N34").Value = "Lab " & Target.Value
            Range("O34").Value = "Spec" & Target.Value
            Range("P34").Value = "Ind " & Target.Value & " Product"
        Else
            Range("N34:P34").ClearContents
        End If
        Application.EnableEvents = True
    End If
    End Sub
    Merci bien pour votre aide en tout cas

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

Discussions similaires

  1. excel workbook.worksheets(1) qui ne change pas
    Par MalkoLinge dans le forum Windows Forms
    Réponses: 0
    Dernier message: 11/08/2010, 15h24
  2. Comment change l'utilisateur root de mysql?
    Par silvermoon dans le forum Installation
    Réponses: 3
    Dernier message: 29/10/2003, 12h25
  3. En quoi XML est-il un moyen universel d'échange de données ?
    Par Pomalaix dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 27/01/2003, 12h29
  4. Evenement Change
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2002, 11h08
  5. Réponses: 3
    Dernier message: 22/07/2002, 15h19

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