Ecriture dans des tableaux dynamiques
Le
JP

Bonjour,
Dans une feuille, j'ai 12 petits tableaux de 4 colonnes et un nombre de li=
gnes variable. Dans le cas présent, le nombre de lignes et égal au nomb=
re de joueurs.
J'ai créé des tableaux dynamiques en utilisant d'une part la variable N=
bJoueurs et des coordonnées et d'autre part, des tableaux (array) pour l=
es coordonnées.
J'ai une erreur dans l'écriture << Class(nom) (nom, 0) = .Cells(lig(i) =
+ nom, col(c)) >>
Je voudrais obtenir pour Class(nom) = PA puis PB, etc
PA(0,0)= .Cells(lig(i) + nom, col(c))
PA( etc
Le code intéressant la question ci-dessous.
Merci pour les conseils.
Cordialement
JP
Sub CompleteTabFinales()
Dim NbJoueurs As Byte
Dim lig As variant
Dim col As variant
'déclaration dynamique des tableaux de poules
Dim PA(), PB(), PC(), PD(), PE(), PF()
Dim PG(), PH(), PI(), PJ(), PK(), PL()
Dim Class()
Set ShI = Sheets("Inscription")
' Nombre d'équipes par poules
NbEq = ShI.Range("C30").Value
' Nombre de Joueurs par poules
NbJoueurs = NbEq * 2
' Nombre de terrains
NbTer = ShI.Range("C6").Value
'Redimensionnement des tableaux de poule
ReDim PA(NbJoueurs, 3), PB(NbJoueurs, 3), PC(NbJoueurs, 3), PD(NbJoueurs, 3=
), PE(NbJoueurs, 3), PF(NbJoueurs, 3)
ReDim PG(NbJoueurs, 3), PH(NbJoueurs, 3), PI(NbJoueurs, 3), PJ(NbJoueurs, 3=
), PK(NbJoueurs, 3), PL(NbJoueurs, 3)
ReDim classe(NbJoueurs, 3)
' coordonnées des colonnes et des lignes où se trouvent les premiers no=
ms des joueurs
col = Array(5, 11, 17, 23)
lig = Array(5, 21, 37)
Class = Array("PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ",=
"PK", "PL")
'Ecriture dans le tableau Class
For c = 0 To 3
For i = 0 To 2
If Sheets("accueil et synthèse").Cells(lig(i), col(c)) <> "" Then
For nom = 0 To NbJoueurs - 1
With Sheets("accueil et synthèse")
Class(nom) (nom, 0) = .Cells(lig(i) + nom, col(c))
Class(nom) (nom, 1) = .Cells(lig(i) + nom, col(c) + 1=
)
Class(nom) (nom, 2) = .Cells(lig(i) + nom, col(c) + 2=
)
Class(nom) (nom, 3) = .Cells(lig(i) + nom, col(c) + 3=
)
End With
Next nom
Else
Exit For
End If
Next i
Next c
End sub
Dans une feuille, j'ai 12 petits tableaux de 4 colonnes et un nombre de li=
gnes variable. Dans le cas présent, le nombre de lignes et égal au nomb=
re de joueurs.
J'ai créé des tableaux dynamiques en utilisant d'une part la variable N=
bJoueurs et des coordonnées et d'autre part, des tableaux (array) pour l=
es coordonnées.
J'ai une erreur dans l'écriture << Class(nom) (nom, 0) = .Cells(lig(i) =
+ nom, col(c)) >>
Je voudrais obtenir pour Class(nom) = PA puis PB, etc
PA(0,0)= .Cells(lig(i) + nom, col(c))
PA( etc
Le code intéressant la question ci-dessous.
Merci pour les conseils.
Cordialement
JP
Sub CompleteTabFinales()
Dim NbJoueurs As Byte
Dim lig As variant
Dim col As variant
'déclaration dynamique des tableaux de poules
Dim PA(), PB(), PC(), PD(), PE(), PF()
Dim PG(), PH(), PI(), PJ(), PK(), PL()
Dim Class()
Set ShI = Sheets("Inscription")
' Nombre d'équipes par poules
NbEq = ShI.Range("C30").Value
' Nombre de Joueurs par poules
NbJoueurs = NbEq * 2
' Nombre de terrains
NbTer = ShI.Range("C6").Value
'Redimensionnement des tableaux de poule
ReDim PA(NbJoueurs, 3), PB(NbJoueurs, 3), PC(NbJoueurs, 3), PD(NbJoueurs, 3=
), PE(NbJoueurs, 3), PF(NbJoueurs, 3)
ReDim PG(NbJoueurs, 3), PH(NbJoueurs, 3), PI(NbJoueurs, 3), PJ(NbJoueurs, 3=
), PK(NbJoueurs, 3), PL(NbJoueurs, 3)
ReDim classe(NbJoueurs, 3)
' coordonnées des colonnes et des lignes où se trouvent les premiers no=
ms des joueurs
col = Array(5, 11, 17, 23)
lig = Array(5, 21, 37)
Class = Array("PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ",=
"PK", "PL")
'Ecriture dans le tableau Class
For c = 0 To 3
For i = 0 To 2
If Sheets("accueil et synthèse").Cells(lig(i), col(c)) <> "" Then
For nom = 0 To NbJoueurs - 1
With Sheets("accueil et synthèse")
Class(nom) (nom, 0) = .Cells(lig(i) + nom, col(c))
Class(nom) (nom, 1) = .Cells(lig(i) + nom, col(c) + 1=
)
Class(nom) (nom, 2) = .Cells(lig(i) + nom, col(c) + 2=
)
Class(nom) (nom, 3) = .Cells(lig(i) + nom, col(c) + 3=
)
End With
Next nom
Else
Exit For
End If
Next i
Next c
End sub
Il ne faut jamais dire ce que l'on tente d'effectuer quand on pose une
question...
c'est la première règle lorsqu'on veut avoir de l'aide!
Le demandeur n'a qu'à deviner...
C'est quoi ça, je fais référence à cette section : Class(nom)(nom, 0).
Explique comment je devrais lire ton tableau?
Ton tableau (array) class() n'a qu'une dimension.
Le tableau class prend les valeurs PA puis PB puis PC jusqu'à PL.
Son indice va de 0 à 9 (car 10 joueurs)
Chaque joueur gagne ou perd des matches; des sets et des points.
Ce que je veux faire ce sont des tableaux qui reçoivent:
un NOM et prénom
un nombre pour le nombre de matches gagnés
un nombre pour le nombre de sets gagnés
un nombre pour le nombre de points gagnés ou perdus
Exemple:
PA(9,2) pour un tableau de 10 noms et 3 colonnes pour matches|sets|points
PB(9,2) pour un tableau de 10 noms et 3 colonnes pour matches|sets|points
PC(9,2) pour un tableau de 10 noms et 3 colonnes pour matches|sets|points
etc...
Je ne sais pas si c'est plus clair.
JPierre
Tu définis dans le haut d'un module standard :
'-----------------------------------------
Public Type Joueurs
Prénom() As String
Nom() As String
NbParties() As Long
End Type
'-----------------------------------------
Maintenant dans une procédure, tu peux utiliser ce type de tableau.
Tu utilises le nom de la variable que tu désires As Joueurs
Cette variable se compose de 3 éléments. Dès que tu tapes le point,
tu as une liste déroulante des éléments que tu as définis dans le "Type"
'-----------------------------------------
Sub test()
Dim Mesjoueurs As Joueurs
For A = 1 To 10
Mesjoueurs.Prénom(A) = Range("A" & A)
Mesjoueurs.Nom(A) = Range("B" & A)
Mesjoueurs.NbParties(A) = Range("C" & A)
Next
End Sub
'-----------------------------------------
'------------------------------------------
Sub test()
Dim Mesjoueurs As Joueurs
For A = 1 To 10
ReDim Preserve Mesjoueurs.Prénom(1 To A)
Mesjoueurs.Prénom(A) = Range("A" & A)
ReDim Preserve Mesjoueurs.Nom(1 To A)
Mesjoueurs.Nom(A) = Range("B" & A)
ReDim Preserve Mesjoueurs.NbParties(1 To A)
Mesjoueurs.NbParties(A) = Range("C" & A)
Next
End Sub
'------------------------------------------
Au lieu d'utiliser Redim Preserve, si tu connais déjà le nombre de joueurs
tu peux définir le type comme suit :
Public Type Joueurs
Prénom(1 to 10) As String
Nom(1 to 10) As String
NbParties(1 to 10) As Long
End Type
J'ai ajouté un msgbox avant la ligne qui me donne l'erreur. msgbox donne bien "PA".
MsgBox class(Nom)
class(Nom)(Nom, 0) = .Cells(Lig(i) + Nom, col(c))
je pense que ce sont les guillemets qui font l'erreur.
"PA"(Nom,0)= .Cells(Lig(i) + Nom, col(c))
Est-ce que l'erreur pourrait venir de là?
Dans mon msgbox j'ai bien PA et non "PA"
Désolé
JP
Je viens de créer un fichier exemple pour illustrer le problème.
http://cjoint.com/?DCjjU00l3SR
Cordialement
JP