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

Excel Discussion :

Formule sur liste déroulante [XL-2007]


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut Formule sur liste déroulante
    bonsoir .......
    ayant eu une repose rapide et impeccable je reviens a la charge pour une autre demande......
    je voudrai connaitre une formule qui puisse sur cette liste

    ...numéros ..............texte
    AATQ23071..........AIR LIQUIDE 2010
    AATQ23072..........LINDT 2010
    AATQ23073..........HOLIS2010
    AATQ23074..........ARKEMA 2010
    AATQ23076..........CHIMEX 2010
    AATQ23077......... NOVASEP 2010
    AATQ23078 .........SOBEGI 2010
    AATQ23079..........TEPF 2010
    AATQ23080 ..........DIVERS TRAVAUX 2010

    me permettre sur une seule cellule admettons A6 avoir sur une liste déroulante les texte ci dessus et après le choix de l'un d'entre eu avoir le numéro lui réfèrent a celui ci qui s'affiche dans la cellule dans cette mm cellule ( A6 )

    merci par avance de votre réponse j'espère que je suis compréhensible

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour,
    vu la date el le peu de réponses...

    Est-ce encore d'actualté ?

    ESVBA

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    bonsoir

    moi j'attends toujours une réponse si cela est possible

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Dans une cellule, remplacer la sélection dans une liste par sa valeur équivalente
    bonsoir hirislink,

    Il y a beucoup de personne qui tentent sur différents forum et ne reviennent jamais.

    Donc si quelqu'un est toujours intéressé, voici une solution passant par le VBA nécessairement.

    Il y a deux façons de voir la chose :
    • une liste de validation
    • une combobox placée dynamiquement sur la cellule



    Ici, je ne vais traiter que de la première solution avec une liste de validation.

    Remarques 1 :
    1. Comme il n'y a pas d'évènement spécifique à la saisie dans une cellule, il faut choisir "WorkSheet_Change" et y poser une question pour ne traiter que quelques cellules (ici que "A6") sinon ça devient inutilisable par la suite;
    2. Comme on modifie la valeur, il y un rappel de la procédure "WorkSheet_Change" d'où la nécessité d'une variable "static CellChanged" pour ne pas éxecuter plusieurs fois la procédure;
    3. J'ai choisi de placer la base de données (ton tableau) sur une autre feuille (+pratique) et de nommer la plage des cellules (sur 2 colonnes) par "Cor"
    4. J'ai choisi de rappeler dans le commentaire de la cellule la valeur de la liste déroulante car à la fin de l'opération, il ne reste que la valeur correspondante. C'est une facilité pour l'utilisateur qui ne connait pas nécessairement les correspondances;
    5. Le reste est expliqué dans le 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub Worksheet_Change(ByVal Target As Range)
        '--- Pour la cellule concernée
        '    avec la plage de correspondance 2 colonnes nommée "Cor"
        If Not Intersect(Target, Range("A6")) Is Nothing Then
            '--- Déclaration de variable
            Static CellChanged As Boolean
            Dim c As Variant
            Dim NomFeuille  As String
            Dim PlageNommee As String
     
            '--- Test pour sortie de la boucle :
            '    on modifie une cellule dans la procédure WorkSheet_Change => Boucle
            If CellChanged = True Then
                CellChanged = False
                Exit Sub
            End If
     
            '--- On pourrait ici supprimer la liste de validation créée dynamiquement.
            '    Ne pas faire car pour réouvrir la liste, il faut la récréer et
            '    donc sortir et revenir dans la cellule
            '    Après le "IF CellChanged" car a faire une fois
            'With Selection.Validation
            '    .Delete
            'End With
     
            '--- Recherche la cellule dans la plage nommée "Cor"  << A adapter dans les lignes suivantes
            '    Décompose les chemins pour faciliter de lecture
            NomFeuille = ActiveWorkbook.Names("Cor").RefersToRange.Worksheet.Name
            PlageNommee = ActiveWorkbook.Names("Cor").RefersToRange.AddressLocal
     
            '    Recherche d'une équivalence entre colonnes
            With Worksheets(NomFeuille).Range(PlageNommee)
                Set c = .Find(ActiveCell.Value, LookIn:=xlValues)
                If Not c Is Nothing Then
                    '--- Sauvegarde de la saisie précédente pour mémo
                    If ActiveCell.Comment Is Nothing Then
                        ActiveCell.AddComment
                        ActiveCell.Comment.Shape.Width = ActiveCell.Width
                        ActiveCell.Comment.Shape.Height = ActiveCell.Height
                        ActiveCell.Comment.Text Text:=ActiveCell.Value
                    Else
                        ActiveCell.Comment.Text ActiveCell.Value
                    End If
                    '--- Valeur changée => précision qu'il ne faut plus boucler
                    CellChanged = True    'avant de changer la valeur d'une cellule
                    '--- Remplace la liste déroulante par la bonne valeur
                    ActiveCell.Value = c.Offset(0, 1)       'et relance la procédure
                End If
            End With
        End If
        '--- Fin de la liste de validation    
    End Sub

    Remarques 2 :
    1. Maintenant il faut créer de manière dynamique la liste de validation sur une cellule qui ne contient qu'une valeur fixe, la valeur correspondante.
    2. Récupère la première colonne de la plage nommée "Cor".


    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        'Création dynamique des listes de validation
        '--- Pour la cellule concernée
        '    avec la plage de correspondance 2 colonnes nommée "Cor" dans Excel
        If Not Intersect(Target, Range("A6")) Is Nothing Then
            '--- Création liste validation
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, Formula1:="=(OffSet(Cor,0,0,,1))"
                ' Nom de la plage nommée à modifier ici ........... ^
                .InCellDropdown = True
                .IgnoreBlank = True
                .InputTitle = "Valeur précédente"
                .InputMessage = "La liste déroulante mettra la signification du code après saisie."
                .ShowInput = True
                .ErrorTitle = "Erreur saisie"
                .ErrorMessage = "Vous n'avez pas saisi un code valable." & chr$(13) & "Vous devez saisir le code, le programme mettra la signification après la saisie."
                .ShowError = True
            End With
        End If
    End Sub

    Une solution à une question récurrente.

    ESVBA

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

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    bonsoir

    m'en veut pas je comprend rien

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2014, 09h33
  2. Réponses: 2
    Dernier message: 21/03/2006, 01h24
  3. Pb de requery sur liste déroulantes
    Par patbeautifulday1 dans le forum Access
    Réponses: 13
    Dernier message: 10/03/2006, 18h42
  4. [MySQL] Affichage de données après click sur liste déroulante
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/01/2006, 12h08
  5. Selection clavier sur liste déroulante
    Par Maxime_ dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/01/2006, 10h35

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