1 votes

Comment modifier la valeur d'une liste déroulante Excel

J'ai une colonne qui utilise des valeurs provenant d'un ensemble prédéfini (une liste déroulante), mis en œuvre à l'aide de la fonction Validation des données . Maintenant si je change une valeur dans la liste le menu déroulant (une fois ouvert) proposera immédiatement cette nouvelle valeur. Cependant, la table ne se mettra pas à jour automatiquement Ce qui signifie que certaines des valeurs de la colonne seront invalides jusqu'à ce que je les corrige manuellement.

J'ai vu des solutions basées sur les macros / VBA mais n'y a-t-il pas un moyen astucieux directement dans l'interface utilisateur d'Excel ?

2voto

Siddhant Garg Points 11

Comme je l'ai mentionné dans les commentaires, la seule façon de le faire serait avec VBA.

Voici une option. J'ai ajouté des commentaires tout au long du code. Cela suppose que vous utilisez une plage nommée pour la liste de validation nommée "Liste" et qu'elle se trouve sur la même feuille que les cellules à valider.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim cell As Range
    Dim isect As Range
    Dim vOldValue As Variant, vNewValue As Variant

    Set isect = Application.Intersect(Target, ThisWorkbook.Names("List").RefersToRange)
    If Not isect Is Nothing Then
        ' Get previous value of this cell
        Application.EnableEvents = False
        With Target
            vNewValue = .Value
            Application.Undo
            vOldValue = .Value
            .Value = vNewValue
        End With

        ' For every cell with validation
        For Each cell In Me.UsedRange.SpecialCells(xlCellTypeAllValidation)
            With cell
                ' If it has list validation AND the validation formula matches AND the value is the old value
                If .Validation.Type = 3 And .Validation.Formula1 = "=List" And .Value = vOldValue Then
                    ' Change the cell value
                    cell.Value = vNewValue
                End If
            End With
        Next cell
        Application.EnableEvents = True
    End If
End Sub

Vous pouvez également télécharger le exemple de feuille de calcul que j'ai mis en place pour tester ça. (Contient des macros !)

0voto

user187330 Points 11

mais n'y a-t-il pas une façon intelligente de le faire directement dans l'interface utilisateur d'Excel ?

Je pense en connaître un - en tout cas, il semble répondre à toutes vos demandes :

  1. Vous devez définir Région nommée changeant dynamiquement comme source pour la validation des données. Ceci peut être réalisé en utilisant OFFSET fonction. En supposant que vous disposez de la liste des valeurs pour la zone de liste déroulante dans la colonne A du tableau suivant Sheet1 (le nom n'a d'importance que pour la formule), cellule A1 a un en-tête, par exemple List of values et les valeurs sont placées à partir de A2 et ci-dessous, vous devez procéder comme suit : allez dans Ruban Formulas > Name Manager créez une nouvelle région (appelons-la Items ) et définissez sa région en ne pointant PAS sur les cellules, mais en utilisant la formule suivante à la place : =OFFSET(Sheet1!$A$2;0;0;COUNTA(Sheet1!$A:$A)-1;1) .
  2. Définir Validation des données règles : au lieu de pointer sur la plage de cellules pour List, tapez =Items - Ainsi, votre région nommée sera utilisée comme source des éléments de la liste.
  3. En conséquence de ce qui précède, vous obtiendrez une liste véritablement dynamique qui répondra à toutes vos exigences : vous pouvez librement modifier / ajouter des éléments à la colonne A, et ces changements seront immédiatement reflétés dans la liste déroulante lors de la prochaine utilisation. Dans le même temps, les anciennes valeurs resteront intactes.

J'utilise cette solution depuis environ 2 ans dans mon travail. J'espère que vous la trouverez également utile !

P.S. Voici le fichier d'exemple actuel : Dropdown dynamique

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X