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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26024342
Bonjour,

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.
JP
Le #26024382
Bonjour Denis,

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
MichD
Le #26024412
As-tu déjà essayé quelque chose comme ça :

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
'-----------------------------------------
MichD
Le #26024432
La procédure test() est plutôt celle-ci :

'------------------------------------------
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
JP
Le #26024452
Je viens d'essayer mais j'ai la même erreur: erreur 13 incompatibilité de 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à?
JP
Le #26024472
non, je crois que j'ai dit une bêtise.
Dans mon msgbox j'ai bien PA et non "PA"

Désolé

JP
JP
Le #26025022
Bonjour Denis,

Je viens de créer un fichier exemple pour illustrer le problème.
http://cjoint.com/?DCjjU00l3SR

Cordialement

JP
Publicité
Poster une réponse
Anonyme