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 :

Validation de données - effectuer une action sur le choix d'un élément de la liste en VBA. [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut Validation de données - effectuer une action sur le choix d'un élément de la liste en VBA.
    Bonjour,

    J'ai longuement cherché sur le forum en vain une solution simple à un problème qui paraît tout aussi simple et que néni

    J'utilise la "validation des données" pour créer une liste déroulante à 2 choix dans une cellule. La source de cette liste "OUI;NON" est saisie directement dans la boite de dialogue "Validation des données".

    A l'utilisation, si "OUI" est choisi dans la liste, je souhaite colorier une cellule en gris. Si "NON" ou si "" est choisi, je souhaite décolorier la même cellule grisée.

    Ma première problèmatique consiste à comprendre la structure mise en oeuvre par ce type de liste et le ou les moyens d'accèder aux données en VBA ?
    A priori, je suppose qu'il y a derrière une notion de tableau à 2 dimensions (une pour l'index 0,1,2 et une autre pour les datas "",OUI,NON) attaché à la cellule qui porte la validation des données.
    Si quelqu'un a une explication, je suis preneur.

    Ma seconde problèmatique consiste à gérer en VBA le changement de données "OUI/NON" pour appliquer l'action que je souhaite.
    Pour celà, j'utilise sur la feuille concernée
    Sub Worksheet_SelectionChange(ByVal Target As Range)
    mais je n'arrive à rien de concret.

    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 551
    Points : 787
    Points
    787
    Par défaut
    Bonjour,

    Y a faire une mise en forme conditionnelle

    merci
    Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider

    n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut
    Euh ! oui, c'est à dire ?
    Je ne suis pas sûr qu'une mise en forme conditionnelle suffise pour réponde à ma problèmatique de gestion des listes "Validation des données" en VBA. Mais comme je méconnais cette technique...
    En revanche je ne souhaite pas mettre en place une solution dérivée qui repose sur autre chose que la "validation des données". Je cherche à comprendre et à maîtriser ce type de liste.

  4. #4
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 551
    Points : 787
    Points
    787
    Par défaut
    regarde le classeur joint si c'est ca

    Pièce jointe 174811
    Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider

    n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut
    Waouh ! super . Je ne connaissais pas cette fonctionnalité. Elle m'aidera dans la suite de mon projet. Donc déjà un grand merci.

    Pour revenir plus précisément à mes contraintes,
    - les données ("OUI;NON;"") ne doivent pas être définies dans un autre feuillet. Elles sont mémorisées "en dur" dans la boîte de dialogue.
    - La cellule à colorier est différente de celle qui héberge la liste . Elle peut par exemple être en A1 avec la liste en B1.

    En fait, j'ai besoin de gérer la sélection faite en B1 par une routine VBA pour gérer une action en A1 (coloriage pour l'exemple mais ça pourrait être tout autre action du type si "OUI" en B1 écrire "TOTO" en A1, ...). Ma problèmatique c'est que en VBA, je n'arrive pas à gérer la sélection des items de la liste.

  6. #6
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 551
    Points : 787
    Points
    787
    Par défaut
    bonjour,

    d'après ce que j'ai compris voici le classeur essai

    bonne réception.

    Pièce jointe 174886
    Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider

    n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut
    Super un GRAND merci. C'est top pil poil ce que je cherchais.
    J'ai copié ton code ci dessous pour qu'il serve à d'autres le cas échéant.

    Merci encore

    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_Change(ByVal Target As Range)
     
    If Not Intersect([B1:B65536], Target) Is Nothing Then
         If Target = "OUI" Then
     
        ActiveCell.Offset(0, -1).Value = "toto"
     ActiveCell.Offset(0, -1).Interior.Color = RGB(192, 192, 192) 'couleur cellule
     
    ElseIf Target = "NON" Then
     
         ActiveCell.Offset(0, -1).Value = "hihihi"
      ActiveCell.Offset(0, -1).Interior.Color = RGB(255, 255, 255) 'couleur cellule
     
    End If
        End If
     
    End Sub

  8. #8
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 551
    Points : 787
    Points
    787
    Par défaut
    De rien, ça fait toujours plaisir de faire plaisir

    Merci de marqué résolu, comme ça d'autres verront mieux s'il cherche quelque chose de similaire.
    Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider

    n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut
    Pas de chance lorsque je transpose le code sur ma feuille, J'ai un message d'erreur de type sur la ligne
    if target = "OUI" Then
    alors que sur ta feuille tout va bien.
    Ca viendrait de où à ton avis ?

  10. #10
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 551
    Points : 787
    Points
    787
    Par défaut
    Normalement y a pas de soucis à avoir, peut être une erreur dans la saisie du code, faite un copier coller du 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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Intersect([B1:B65536], Target) Is Nothing Then
         If Target = "OUI" Then
     
        ActiveCell.Offset(0, -1).Value = "toto"
     ActiveCell.Offset(0, -1).Interior.Color = RGB(192, 192, 192) 'couleur cellule
     
    ElseIf Target = "NON" Then
     
         ActiveCell.Offset(0, -1).Value = "hihihi"
      ActiveCell.Offset(0, -1).Interior.Color = RGB(255, 255, 255) 'couleur cellule
     
    End If
        End If
     
    End Sub
    et bien sur à mettre dans code de la feuille
    Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider

    n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter

  11. #11
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 164
    Points
    164
    Par défaut
    Le copier/coller n'a rien changé. La seule explication rationnelle que j'ai pu trouver serait que le classeur sur lequel je travaille ayant été créé sous Excel 2010 puis modifié en partie sur excel 2013 pour être au final travaillé en VBA sous EXCEL 2010, il ne réagirait plus de la même façon. Mais ce n'est qu'une supposition, n'ayant plus le moyen de reproduire le contexte.

    Fort des conclusions de cette investigation, j'ai donc recopié les onglets dans un classeur tout neuf créé sous Excel 2010 et là oh miracle, ça marche du tonnerre de feu.

    Je savais bien que se serait simple mais sans ton aide je crois que j'y serais encore.
    Donc un très très grand merci et peut être à bientôt sur de nouvelles aventures.

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

Discussions similaires

  1. Effectuer une action après le choix d'un fichier
    Par fullmetalkeke dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/06/2013, 18h11
  2. Réponses: 9
    Dernier message: 23/06/2008, 15h54
  3. Script qui effectue une action automatiquement sur serveur
    Par poitierjohan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/04/2008, 00h09
  4. Réponses: 4
    Dernier message: 11/01/2008, 12h18
  5. Réponses: 1
    Dernier message: 09/07/2007, 14h13

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