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 !
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
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?
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.