Actualisation cellules après modif de liste déroulante

Bonjour à tous,

Je cherche à savoir comment actualiser le contenu des cellules automatiquement pour celles d'entre elles qui sont affectées par une modification de la liste déroulante correspondante.

Par exemple, j'ai la liste déroulante suivante :

Test 1

Test 2

Test 3

Que j'affecte aux cellules suivantes :

A1 : Test 1

A2 : Test 1

A3 : Test 2

A4 : Test 3

A5 : Test 1

Admettons que je modifie ma liste déroulante de la façon suivante :

Test 4

Test 2

Test 3

Je voudrais qu'Excel m'actualise automatiquement les cellules affectées par le changement c'est à dire que je souhaite obtenir le résultat suivant automatiquement :

A1 : Test 4

A2 : Test 4

A3 : Test 2

A4 : Test 3

A5 : Test 4

Comment faire ? Avec une macro ou sans ?

Merci de votre aide !

Joris

Bonjour

Tu devrais joindre ton fichier...

Bye !

gmb a écrit :

Bonjour

Tu devrais joindre ton fichier...

Bye !

Voili voilou

99cas-exemple.xlsx (8.10 Ko)

Bonsoir,

Un essai :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LD0, LD1, i%, c As Range
    If Not Intersect(Target, Me.Range("C1:C3")) Is Nothing Then
        LD1 = Me.Range("C1:C3").Value
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Undo
        LD0 = Me.Range("C1:C3").Value
        For i = 1 To UBound(LD0)
            If LD0(i, 1) = LD1(i, 1) Then LD0(i, 1) = ""
        Next i
        For Each c In Me.Range("A1:A5")
            For i = 1 To UBound(LD0)
                If c = LD0(i, 1) Then
                    c = LD1(i, 1): Exit For
                End If
            Next i
        Next c
        Me.Range("C1:C3").Value = LD1
        Application.EnableEvents = True
    End If
End Sub

Cordialement.

MFerrand a écrit :

Bonsoir,

Un essai :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LD0, LD1, i%, c As Range
    If Not Intersect(Target, Me.Range("C1:C3")) Is Nothing Then
        LD1 = Me.Range("C1:C3").Value
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Undo
        LD0 = Me.Range("C1:C3").Value
        For i = 1 To UBound(LD0)
            If LD0(i, 1) = LD1(i, 1) Then LD0(i, 1) = ""
        Next i
        For Each c In Me.Range("A1:A5")
            For i = 1 To UBound(LD0)
                If c = LD0(i, 1) Then
                    c = LD1(i, 1): Exit For
                End If
            Next i
        Next c
        Me.Range("C1:C3").Value = LD1
        Application.EnableEvents = True
    End If
End Sub

Cordialement.

Ca marche! super merci.

J'aurais jamais trouvé. Où as-tu trouvé le code ?

Joris

Bonjour à tous

Bonjour MFerrand

j.winkler a écrit :

Où as-tu trouvé le code ?

Je crois que j'ai la réponse : dans son cortex, caché sous quelques neurones...

Bye !

gmb a écrit :

Bonjour à tous

Bonjour MFerrand

j.winkler a écrit :

Où as-tu trouvé le code ?

Je crois que j'ai la réponse : dans son cortex, caché sous quelques neurones...

Bye !

Niveau trop élevé pour moi, j'en suis loin!

Merci beaucoup!

Bye bye

Bonsoir j.winkler, gmb !

Oui, j'écris les macros , une demande est toujours spécifique et mieux vaut l'écrire en fonction de ce qu'on demande... Je suis loin d'être le seul d'ailleurs , c'est le cas de tous les intervenants qui répondent sur le Forum...

Mais, heureusement, on n'invente pas tout à chaque fois... Le problème que tu poses repose sur la comparaison de valeurs modifiées par rapport à celles qui préexistaient. Des questions viennent régulièrement qui conduisent à devoir opérer une telle comparaison. Je n'ai pas eu à inventer la méthode qui consiste à mémoriser les valeurs modifiées, annuler la modification pour récupérer les anciennes valeurs, à partir de quoi on peut comparer, faire ce qui est demandé selon résultat de la comparaison, et rétablir les valeurs modifiées.

Pour le reste, on essaie d'apporter la réponse demandée de la façon la plus efficace et la plus rapide qu'on trouve... Et quand on traite des questions apparentées à celles qu'on a déjà pu traiter, on essaie d'améliorer ce qu'on a pu faire antérieurement.

Je n'aurais sûrement jamais pu écrire cette macro si je n'en avais pas écrit pas mal d'autres antérieurement dans des Forums ! C'est bien en cela que les échanges sur un Forum sont fructueux pour tous. C'est parce qu'il y a des demandes atypiques qu'on parvient à des solutions qu'on n'aurait pas imaginées auparavant...

Rien de grave si tu penses ne pas être en mesure d'écrire une macro semblable aujourd'hui, cela viendra si tu souhaites parvenir à écrire tes propres macros, en t'attachant à comprendre comment ça fonctionne tu te mets en mesure d'accroître ce que tu es capable de refaire et la quantité d'éléments que tu peux utiliser, jusqu'à t'affranchir de la répétition de déjà vu pour combiner des variantes et autres solutions alternatives... Ça prend un peu de temps, mais tout ne se fait pas en un jour, et tout le monde a a forcément dû débuter...

Cordialement.

Bonsoir,

Un essai :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LD0, LD1, i%, c As Range
    If Not Intersect(Target, Me.Range("C1:C3")) Is Nothing Then
        LD1 = Me.Range("C1:C3").Value
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Undo
        LD0 = Me.Range("C1:C3").Value
        For i = 1 To UBound(LD0)
            If LD0(i, 1) = LD1(i, 1) Then LD0(i, 1) = ""
        Next i
        For Each c In Me.Range("A1:A5")
            For i = 1 To UBound(LD0)
                If c = LD0(i, 1) Then
                    c = LD1(i, 1): Exit For
                End If
            Next i
        Next c
        Me.Range("C1:C3").Value = LD1
        Application.EnableEvents = True
    End If
End Sub

Cordialement.

Bonjour,

Bonjour, super ce code c'est exactement ce je cherche depuis longtemps le seul problème c'est que je n'arrive pas à l'appliquer à ma feuille de calcul, je sais que c'est beaucoup vous demander mais est-ce que vous pouvez appliquer votre code à ma feuille de calcul?

40budget-excel.xlsm (16.92 Ko)

Bonjour,

La question ici consistait à modifier automatiquement des valeurs issues d'une liste lorsque la valeur dans la liste était modifiée, ce qui ne me semble pas être ta problématique à voir ton fichier.

Cordialement.

Rechercher des sujets similaires à "actualisation modif liste deroulante"