C'est un tableau de tournoi double KO (avec un coté perdante et un coté gagnant )
On pourrait faire une présentation plus linéaire qui arrangerait les formules, mais ce serait aussi moins agréable visuellement.
Bon voilà le code que j'aimerais, (en fait c'est la moitié, j'en fais un 2ème pour afficher le 2ème joueur dans une autre case, donc avec d'autres Offset)
malheureusement il y a une erreur de syntaxe dans la 2ème ligne 'Dim Cellule As Range' et je ne vois pas quoi, il y a-t il trop d'arguments?
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 Function TrouverValeurV5(ByVal ValeurATrouver As Integer) As Variant Dim Cellule As Range, Premiertour As Range, TourGagnant1 As Range, TourGagnant2 As Range, TourPerdant1et2 As range, TourPerdant3 As Range, Application.Volatile TrouverValeurV5 = "" With ActiveSheet Set Premiertour = .Range("V5,V9,V15,V19,V26,V30,V36,V40,V53,V57,V63,V63,V67,V74,V78,V84,V88") Set TourGagnant1 = .Range("Y7,Y17,Y28,Y38,Y55,Y65,Y76,Y86") Set TourGagnant2 = .Range("AB12,AB33,AB60,AB81") Set TourPerdant1et2 = .Range("O7,O17,O28,O38,O55,O65,O76,O86,K9,K19,K30,K40,K57,K67,K78,K88") Set TourPerdant3 = .Range("G14,G35,D19,D40") For Each Cellule In Premiertour If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In TourGagnant1 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-2, -2) End If Next Cellule For Each Cellule In TourGagnant2 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-5, -2) Exit Function End If Next Cellule For Each Cellule In TourPerdant1et2 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(2, -2) End If Next Cellule For Each Cellule In TourPerdant3 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(2, -5) End If Next Cellule End With Set Premiertour = Nothing Set TourGagnant1 = Nothing Set TourGagnant2 = Nothing Set TourPerdant1et2 = Nothing Set TourPerdant3 = Nothing End Function
Désolé, j'avoue ne pas connaitre du tout le VBA...
On ne peut pas écrire autant de plages?
C'est la virgule à la fin qui fait foirer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim Cellule As Range, Premiertour As Range, TourGagnant1 As Range, TourGagnant2 As Range, TourPerdant1et2 As range, TourPerdant3 As Range
C'est super, j'ai quelques erreurs d'adresse à corriger dans mes Cellule.Offset mais cela fonctionne!
Une dernière question, est que d'enlever le 'As Variant' pour ne laisser que 'As Integuer" (je ne sais pas comment il faudrait l'écrire et si je ne dis pas de bêtise, pourrait alléger le tout?
Si tu types ta fonction avec Integer, tu ne pourras récupérer qu'un entier. Est-ce cela que tu veux ? Si oui, il te faut initialiser ta fonction à 0 au lieu de ""
Sinon, quel est le problème ?
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 Function TrouverValeurV5(ByVal ValeurATrouver As Integer) As Integer Dim Cellule As Range, Premiertour As Range, TourGagnant1 As Range, TourGagnant2 As Range, TourPerdant1et2 As range, TourPerdant3 As Range Application.Volatile TrouverValeurV5 = 0 With ActiveSheet Set Premiertour = .Range("V5,V9,V15,V19,V26,V30,V36,V40,V53,V57,V63,V63,V67,V74,V78,V84,V88") Set TourGagnant1 = .Range("Y7,Y17,Y28,Y38,Y55,Y65,Y76,Y86") Set TourGagnant2 = .Range("AB12,AB33,AB60,AB81") Set TourPerdant1et2 = .Range("O7,O17,O28,O38,O55,O65,O76,O86,K9,K19,K30,K40,K57,K67,K78,K88") Set TourPerdant3 = .Range("G14,G35,D19,D40") For Each Cellule In Premiertour If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In TourGagnant1 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-2, -2) End If Next Cellule For Each Cellule In TourGagnant2 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(-5, -2) Exit Function End If Next Cellule For Each Cellule In TourPerdant1et2 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(2, -2) End If Next Cellule For Each Cellule In TourPerdant3 If Cellule = ValeurATrouver Then TrouverValeurV2 = Cellule.Offset(2, -5) End If Next Cellule End With Set Premiertour = Nothing Set TourGagnant1 = Nothing Set TourGagnant2 = Nothing Set TourPerdant1et2 = Nothing Set TourPerdant3 = Nothing End Function
Ok je testerais, mais je ne me rends pas compte si ça peut être significatif ou non, la différence.
Sinon je n'ai pas de problème j'ai corrigé mes Offset et tout fonctionne parfaitement.
Je vous remercie infiniment, je suis très heureux d'avoir à mettre cela en place, je repasserais si j'ai un souci car je dois adapter cela à plusieurs tableaux différends, mais j'ai le code et est compris comment l'adapter, donc c'est un problème résolu pour moi.
Rebonjour, J'ai extrapolé un peu, assez loin, ça fonctionnait très bien, mais là ça bloque, serais-je allé trop loin?
Ou est-ce une chose que j'ai mal écrite, ou interdite, je n'arrive pas à trouver quoi. En tout cas il me fait une "VALEUR!
Est-ce qu'on ne peut déclarer plusieurs plages de la sorte? Ca fonctionnait bien avec 'activesheets", Mais j'aurais aimé pouvoir définir des plages différentes selon les feuilles.
Merci
Edit: Erreur de copier coller dans le code
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
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 Function TrouverValeurV7(ByVal ValeurATrouver As Integer) As Variant Dim Cellule As Range, T32T1 As Range, T32TG1 As Range, T32TG2 As Range, T32P1ET2 As Range, T32TP3ET4 As Range, T32T14Finale As Range, T32T12Finale As Range, T32Finale As Range, T16T1 As Range, TT16TG1 As Range, T16TG2 As Range, T16TP1ET2 As Range, T16TP3ET4 As Range, T16T14Finale8 As Range, T16T12Finale8 As Range, T16Finale8 As Range, Tour12Finale4 As Range, T16Finale4 As Range, T161KO1 As Range, T161KOTG1 As Range, T161KOTG2 As Range, T161KOFinale As Range Application.Volatile TrouverValeurV7 = "" Set T32T1 = Sheets("TABLEAU 32-8").Range("V5,V9,V15,V19,V26,V30,V36,V40,V53,V57:V63,V63,V67,V74,V78,V84,V88") Set T32TG1 = Sheets("TABLEAU 32-8").Range("Y7,Y17,Y28,Y38,Y55,Y65,Y76,Y86") Set T32TG2 = Sheets("TABLEAU 32-8").Range("AB12,AB33,AB60,AB81") Set T32P1ET2 = Sheets("TABLEAU 32-8").Range("O7,O17,O28,O38,O55,O65,O76,O86,K9,K19,K30,K40,K57,K67,K78,K88") Set T32TP3ET4 = Sheets("TABLEAU 32-8").Range("G14,G35,D19,D40") Set T32T14Finale = Sheets("TABLEAU 32-8").Range("H102,H108,H114,H120") Set T32T12Finale = Sheets("TABLEAU 32-8").Range("K105,K117") Set T32Finale = Sheets("TABLEAU 32-8").Range("O111") Set T16T1 = Sheets("TABLEAU 16-4").Range("V5,V9,V15,V19,V26,V30,V36,V40,V53,V57:V63,V63,V67,V74,V78,V84,V88") Set TT16TG1 = Sheets("TABLEAU 16-4").Range("Y7,Y17,Y28,Y38,Y55,Y65,Y76,Y86") Set T16TG2 = Sheets("TABLEAU 16-4").Range("AB12,AB33") Set T16TP1ET2 = Sheets("TABLEAU 16-4").Range("O7,O17:O19,O28,O38,L9,L19,L30,L40") Set T16TP3ET4 = Sheets("TABLEAU 16-4").Range("G14,G35,D19,D40") Set T16T14Finale8 = Sheets("TABLEAU 16-4").Range("H56,H64,H68,H74") Set T16T12Finale8 = Sheets("TABLEAU 16-4").Range("K59,K717") Set T16Finale8 = Sheets("TABLEAU 16-4").Range("N65") Set T1612Finale4 = Sheets("TABLEAU 16-4").Range("E895,E101") Set T16Finale4 = Sheets("TABLEAU 16-4").Range("H95") Set T161KO1 = Sheets("TABLEAU 16-4").Range("C5,C9,C15,C19,C25,C29,C35,C39,C54,C58,C64,C68") Set T161KOTG1 = Sheets("TABLEAU 16-4").Range("F7,F17,F27,F37,F56,F66") Set T161KOTG2 = Sheets("TABLEAU 16-4").Range("I12,I32,I61") Set T161KOFinale = Sheets("TABLEAU 16-4").Range("L22") For Each Cellule In T32T1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In T32TG1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-2, -2) End If Next Cellule For Each Cellule In T32TG2 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-5, -2) Exit Function End If Next Cellule For Each Cellule In T32P1ET2 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(2, -2) End If Next Cellule For Each Cellule In T32TP3ET4 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-5, 2) End If Next Cellule For Each Cellule In T32T14Finale If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In T32T12Finale If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-3, -2) Exit Function End If Next Cellule For Each Cellule In T32Finale If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-6, -2) Exit Function End If Next Cellule For Each Cellule In T16T1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In TT16TG1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-2, -2) End If Next Cellule For Each Cellule In T16TG2 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-5, -2) Exit Function End If Next Cellule For Each Cellule In T16TP1ET2 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-2, -2) End If Next Cellule For Each Cellule In T16TP3ET4 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-5, 2) End If Next Cellule For Each Cellule In T16T14Finale8 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In T16T12Finale8 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-3, -2) Exit Function End If Next Cellule For Each Cellule In T16Finale8 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-6, -2) Exit Function End If Next Cellule For Each Cellule In T1612Finale4 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-3, -2) Exit Function End If Next Cellule For Each Cellule In T16Finale4 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-6, -2) Exit Function End If Next Cellule For Each Cellule In T161KO1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-1, -2) Exit Function End If Next Cellule For Each Cellule In T161KOTG1 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-3, -2) Exit Function End If Next Cellule For Each Cellule In T161KOTG2 If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-6, -2) Exit Function End If Next Cellule For Each Cellule In T161KOFinale If Cellule = ValeurATrouver Then TrouverValeurV7 = Cellule.Offset(-10, -2) Exit Function End If Next Cellule Set T32T1 = Nothing Set T32TG1 = Nothing Set T32TG2 = Nothing Set T32P1ET2 = Nothing Set T32TP3ET4 = Nothing Set T32T14Finale = Nothing Set T32T12Finale = Nothing Set T32Finale = Nothing Set T16T1 = Nothing Set TT16TG1 = Nothing Set T16TG2 = Nothing Set T16TP1ET2 = Nothing Set T16TP3ET4 = Nothing Set T16T14Finale8 = Nothing Set T16T12Finale8 = Nothing Set T16Finale8 = Nothing Set T1612Finale4 = Nothing Set T16Finale4 = Nothing Set T161KO1 = Nothing Set T161KOTG1 = Nothing Set T161KOTG2 = Nothing Set T161KOFinale = Nothing End Function
Bonjour, je refais appel, pour une fonction tellement simple que je n'arrive pas à la trouver, mais je me plonge dans le VBA dès que j'ai du temps!
Je cherche à retourner la valeur cherchée, comme dans ce premier exemple que vous m'avez proposé, mais sans offset.
Simplement savoir si la valeur "*" se trouve dans la 'Range' de cellules non contigues. la valeur cherchée est unique, et un nombre entier.
Je cherche savoir si il y a "1" dans la 'Range', ensuite dans une autre case pour la même 'Range'
s'il y a "2", ensuite
s'il y a "3", jusqu'à 10.
Merci.
Partager