Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ecriture dans des tableaux dynamiques

7 réponses
Avatar
JP
Bonjour,

Dans une feuille, j'ai 12 petits tableaux de 4 colonnes et un nombre de li=
gnes variable. Dans le cas pr=E9sent, le nombre de lignes et =E9gal au nomb=
re de joueurs.
J'ai cr=E9=E9 des tableaux dynamiques en utilisant d'une part la variable N=
bJoueurs et des coordonn=E9es et d'autre part, des tableaux (array) pour l=
es coordonn=E9es.

J'ai une erreur dans l'=E9criture << Class(nom) (nom, 0) =3D .Cells(lig(i) =
+ nom, col(c)) >>
Je voudrais obtenir pour Class(nom) =3D PA puis PB, etc...
PA(0,0)=3D .Cells(lig(i) + nom, col(c))=20
PA( etc...
Le code int=E9ressant la question ci-dessous.

Merci pour les conseils.

Cordialement=20

JP

Sub CompleteTabFinales()
Dim NbJoueurs As Byte
Dim lig As variant
Dim col As variant

'd=E9claration dynamique des tableaux de poules
Dim PA(), PB(), PC(), PD(), PE(), PF()
Dim PG(), PH(), PI(), PJ(), PK(), PL()
Dim Class()

Set ShI =3D Sheets("Inscription")

' Nombre d'=E9quipes par poules
NbEq =3D ShI.Range("C30").Value

' Nombre de Joueurs par poules
NbJoueurs =3D NbEq * 2

' Nombre de terrains
NbTer =3D 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=E9es des colonnes et des lignes o=F9 se trouvent les premiers no=
ms des joueurs

col =3D Array(5, 11, 17, 23)
lig =3D Array(5, 21, 37)
Class =3D Array("PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ",=
"PK", "PL")

'Ecriture dans le tableau Class
For c =3D 0 To 3
For i =3D 0 To 2
If Sheets("accueil et synth=E8se").Cells(lig(i), col(c)) <> "" Then
For nom =3D 0 To NbJoueurs - 1

With Sheets("accueil et synth=E8se")
Class(nom) (nom, 0) =3D .Cells(lig(i) + nom, col(c))
Class(nom) (nom, 1) =3D .Cells(lig(i) + nom, col(c) + 1=
)
Class(nom) (nom, 2) =3D .Cells(lig(i) + nom, col(c) + 2=
)
Class(nom) (nom, 3) =3D .Cells(lig(i) + nom, col(c) + 3=
)
End With
=20
Next nom
Else
Exit For
End If
Next i
Next c

End sub

7 réponses

Avatar
MichD
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.
Avatar
JP
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
Avatar
MichD
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
'-----------------------------------------
Avatar
MichD
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
Avatar
JP
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à?
Avatar
JP
non, je crois que j'ai dit une bêtise.
Dans mon msgbox j'ai bien PA et non "PA"

Désolé

JP
Avatar
JP
Bonjour Denis,

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

Cordialement

JP