Bonjour,
Quel code en vba me permet de créer une liste de validation
avec mise à jour à chaque choix de l'utilisateur.
Que se soit enlever un choix ou ajouter. Afin d'éviter les doubles choix ou oublier un choix
Une idée merdi
Version imprimable
Bonjour,
Quel code en vba me permet de créer une liste de validation
avec mise à jour à chaque choix de l'utilisateur.
Que se soit enlever un choix ou ajouter. Afin d'éviter les doubles choix ou oublier un choix
Une idée merdi
Essaye d'être plus clair sur ce que tu veux, donne un exemple !
Merci !
donc une liste de validation(Située en "A3","A4","A5","A6","A7") qui reprend par exemple les
valeurs plage "E5:E9"
valeurs E5:E9
10
5
56
489
2
L'utilisateur choisi en "A3"
5
il reste dans la liste de validation
10
56
489
2
l'Utilisateur choisi en "A4"
56
il reste dans la liste de validation
10
489
2
l'utilisateur peut revenir en arrière
enlevé dans la cellule "A4" 56 donc la liste de validation redevient
il reste dans la liste de validation
10
56
489
2
voilà j'essaie ceci afin fe faire 2 fois le même choix (2 x5) ou (2x56)
bonjour stargates jojo86 le forum
une approche en passant par une evenementielle.revenir en arriere pas simple a moins de mettre ta liste E5:E9 dans une variable publique ou des constances. pour pouvoir la recuperer . lourd a coder mais bon je vois pas bien de logique dans ton projet???
Code:
1
2
3
4
5
6
7
8 Private Sub Worksheet_Change(ByVal Target As Range) Dim a As String, Address As Range If Not Application.Intersect(Target, Range("A3:a7")) Is Nothing Then a = Target.Value Set Address = Range("e5:e9").Find(What:=a) Address.ClearContents End If End Sub
Bonjour Laetitia,
je ne crois pas que le changement de la liste de validation
face partie des évenements de la feuille
j'ai mis un point d'arrêt à
le programme ne s'arrete pas et a n'as pas de valeurCode:
1
2 Set Address = Range("e5:e9").Find(What:=a)
Mon but est de trouver la manière de pouvoir gérer un planning de
chauffeur(25) camion(25) Tournée(25) et d'éviter de mettre deux fois par exemple la mêmeTournée ou le même camion à deux chauffeurs différents.
voilà
re, ok je vois mieux ce que tu veux construire ,je pense que passer par des listes de validation c'est peut être pas la meilleure methode a refléchir!! je regarderais demain si tu as pas de reponse d'ici la!!
bonne soirée
re, un exemple qui peut t'interesser il faut l'adapter
Bonjour (et un coucou à laetitia)
Ce problème peut-être plus intéressant et plus complexe qu'il ne parait l'être au premier abord, en raison de divers aspects induits...
Question à stargates : accepterais-tu une solution qui ne présenterait pas forcément la liste de tes choix là où se trouve la cellule de saisie ?
Si oui : je pense être en mesure de te concocter quelque-chose, mais aurais alors d'autres questions précises à te poser (relatives, celles-là, à d'autres aspects encore inconnus ou non parfaitement connus de tes aboutissants)
Mais commence par répondre à ma question soulignée plus haut.
réponse à ucfoutu
oui je veux bien et reste à ta disposition pour divers renseignements
OK!
Allons-y :
- Ce que j'ai compris :
Tu ne veux pas qu'une cellule puisse avoir une valeur déjà choisie (et çà, je vois bien comment gérer)
- Ce qui est encore flou :
1) quid en ce qui concerne une correction dans une cellule ayant déjà fait l'objet d'un choix ? (imaginons que tu aies choisi choix1 et que tu veuilles finalement lui attribuer choix3) : je te propose, si choix3 est encore non utilisé, de :
a) restituer le choix2 à la liste des choix encore disponibles
b) d'attribuer le choix3 à la cellule et le supprimer des choix encore disponibles
2) quid de ta "remise à la situation de départ" ? Tu parles bien (et j'ai bien compris cet aspect) de recomposer la liste des choix, telle qu'elle était au départ, c'est-à-dire complète .
Mais quid des cellules déjà attributaires des choix distincts ?
Je te propose :
- un bouton de commande qui recompose l'intégralité de la liste, mais qui, en même temps, remet à vide toutes les cellules ayant bénéficié d'un choix.
Cela sous-tend, bien évidemment, un inventaire des cellules susceptibles de se voir attribuer une valeur par choix dans une liste de choix.
J'espère que tu suis mon inquiétude et mon raisonnement et que, dans ces conditions, tu seras capable de t'exprimer ('en réponse) de la même manière (concise) que moi.
Je m'y mettrai ensuite.
A toi ... (relis avec attention, avant de me répondre...)
Bien...
Tu n'es pas revenu depuis... et mes réponses restent donc sans réponses dans l'état actuel des choses...
Mais cela ne fait rien...
Je pense que mon petit doigt avait bien vu et m'a bien renseigné et je pars donc de cette hypothèse-là... (si elle est fausse, n'hésite pas à apporter des précisions).
Je viens de "tuer le temps" sur la base de cette hypothèse.
Voici un exemple :
Crée un classeur tout neuf
Sur une feuille, place (depuis la boîte d'outils (les contrôles ActiveX) ) :
- un bouton de commande CommandButton1
- une listBox ListBox1
Mets ce code sur la feuille concernée :
Bien...Code:
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 Private qui As Range, mescels As String Private Sub CommandButton1_Click() Worksheet_Activate End Sub Private Sub ListBox1_Click() Dim toto As Integer toto = ListBox1.ListIndex If qui.Value <> "" Then ListBox1.AddItem qui.Value qui.Value = IIf(ListBox1.List(toto) = "EFFACER", "", ListBox1.List(toto)) ListBox1.ListIndex = -1 If ListBox1.List(toto) <> "EFFACER" Then ListBox1.RemoveItem (toto) ListBox1.Visible = False End Sub Private Sub Worksheet_Activate() mescels = " $C$8 $E$12 " ' ici, et sous cette forme (espaces y compris), les cellules à traiter de cette manière... ListBox1.Visible = False ListBox1.Clear ListBox1.AddItem "toto" ListBox1.AddItem "titi" ListBox1.AddItem "tata" ListBox1.AddItem "EFFACER" ' c'est là un "plus", mùais il n'est pâs obligatoire tintin = Split(mescels, " ") For i = 1 To UBound(tintin) - 1 Range(Replace(tintin(i), "$", "")).Value = "" Next End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) ListBox1.Visible = False Set qui = Target If InStr(mescels, " " & Target.Address & " ") = 0 Then Exit Sub ListBox1.Width = IIf(ListBox1.Width < Target.Width, Target.Width, ListBox1.Width) ListBox1.Left = qui.Left ListBox1.Top = qui.Top ListBox1.Visible = True End Sub
1) Lance...
2) clique sur commandbutton1 ===>>
---- ce click à une double action :
------- recomposition de la listbox
------- remise à "" de toutes les cellules saisies grâce à elle
3) navique ensuite comme tu l'entends (à l'aide de la souris ou de ton clavier) et observe :
--- chaque fois que tu atteindras une des cellules (C8 et/ou E12 dans mon exemple) à traiter===>> tu verras apparaître ta liste de choix juste sur cette cellule ===>> fais ton choix et observe... ===>> la cellule prend la valeur de ce choix et ce choix disparaît de la liste
----- si tu reviens sur une cellule déjà traitée et lui affectes un autre choix que le premier ===>> elle prend cette nouvelle valeur et restitue l'ancienne à la liste (puisque disponible à nouveau)
----- j'ai ajouté à la liste des choix un choix "EFFACER", qui agît comme ci-dessus (restitution de l'ancienne valeur), mais efface la cellule.
Voilà en gros le mécanisme.
Je te rappelle que le click sur le bouton remet à blanc les cellules concernées et recompose entèrement la liste de choix.
La variable mescels est celle qui te sert à définir les cellules concernées par une liste de choix.
Amuse-toi bien...
Bonsoir
voici une variante à adapter
Bonne soirée à ttCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range, rngA As Range, rngK As Range, temp As String If Intersect(Target, Range("A1:A30")) Is Nothing Then Exit Sub Set rngA = Range("A1:" & Cells(Rows.Count, 1).End(xlUp).Address) Set rngK = Range("K1:" & Cells(Rows.Count, 11).End(xlUp).Address) For Each cell In rngK If IsError(Application.Match(cell, rngA, 0)) Then temp = temp & cell.Value & "," End If Next Range("A1:A30").Validation.Delete Range("A1:A30").Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1) End Sub
bonjour Laeticia,ucfoutu,ahed
j'ai adapté le code d'ucfoutu cela fonctionne
mais parfois effacer à une attitude parfois bizarre
mescels est long à initialiser on ne peut pas prendre une plage
puisque mescels renvoie un string
et une petite explicationCode:
1
2mescels = " $D$3 $E$3 $F$3 $G$3 $H$3 $D$4 $E$4 $F$4 $G$4 $H$4 $D$5 $E$5 $F$5 $G$5 $H$5 D$6 $E$6 $F$6 $G$6 $H$6 $D$7 $E$7 $F$7 $G$7 $H$7 "
pour
je joins le fichierCode:
1
2
3
4
5 tintin = Split(mescels, " ") For i = 1 To UBound(tintin) - 1 Range(Replace(tintin(i), "$", "")).Value = "" Next
Euh...
Joindre un fichier ? ===>> dit souvent et répété souvent : je n'ouvre pas si non écrit par moi ... (et j'ai mes raisons qui sont les miennes et que tu devrais faire tiennes ...:lol:)
Montre, isole, explique, mais ne me joins pas un fichier que je n'ouvrirai certes pas !
T'ai-je joint un fichier, moi ? Non ... ===>> un code et des explications ... Fais-en autant, STP.
EDIT :
Ce n'est à mon avis pas l'effacement lui-même qui prend du temps (tes cellules ne sont pas si nombreuses que cà) mais l'affichage de ces effacements...Citation:
mais parfois effacer à une attitude parfois bizarre
mescels est long à initialiser on ne peut pas prendre une plage
puisque mescels renvoie un string
Fais le précéder d'une inhibition de l'affichage (Application.ScreenUpdating = False) et suivre d'un rétablissement après effacement (Application.ScreenUpdating = True).
merci ucfoutu
Compris pour les fichiers joints
En ce qui concerne
c'est régléCode:
1
2Application.ScreenUpdating = False
mais pour
tu ne m'as pas réponduCode:
1
2
3
4
5 tintin = Split(mescels, " ") For i = 1 To UBound(tintin) - 1 Range(Replace(tintin(i), "$", "")).Value = "" Next
Je ne t'avais pas répondu sur ce point car la fonction Split est expliquée dans ton aide en ligne.
Elle génère un Array (ici tintin ...tableau dynamique à une dimension) composé des sous-chaînes obtenues par éclatement d'une chaîne (ici mescels) par rapport à un séparateur (ici " ")
La boucle est faite sur chacun des articles de l'array tintin, de son 2ème article (d'index 1 car le 1er a l'index 0) à son avant-dernier article (l'indice du dernier étant le Ubound de l'Array).
Chacun des articles ainsi extraits sera donc de la forme $@$# ===>>
prenons le cas de l'article "$K$3" (exemple) ===>> en remplaçant (fonction replace) $ par rien, on obtient la chaîne "K3" qui représente la cellule K3.
Voilà tout ... ;)
ok merci
Bonsoir,désolé de retirer résolu mais petit problème de code avec celui d' ucfoutu
il me dit Run-Time Erreur 1004Code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195 Private Sub Worksheet_Activate() mescels = " $D$3 $E$3 $F$3 $G$3 $H$3 $D$4 $E$4 $F$4 $G$4 $H$4 $D$5 $E$5 $F$5 $G$5 $H$5 $D$6 $E$6 $F$6 $G$6 $H$6 $D$7 $E$7 $F$7 $G$7 $H$7 $D$8 $E$8 $F$8 $G$8 $H$8 $D$9 $E$9 $F$9 $G$9 $H$9 $D$10 $E$10 $F$10 $G$10 $H$10 $D$11 $E$11 $F$11 $G$11 $H$11 $D$12 $E$12 $F$12 $G$12 $H$12 $D$13 $E$13 $F$13 $G$13 $H$13 $D$14 $E$14 $F$14 $G$14 $H$14 $D$15 $E$15 $F$15 $G$15 $H$15 $D$16 $E$16 $F$16 $G$16 $H$16 $D$17 $E$17 $F$17 $G$17 $H$17 $D$18 $E$18 $F$18 $G$18 $H$18 $D$19 $E$19 $F$19 $G$19 $H$19 $D$20 $E$20 $F$20 $G$20 $H$20 $D$21 $E$21 $F$21 $G$21 $H$21 $D$22 $E$22 $F$22 $G$22 $H$22 $D$23 $E$23 $F$23 $G$23 $H$23 $D$24 $E$24 $F$24$G$2 $H$24 $D$25 $E$25 $F$25 $G$25 $H$25 $D$26 $E$26 $F$26 $G$26 $H$26 $D$27 $E$27 $F$27 $G$27 $H$27 $D$28 $E$28 $F$28 $G$28 $H$28 $D$29 $E$29 $F$29 $G$29 $H$29 $D$30 $E$30 $F$30 $G$30 $H$30 $D$31 $E$31 $F$31 $G$31 $H$31 $D$32 $E$32 $F$32 $G$32 $H$32 $D$3 $E$33 $F$33 $G$33 $H$33" lstTournee.Visible = False lstTournee.Clear lstTournee.AddItem "1-c11" lstTournee.AddItem "1-c12" lstTournee.AddItem "1-c13" lstTournee.AddItem "1-c14" lstTournee.AddItem "1-c15" lstTournee.AddItem "1-c21" lstTournee.AddItem "1-c22" lstTournee.AddItem "1-c23" lstTournee.AddItem "1-c36" lstTournee.AddItem "1-c41" lstTournee.AddItem "1-c42" lstTournee.AddItem "1-c43" lstTournee.AddItem "1-c44" lstTournee.AddItem "1-c45" lstTournee.AddItem "1-c57" lstTournee.AddItem "1-c58" lstTournee.AddItem "1-c66" lstTournee.AddItem "1-c68" lstTournee.AddItem "1-c89" lstTournee.AddItem "2-c11" lstTournee.AddItem "2-c12" lstTournee.AddItem "2-c13" lstTournee.AddItem "2-c14" lstTournee.AddItem "2-c15" lstTournee.AddItem "2-c16" lstTournee.AddItem "2-c21" lstTournee.AddItem "2-c22" lstTournee.AddItem "2-c31" lstTournee.AddItem "2-c37" lstTournee.AddItem "2-c41" lstTournee.AddItem "2-c42" lstTournee.AddItem "2-c43" lstTournee.AddItem "2-c45" lstTournee.AddItem "2-c48" lstTournee.AddItem "2-c57" lstTournee.AddItem "2-c58" lstTournee.AddItem "2-c66" lstTournee.AddItem "2-c68" lstTournee.AddItem "2-c89" lstTournee.AddItem "2-c151" lstTournee.AddItem "3-c11" lstTournee.AddItem "3-c12" lstTournee.AddItem "3-c13" lstTournee.AddItem "3-c14" lstTournee.AddItem "3-c15" lstTournee.AddItem "3-c16" lstTournee.AddItem "3-c21" lstTournee.AddItem "3-c22" lstTournee.AddItem "3-c37" lstTournee.AddItem "3-c41" lstTournee.AddItem "3-c42" lstTournee.AddItem "3-c43" lstTournee.AddItem "3-c44" lstTournee.AddItem "3-c45" lstTournee.AddItem "3-c57" lstTournee.AddItem "3-c58" lstTournee.AddItem "3-c89" lstTournee.AddItem "4-c11" lstTournee.AddItem "4-c12" lstTournee.AddItem "4-c13" lstTournee.AddItem "4-c14" lstTournee.AddItem "4-c15" lstTournee.AddItem "4-c16" lstTournee.AddItem "4-c21" lstTournee.AddItem "4-c22" lstTournee.AddItem "4-c36" lstTournee.AddItem "4-c41" lstTournee.AddItem "4-c42" lstTournee.AddItem "4-c43" lstTournee.AddItem "4-c44" lstTournee.AddItem "4-c45" lstTournee.AddItem "4-c47" lstTournee.AddItem "4-c57" lstTournee.AddItem "4-c58" lstTournee.AddItem "4-c68" lstTournee.AddItem "4-c89" lstTournee.AddItem "5-c11" lstTournee.AddItem "5-c12" lstTournee.AddItem "5-c13" lstTournee.AddItem "5-c14" lstTournee.AddItem "5-c15" lstTournee.AddItem "5-c21" lstTournee.AddItem "5-c22" lstTournee.AddItem "5-c23" lstTournee.AddItem "5-c36" lstTournee.AddItem "5-c37" lstTournee.AddItem "5-c41" lstTournee.AddItem "5-c42" lstTournee.AddItem "5-c43" lstTournee.AddItem "5-c45" lstTournee.AddItem "5-c48" lstTournee.AddItem "5-c68" lstTournee.AddItem "5-c89" lstTournee.AddItem "4-c89" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "CE" lstTournee.AddItem "CE" lstTournee.AddItem "CE" lstTournee.AddItem "CCPT" lstTournee.AddItem "CCPT" lstTournee.AddItem "CCPT" lstTournee.AddItem "EFFACER" tintin = Split(mescels, " ") For i = 1 To UBound(tintin) - 1 Range(Replace(tintin(i), "$", "")).Value = "" '<----------- Erreur Next End Sub
Method 'Range' of object 'Woorksheet'-Failed
une idée merci
Re, donc,
Il semble que ce soit autre chose ... (et ne vois pas quoi, sans voir ta feuille)
Remplace donc ...
supprime tout ce que tu as mis dans cet évènement worksheet_activate et mets le dans une sub de ton choix (machin, par exemple)
et appelle machin depuis le click sur ton bouton de commande.
Dis-moi : la listbox et le bouton de commande : où les as-tu placés ? Ils doivent l'être sur la feuille en cours.
EDIT : il doit également être clair dans ton esprit que si ton code, tel qu'il est là, "marche" sur un projet nouveau (sans le reste de tes opérations) et qu'il est défaillant lorsque tu t'en sers dans ton appli, le problème n'est pas à rechercher dans le code et son mécanisme, mais dans la manière dont tu les as insérés et t'en sers dans ton projet complet. ;)
voilà j'ai essayé mais il me retourne la mème erreur
voilà tout le code
Code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233 Dim Tournee As Range, mescels As String Private Sub cmdMaj_Click() 'Appel de la procédure activation de la feuille 'Worksheet_Activate CommandButton1_Click End Sub Private Sub CommandButton1_Click() mescels = " $D$3 $E$3 $F$3 $G$3 $H$3 $D$4 $E$4 $F$4 $G$4 $H$4 $D$5 $E$5 $F$5 $G$5 $H$5 $D$6 $E$6 $F$6 $G$6 $H$6 $D$7 $E$7 $F$7 $G$7 $H$7 $D$8 $E$8 $F$8 $G$8 $H$8 $D$9 $E$9 $F$9 $G$9 $H$9 $D$10 $E$10 $F$10 $G$10 $H$10 $D$11 $E$11 $F$11 $G$11 $H$11 $D$12 $E$12 $F$12 $G$12 $H$12 $D$13 $E$13 $F$13 $G$13 $H$13 $D$14 $E$14 $F$14 $G$14 $H$14 $D$15 $E$15 $F$15 $G$15 $H$15 $D$16 $E$16 $F$16 $G$16 $H$16 $D$17 $E$17 $F$17 $G$17 $H$17 $D$18 $E$18 $F$18 $G$18 $H$18 $D$19 $E$19 $F$19 $G$19 $H$19 $D$20 $E$20 $F$20 $G$20 $H$20 $D$21 $E$21 $F$21 $G$21 $H$21 $D$22 $E$22 $F$22 $G$22 $H$22 $D$23 $E$23 $F$23 $G$23 $H$23 $D$24 $E$24 $F$24$G$2 $H$24 $D$25 $E$25 $F$25 $G$25 $H$25 $D$26 $E$26 $F$26 $G$26 $H$26 $D$27 $E$27 $F$27 $G$27 $H$27 $D$28 $E$28 $F$28 $G$28 $H$28 $D$29 $E$29 $F$29 $G$29 $H$29 $D$30 $E$30 $F$30 $G$30 $H$30 $D$31 $E$31 $F$31 $G$31 $H$31 $D$32 $E$32 $F$32 $G$32 $H$32 $D$3 $E$33 $F$33 $G$33 $H$33" lstTournee.Visible = False lstTournee.Clear lstTournee.AddItem "1-c11" lstTournee.AddItem "1-c12" lstTournee.AddItem "1-c13" lstTournee.AddItem "1-c14" lstTournee.AddItem "1-c15" lstTournee.AddItem "1-c21" lstTournee.AddItem "1-c22" lstTournee.AddItem "1-c23" lstTournee.AddItem "1-c36" lstTournee.AddItem "1-c41" lstTournee.AddItem "1-c42" lstTournee.AddItem "1-c43" lstTournee.AddItem "1-c44" lstTournee.AddItem "1-c45" lstTournee.AddItem "1-c57" lstTournee.AddItem "1-c58" lstTournee.AddItem "1-c66" lstTournee.AddItem "1-c68" lstTournee.AddItem "1-c89" lstTournee.AddItem "2-c11" lstTournee.AddItem "2-c12" lstTournee.AddItem "2-c13" lstTournee.AddItem "2-c14" lstTournee.AddItem "2-c15" lstTournee.AddItem "2-c16" lstTournee.AddItem "2-c21" lstTournee.AddItem "2-c22" lstTournee.AddItem "2-c31" lstTournee.AddItem "2-c37" lstTournee.AddItem "2-c41" lstTournee.AddItem "2-c42" lstTournee.AddItem "2-c43" lstTournee.AddItem "2-c45" lstTournee.AddItem "2-c48" lstTournee.AddItem "2-c57" lstTournee.AddItem "2-c58" lstTournee.AddItem "2-c66" lstTournee.AddItem "2-c68" lstTournee.AddItem "2-c89" lstTournee.AddItem "2-c151" lstTournee.AddItem "3-c11" lstTournee.AddItem "3-c12" lstTournee.AddItem "3-c13" lstTournee.AddItem "3-c14" lstTournee.AddItem "3-c15" lstTournee.AddItem "3-c16" lstTournee.AddItem "3-c21" lstTournee.AddItem "3-c22" lstTournee.AddItem "3-c37" lstTournee.AddItem "3-c41" lstTournee.AddItem "3-c42" lstTournee.AddItem "3-c43" lstTournee.AddItem "3-c44" lstTournee.AddItem "3-c45" lstTournee.AddItem "3-c57" lstTournee.AddItem "3-c58" lstTournee.AddItem "3-c89" lstTournee.AddItem "4-c11" lstTournee.AddItem "4-c12" lstTournee.AddItem "4-c13" lstTournee.AddItem "4-c14" lstTournee.AddItem "4-c15" lstTournee.AddItem "4-c16" lstTournee.AddItem "4-c21" lstTournee.AddItem "4-c22" lstTournee.AddItem "4-c36" lstTournee.AddItem "4-c41" lstTournee.AddItem "4-c42" lstTournee.AddItem "4-c43" lstTournee.AddItem "4-c44" lstTournee.AddItem "4-c45" lstTournee.AddItem "4-c47" lstTournee.AddItem "4-c57" lstTournee.AddItem "4-c58" lstTournee.AddItem "4-c68" lstTournee.AddItem "4-c89" lstTournee.AddItem "5-c11" lstTournee.AddItem "5-c12" lstTournee.AddItem "5-c13" lstTournee.AddItem "5-c14" lstTournee.AddItem "5-c15" lstTournee.AddItem "5-c21" lstTournee.AddItem "5-c22" lstTournee.AddItem "5-c23" lstTournee.AddItem "5-c36" lstTournee.AddItem "5-c37" lstTournee.AddItem "5-c41" lstTournee.AddItem "5-c42" lstTournee.AddItem "5-c43" lstTournee.AddItem "5-c45" lstTournee.AddItem "5-c48" lstTournee.AddItem "5-c68" lstTournee.AddItem "5-c89" lstTournee.AddItem "4-c89" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "bur" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "Mont" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "sant" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "va" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "rec" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "chomE" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "FormS" lstTournee.AddItem "CE" lstTournee.AddItem "CE" lstTournee.AddItem "CE" lstTournee.AddItem "CCPT" lstTournee.AddItem "CCPT" lstTournee.AddItem "CCPT" lstTournee.AddItem "EFFACER" tintin = Split(mescels, " ") For i = 1 To UBound(tintin) - 1 Range(Replace(tintin(i), "$", "")).Value = "" Next End Sub Private Sub lstTournee_Click() Dim nbr As Integer nbr = lstTournee.ListIndex Application.ScreenUpdating = False If Tournee.Value <> "" Then lstTournee.AddItem Tournee.Value Tournee.Value = IIf(lstTournee.List(nbr) = "EFFACER", "", lstTournee.List(nbr)) lstTournee.ListIndex = -1 If lstTournee.List(nbr) <> "EFFACER" Then lstTournee.RemoveItem (nbr) lstTournee.Visible = False Application.ScreenUpdating = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) lstTournee.Visible = False Set Tournee = Target If InStr(mescels, " " & Target.Address & " ") = 0 Then Exit Sub lstTournee.Width = IIf(lstTournee.Width < Target.Width, Target.Width, lstTournee.Width) lstTournee.Left = Tournee.Left lstTournee.Top = Tournee.Top lstTournee.Visible = True End Sub
et une image de la feuille
Re...
C'est pas malin, çà ...
Regarde donc ce que tu as écrit :
Cherche là-dedans ce que j'ai mis en rouge et en gros caractères ...:ccool:Code:mescels = " $D$3 $E$3 $F$3 $G$3 $H$3 $D$4 $E$4 $F$4 $G$4 $H$4 $D$5 $E$5 $F$5 $G$5 $H$5 $D$6 $E$6 $F$6 $G$6 $H$6 $D$7 $E$7 $F$7 $G$7 $H$7 $D$8 $E$8 $F$8 $G$8 $H$8 $D$9 $E$9 $F$9 $G$9 $H$9 $D$10 $E$10 $F$10 $G$10 $H$10 $D$11 $E$11 $F$11 $G$11 $H$11 $D$12 $E$12 $F$12 $G$12 $H$12 $D$13 $E$13 $F$13 $G$13 $H$13 $D$14 $E$14 $F$14 $G$14 $H$14 $D$15 $E$15 $F$15 $G$15 $H$15 $D$16 $E$16 $F$16 $G$16 $H$16 $D$17 $E$17 $F$17 $G$17 $H$17 $D$18 $E$18 $F$18 $G$18 $H$18 $D$19 $E$19 $F$19 $G$19 $H$19 $D$20 $E$20 $F$20 $G$20 $H$20 $D$21 $E$21 $F$21 $G$21 $H$21 $D$22 $E$22 $F$22 $G$22 $H$22 $D$23 $E$23 $F$23 $G$23 $H$23 $D$24 $E$24 $F$24$G$2 $H$24 $D$25 $E$25 $F$25 $G$25 $H$25 $D$26 $E$26 $F$26 $G$26 $H$26 $D$27 $E$27 $F$27 $G$27 $H$27 $D$28 $E$28 $F$28 $G$28 $H$28 $D$29 $E$29 $F$29 $G$29 $H$29 $D$30 $E$30 $F$30 $G$30 $H$30 $D$31 $E$31 $F$31 $G$31 $H$31 $D$32 $E$32 $F$32 $G$32 $H$32 $D$3 $E$33 $F$33 $G$33 $H$33"
T'as vu ?
Bon ... ===>>> corrige !