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
| Sub liste_joueurs()
Option Explicit
Dim c As Range
Dim maplage As Range
Dim a As Integer
Dim i As Integer
Dim nb As Integer
Dim x As Integer
Dim y As Integer
Dim ligne As Integer
Dim nb_jours As Integer
Dim nb_parties_jour As Integer
Dim col As Integer
Dim L1 As Integer
Dim L2 As Integer
Dim les_joueurs As String
Dim nom_joueur As String
Dim Tablo()
' IMPERATIFS (comme sur le fichier modèle)
' le numérotage des parties est en colonne "A"
' les jours en ligne "1"
' le début des saisies des joueurs en cellule "B4"
' une ligne vide entre les joueurs de chaque partie
nom_joueur = Range("A1") ' nom du joueur à chercher. A modifier suivant l'emplacement
nb_parties_jour = Application.WorksheetFunction.CountA(Range("a3:a65536"))
nb_jours = Application.WorksheetFunction.CountA(Range("a4:iv4"))
nb = Application.WorksheetFunction.CountA(Range("B4").CurrentRegion) ' un peu plus grand qu'il ne faut
ReDim Tablo(nb)
' 1ère ligne de la partie
L1 = Range("B1").End(xlDown).Row
' dernière ligne de la partie
L2 = Range("B" & L1).End(xlDown).Row
col = 2
i = 0
' boucle sur le nb de parties
For a = 1 To nb_parties_jour * nb_jours
' vérification que la ligne suivante ne soit pas égale à 0 => fin des saisies de la colonne
While Cells(L1 + 1, col) <> 0
ligne = L1
' recherche du nom du joueur dans la partie
' puis balayage des parties du jour
With Worksheets("Feuil1").Range(Cells(L1, col), Cells(L2, col))
Set c = .Find(nom_joueur, LookIn:=xlValues, Lookat:=xlWhole)
If Not c Is Nothing Then
' si oui on place TOUS les noms des joueurs de la partie dans tablo
While i < L2 - (L1 - 1)
Tablo(x) = Cells(ligne, col)
x = x + 1
i = i + 1
ligne = ligne + 1
Wend
i = 0
End If
End With
' réinitialisation de L1 et L2 pour la partie suivante dans la même colonne
L1 = Range("B" & L2).Row + 2
If Cells(Range("B" & L1).Row + 1, col) <> "" Then L2 = Range("B" & L1).End(xlDown).Row
Wend
' passage à la colonne suivante
If Cells(Range("B1").End(xlDown).Row + 1, col) <> 0 Then col = col + 1 Else Exit For
' réinitialisation de L1 et L2 pour la colonne suivante
L1 = Range("B1").End(xlDown).Row
L2 = Range("B" & L1).End(xlDown).Row
Next
' la liste des joueurs, pour mon exemple, est en R1:R15. Modifier le "R1" et "R" et "R1", si la liste est dans une autre colonne
Set maplage = Range("R1:R" & Range("R1").End(xlDown).Row)
' boucle sur la totalité des noms de joueurs
For y = 1 To Application.WorksheetFunction.CountA(maplage)
' recherche si chaque nom de la liste des joueurs est dans le tablo
If Not IsError(Application.Match(maplage(y), Tablo, 0)) = False Then
' si il n'y est pas, le nom du joueur est mis dans la variable "les_joueurs"
' mais on pourrait les mettre dans un nouveau "tablo1"
' le If est pour la présentation
If les_joueurs = "" Then
' le nom du premier joueur
les_joueurs = maplage(y)
Else
' le nom des joueurs suivants
les_joueurs = les_joueurs & ", " & maplage(y)
End If
End If
Next y
MsgBox "Les joueurs avec qui " & nom_joueur & " n'a pas joué sont : " & vbLf & les_joueurs
End Sub |
Partager