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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  5. #5
    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

  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

+ 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, 14h24
  2. Comment change l'utilisateur root de mysql?
    Par silvermoon dans le forum Installation
    Réponses: 3
    Dernier message: 29/10/2003, 11h25
  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, 11h29
  4. Evenement Change
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2002, 10h08
  5. Réponses: 3
    Dernier message: 22/07/2002, 14h19

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