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 dynamiques depuis une variable String


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut Validation de données dynamiques depuis une variable String
    Bonjour,

    je cherche à réaliser des validations de données en cascades avec des listes et des sous liste.

    j'ai réussi à faire une formule qui me liste les éléments unique en fonction d'un paramètre "père".

    par contre j'aimerais mettre cette formule dans les critères de validation d'une cellule, et là je bloque...

    avec un exemple je serais peut être plus clair:
    dans le fichier Classeur2.zip j'aimerais que la validation de la cellule I4 correspondent (dynamiquement) au contenu de la cellule G4 (calculer par ma formule personnalisée).

    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec

    1) copiez le code suivant dans la fenêtre de code de la feuille concernée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$I$4" Then
      Call DelDropDown
      Call AddListe(Source:=[g4], Cible:=Target)
    End If
    End Sub
    2) copiez le code suivant dans un module Standard
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub AddListe(Source As Range, Cible As Range)
    Dim SH As Shape
    Dim DD As DropDown
    Dim var
    '---
    var = Split(Source, ";")
    If UBound(var) < 0 Then Exit Sub
    '--- Création d'une Shape ---
    Set SH = ActiveSheet.Shapes.AddFormControl(xlDropDown, Cible.Left, Cible.Top, Cible.Width, Cible.Height)
    SH.OnAction = "DropDownSurClic"
    SH.Name = "___pmo"
    '--- Récupération du réel objet DropDown ---
    Set DD = SH.OLEFormat.Object
    DD.DropDownLines = 12
    '--- Affichage des items dans le DropDown ---
    If UBound(var) = 0 Then
      DD.AddItem var(0)
    Else
      DD.List = var
    End If
    '--- Sélection du Range appelant ---
    Cible.Select
    End Sub
     
    Sub DropDownSurClic(Optional dummy As Byte) '### Evènement Clic sur le DropDown ###
    Dim SH As Shape
    Dim DD As DropDown
    Dim R As Range
    '--- Recherche du DropDown ---
    On Error Resume Next
    Set SH = ActiveSheet.Shapes("___pmo")
    If Err <> 0 Then Exit Sub
    Set DD = SH.OLEFormat.Object
    '--- Inscription de la sélection du DropDown ---
    Set R = ActiveCell
    R = DD.List(DD)
    '--- Destruction du DropDown ---
    Call DelDropDown
    End Sub
     
    Sub DelDropDown(Optional dummy As Byte) '### Destruction du DropDown ###
    Dim SH As Shape
    On Error Resume Next
    Set SH = ActiveSheet.Shapes("___pmo")
    If Not SH Is Nothing Then SH.Cut
    End Sub
    Je mets un exemple en pièce jointe pour faciliter.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    Merci de ta réponse PMO2017

    mais cela est un peu trop compliqué car je souhaite pouvoir "étirer" cette validation sur une colonne complète d'un tableau...

    je suis tombé sur cette discussion:
    http://www.developpez.net/forums/d10...ne-fonctionne/

    qui dit que cela n'est pas possible d'utiliser des formules vba personnalisée dans les validations de données...

    donc pas de solution à mon avis
    Je pense donc que mon sujet n'est pas trop un pb du VBA mais plutôt d'Excel

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    je souhaite pouvoir "étirer" cette validation sur une colonne complète d'un tableau
    Si j'ai bien compris, il suffit de modifier le code de la Sub Worksheet_SelectionChange comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    '### Constante à adapter ###
    Const PLAGE_VALIDATION As String = "I4:I22,G7:G13,G20:G25"
    '###########################
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call DelDropDown
    '--- On fait si la sélection ne comporte qu'une seule cellule ---
    If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then
      '--- La cellule sélectionnée est-elle contenue dans la plage ---
      If Not Application.Intersect(Target, Range(PLAGE_VALIDATION)) Is Nothing Then
        Call AddListe(Source:=[g4], Cible:=Target)
      End If
    End If
    End Sub
    Vous pouvez adapter, à votre convenance, la constante cernée par des ###

    Je pense donc que mon sujet n'est pas trop un pb du VBA mais plutôt d'Excel
    Le VBA sert justement à construire des solutions n'existant pas directement dans Excel.

    A plus.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2014, 14h18
  2. transfert d'une variable string vers rapport RAVE
    Par segnac dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/11/2013, 07h24
  3. [Débutant] Validation d'une valeur numérique dans une variable String
    Par anto84 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 11/07/2007, 10h26
  4. Couleur de cellule XSL dynamique avec une variable
    Par Steff1985 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/10/2005, 11h10
  5. Réponses: 6
    Dernier message: 14/02/2004, 14h01

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