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 :

Selection 1ère occurence d'une Validation de données en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Selection 1ère occurence d'une Validation de données en vba
    Bonjour,

    J'aimerais savoir si il est possible après avoir fait une validation de données de selectionner par vba la 1ère occurence de cette validation ?
    Je ne sais pas si c'est très clair ce que je dis alors j'essaye d'expliquer le pourquoi : je selectionne une plage et je fais une validation avec une plage de cellule nommée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FeuilSuivi.Range("B5:B106").Select
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Categories"
     End With
    Ensuite il faut que je fasse une 2ème validation par rapport au contenu de ma cellule d'avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FeuilSuivi.Range("C5:C106").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=INDIRECT(B5)"
       End With
    Ma validation fonctionne si j'ai une valeur en B5 c'est pour cela qu'avant ma 2ème validation je voudrais mettre la 1ère occurence de la liste en B5.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,


    As tu essayé comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FeuilSuivi.Range("C5:C106").Value=range("B5").value
    Jérôme

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Pour l'instant j'ai pallié le problème en allant chercher mon occurence dans
    une autre feuille mais bon je pense qu'il y a plus propre. (car Catégories correspond à la plage A2:A5 de la feuille param.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FeuilParam.Select
        test = FeuilParam.Range("A2").Value
        FeuilSuivi.Select
        FeuilSuivi.Range("B5").Value = test
    bonjour jfontaine,

    Ta proposition ne fonctionne pas je pense car toute ma plage va se basée sur B5.

    Ha oui un détail important que je n'ai pas précisé. chaque occurence de ma liste est un nom défini.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Peux tu envoyer un fichier test
    Jérôme

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Mon fichier est trop gros.
    Je n'aurais peut être pas du trop expliquer je pense que ca "embrouille" plus qu'autre chose lol

    Je vais reformuler :
    J'ai fais ma 1ère validation.
    Si je clique dans la cellule excel en B5 par exemple j'ai une liste qui apparait où je peux selectionner n'importe quelle ligne.

    Bah moi je voudrais que ca se fasse par une macro le fait de selectionner une valeur dans la liste.

    C'est mieux expliqué là ?

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Une idée a dapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F1").Value = Range("Agences").Item(1, 1)
    Jérôme

  7. #7
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : retraité
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Autre alternative, attribuer à la cellule la première valeur valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Lors de la sélection de la cellule attribuée d'une plage à validation
     Target.Validation.Delete
    '        Target.Offset(0, -1)=nom de la plage nommée au cas ou la cellule décalée d'une colonne porte le nom de la plage
    Target.Validation _
                        .Add Type:=xlValidateList, Formula1:="=" & Target.Offset(0, -1)
                      If Target = "" Then
                        Target = Sheets(Feuille de la plage nommée).Range(Target.Offset(0, -1)).Cells(1, 1)
    '   ou             Target = Sheets(Feuille de la plage nommée).Range(Target.Offset(0, -1))(1)
                      End If

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    mais pourquoi tu les supprimes pour les recréer ? En quoi est-ce utile ?
    Ta liste est sur une autre feuille ? Sinon récupérer la plage du nom sélectionné colonne précédente et la passer à .formula1:=

    Fredo, tu as une balise Code (icône #) pour le mettre en forme et qu'il soit lisible plus facilement.
    eric

  9. #9
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    Par défaut
    Peut-être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FeuilSuivi.Range("B5") = Range("Categories").Cells(1, 1)
    ce qui revient a la solution de JFontaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FeuilSuivi.Range("B5") = Range("Categories").Item(1 1)

  10. #10
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : retraité
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    mais pourquoi tu les supprimes pour les recréer ? En quoi est-ce utile ?
    Ta liste est sur une autre feuille ? Sinon récupérer la plage du nom sélectionné colonne précédente et la passer à .formula1:=

    Fredo, tu as une balise Code (icône #) pour le mettre en forme et qu'il soit lisible plus facilement.
    eric
    Donc pour répondre ce que j'ai dèjà fait dierectement Via WLM
    : l'exemple énoncé est pris sur un de mes classeurs, la cellule placé en offset(0,-1) est elle même une cellule à validation ce qui impose la mise à jour de la cellule sélectionnée à chaque changement de valeur de celle décalée(0,-1). Pour répondre à: Comment afficher la première valeur d'une cellule à validation?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target = Range("nom de la plage ")(1)
    'si la plage est sur une autre feuille 
    Target=Sheets("autreFeuille").range("nomdela plage")(1)
    End Sub

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Re,

    Je pense qu'il s'est mal exprimé.
    Il doit s'agir d'une liste en cascade et il veut récupérer la sélection faite colonne précédente pour passer le nom en Indirect() et non le 1er item.

    Quant à moi je ne comprend plus.
    Après avoir effectivement eu des erreurs sur le .Add, maintenant ça passe tout seul avec Formula1:="=indirect(B5)"
    leptitdave, tous tes noms sont bien définis ?
    eric

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2015, 15h28
  2. Réponses: 2
    Dernier message: 25/08/2014, 17h25
  3. Réponses: 2
    Dernier message: 17/10/2010, 21h48
  4. [C#]Remplacer 1ère occurence d'une chaine dans une autre!
    Par Bils dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/04/2006, 12h57

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