Bonjour à tous,
Je suis coincé sur un problème depuis maintenant un petit moment et je n'arrive pas à m'en sortir tout seul.
Mon soucis est le suivant :
Mon fichier Excel contient 3 feuilles :
Sur la 1ère feuilles :
Cette feuille contient 2 listes, une dans la colonne A et l'autre dans la colonne C. Ces listes me servent de données sources pour des listes déroulantes sur les feuilles suivantes.
Je precise que ces listes sont de tailles variables, on peut ajouter des valeurs ou les modifier, elles sont également nommées via le gestionnaire de nom de manière dynamique (avec DECALER et NBVAL)
2ième feuille :
On remplit un tableau ou chaque cellule contient une liste déroulante à partir de la colonne A de la feuille 1. Disons que la plage de mon tableau est "D2:Z20" (en réalité mon tableau est plus grand)
3ième feuille :
On remplit un tableau ou chaque cellule contient une liste déroulante à partir de la colonne C de la feuille 1. Disons que la plage de mon tableau a une plage identique au précédent "D2:Z20"
Je souhaiterais que lorsque je modifie les données sources dans la feuille 1, les données se mettent automatiquement à jour sur les feuilles 2 et 3.
En fouillant sur internet et en me débrouillant je suis arrivé au code suivant :
Je précise que pour le moment le code ne fonctionne que pour la feuille 2, étant donné que je n'arrive pas au résultats voulu, je ne l'ai pas encore modifié pour la feuilles 3.
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 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("LST_BUILD_STATION").RefersToRange) If Not isect Is Nothing Then Application.EnableEvents = False With Target vNewValue = .Value Application.Undo vOldValue = .Value .Value = vNewValue End With For Each cell In Sheet2.UsedRange.SpecialCells(xlCellTypeAllValidation) With cell If .Validation.Type = 3 And .Validation.Formula1 = "=LST_BUILD_STATION" And .Value = vOldValue Then cell.Value = vNewValue End If End With Next cell Application.EnableEvents = True End If End Sub
Les problèmes que je rencontre sont les suivants :
- Si je saisie une nouvelle valeur dans ma liste de la feuille 1 puisque l'ancienne valeur était "" la macro remplace toutes les cellules vides de mon tableau par la valeur que je viens de saisir, et puisqu'en réalité mon tableau est imposant (100x500) cela prends une éternité
-Dans le cas ou j'aurais sur la même feuille plusieurs liste déroulante avec des sources de données différentes, la macro ne fait pas la difference, elle recherche uniquement les cellules avec une validation de données type liste
Désole pour le roman mais j'ai essayé d'être le plus précis possible
Si je peux vous apporter des precisions supplémentaires n'hésitez pas (capture d'écran, fichier, ou autre precisions...)
Je précise également que je suis debutant en VBA.
Merci d'avance![]()
Partager