OVH Cloud OVH Cloud

Récupérer variable

2 réponses
Avatar
Robert
Bonsoir tout le monde
J'ai déjà posé cette question (avec le même sujet) et j'ai eu une
réponse de Trirème mais qui ne convenait pas.

Mon message d'origine :
> Sur Xl 2003 en VBA uniquement
>
> Je galère un peu pour récupérer le contenu d'une variable qui change plusieurs fois. Je m'explique :
> la variable "a" passe dans une boucle pour me donner la valeur de x éléments. Ces éléments peuvent être en doublons ou pas. Je voudrais faire la somme du nombre d'éléments différents.
> ex: "a" vaut tantôt PL, CB, R, FS, PL, CB, FS...
> Il me faut faire la somme de PL (donc 2), puis celle de CB (2) etc...
>
> Pour attaquer mon problème, j'avais pensé à un tableau dynamique : myArray() qui se compléterais à chaque passage de "a" dans la boucle avec
> ReDim Preserve myArray(n) où "n" vaut 1 au début et prend +1 à chaque passage de boucle
> "a" est donc de type String, "n" de type Byte
>
> mais ça ne donne rien!!!
>
> merci de m'aiguiller sur une piste
>
> Robert

Je joins mon code pour plus de clarté

'Fonctionne jusqu'à 99 joueurs et jusqu'à 2 lettres pour le club
Sub nbreJoueursParAS()
Dim myCtrl As Control, joueur As String, nbr As Byte, n As Byte
Dim monClub As String, myArray()
n = 1
For Each myCtrl In UFrmTableauBad16.Controls
If myCtrl.tag = "Classnt" Then 'va tourner 16 fois
joueur = myCtrl.Value
nbr = Len(joueur) 'le nombre de caractères de chaque
joueur
Select Case nbr
Case 2
monClub = Left(joueur, 1)
MsgBox monClub
Case 3
If IsNumeric(Right(joueur, 2)) Then
monClub = Left(joueur, 1)
MsgBox monClub
ElseIf IsNumeric(Right(joueur, 1)) Then
monClub = Left(joueur, 2)
MsgBox monClub
End If
Case 4
monClub = Left(joueur, 2)
MsgBox monClub
End Select
'jusque là tout fonctionne, mais comment récupérer chaque valeur de monClub?
'J'ai penser à un tableau qui se nourrit de la boucle, mais...???
myArray = Array(monClub)
ReDim Preserve myArray(1 To n)
n = 1 + 1
End If
Next myCtrl
End Sub
Merci de votre réponse
Robert

2 réponses

Avatar
Lolote
Salut Robert,

Test effectué avec des valeurs en colonnes A (PL, CB, R, FS, PL, CB, FS...).
Je sais, ce n'est peut être pas tout a fait ce que tu recherches mais tu
pourrais t'en inspirer.

Sub Test()
Dim xTab(1, 11)
xPlace = 0
For Each xCellule In Range("A1:A12")
For F = 0 To 6
If xTab(0, F) = xCellule Then
xTab(1, F) = xTab(1, F) + 1
GoTo Suite
End If
Next F
xTab(0, xPlace) = xCellule
xTab(1, xPlace) = 1
xPlace = xPlace + 1
Suite:
Next
End Sub

@+ Lolote


"Robert" a écrit dans le message de news:

Bonsoir tout le monde
J'ai déjà posé cette question (avec le même sujet) et j'ai eu une réponse
de Trirème mais qui ne convenait pas.

Mon message d'origine :
Sur Xl 2003 en VBA uniquement

Je galère un peu pour récupérer le contenu d'une variable qui change
plusieurs fois. Je m'explique :
la variable "a" passe dans une boucle pour me donner la valeur de x
éléments. Ces éléments peuvent être en doublons ou pas. Je voudrais faire
la somme du nombre d'éléments différents.
ex: "a" vaut tantôt PL, CB, R, FS, PL, CB, FS...
Il me faut faire la somme de PL (donc 2), puis celle de CB (2) etc...

Pour attaquer mon problème, j'avais pensé à un tableau dynamique :
myArray() qui se compléterais à chaque passage de "a" dans la boucle avec
ReDim Preserve myArray(n) où "n" vaut 1 au début et prend +1 à chaque
passage de boucle
"a" est donc de type String, "n" de type Byte

mais ça ne donne rien!!!

merci de m'aiguiller sur une piste

Robert


Je joins mon code pour plus de clarté

'Fonctionne jusqu'à 99 joueurs et jusqu'à 2 lettres pour le club
Sub nbreJoueursParAS()
Dim myCtrl As Control, joueur As String, nbr As Byte, n As Byte
Dim monClub As String, myArray()
n = 1
For Each myCtrl In UFrmTableauBad16.Controls
If myCtrl.tag = "Classnt" Then 'va tourner 16 fois
joueur = myCtrl.Value
nbr = Len(joueur) 'le nombre de caractères de chaque
joueur
Select Case nbr
Case 2
monClub = Left(joueur, 1)
MsgBox monClub
Case 3
If IsNumeric(Right(joueur, 2)) Then
monClub = Left(joueur, 1)
MsgBox monClub
ElseIf IsNumeric(Right(joueur, 1)) Then
monClub = Left(joueur, 2)
MsgBox monClub
End If
Case 4
monClub = Left(joueur, 2)
MsgBox monClub
End Select
'jusque là tout fonctionne, mais comment récupérer chaque valeur de
monClub?
'J'ai penser à un tableau qui se nourrit de la boucle, mais...???
myArray = Array(monClub)
ReDim Preserve myArray(1 To n)
n = 1 + 1
End If
Next myCtrl
End Sub
Merci de votre réponse
Robert



Avatar
Robert
De toutes façons Merci
Je teste ce que je peux en faire
Robert
Salut Robert,

Test effectué avec des valeurs en colonnes A (PL, CB, R, FS, PL, CB, FS...).
Je sais, ce n'est peut être pas tout a fait ce que tu recherches mais tu
pourrais t'en inspirer.

Sub Test()
Dim xTab(1, 11)
xPlace = 0
For Each xCellule In Range("A1:A12")
For F = 0 To 6
If xTab(0, F) = xCellule Then
xTab(1, F) = xTab(1, F) + 1
GoTo Suite
End If
Next F
xTab(0, xPlace) = xCellule
xTab(1, xPlace) = 1
xPlace = xPlace + 1
Suite:
Next
End Sub

@+ Lolote


"Robert" a écrit dans le message de news:

Bonsoir tout le monde
J'ai déjà posé cette question (avec le même sujet) et j'ai eu une réponse
de Trirème mais qui ne convenait pas.

Mon message d'origine :
Sur Xl 2003 en VBA uniquement

Je galère un peu pour récupérer le contenu d'une variable qui change
plusieurs fois. Je m'explique :
la variable "a" passe dans une boucle pour me donner la valeur de x
éléments. Ces éléments peuvent être en doublons ou pas. Je voudrais faire
la somme du nombre d'éléments différents.
ex: "a" vaut tantôt PL, CB, R, FS, PL, CB, FS...
Il me faut faire la somme de PL (donc 2), puis celle de CB (2) etc...

Pour attaquer mon problème, j'avais pensé à un tableau dynamique :
myArray() qui se compléterais à chaque passage de "a" dans la boucle avec
ReDim Preserve myArray(n) où "n" vaut 1 au début et prend +1 à chaque
passage de boucle
"a" est donc de type String, "n" de type Byte

mais ça ne donne rien!!!

merci de m'aiguiller sur une piste

Robert
Je joins mon code pour plus de clarté


'Fonctionne jusqu'à 99 joueurs et jusqu'à 2 lettres pour le club
Sub nbreJoueursParAS()
Dim myCtrl As Control, joueur As String, nbr As Byte, n As Byte
Dim monClub As String, myArray()
n = 1
For Each myCtrl In UFrmTableauBad16.Controls
If myCtrl.tag = "Classnt" Then 'va tourner 16 fois
joueur = myCtrl.Value
nbr = Len(joueur) 'le nombre de caractères de chaque
joueur
Select Case nbr
Case 2
monClub = Left(joueur, 1)
MsgBox monClub
Case 3
If IsNumeric(Right(joueur, 2)) Then
monClub = Left(joueur, 1)
MsgBox monClub
ElseIf IsNumeric(Right(joueur, 1)) Then
monClub = Left(joueur, 2)
MsgBox monClub
End If
Case 4
monClub = Left(joueur, 2)
MsgBox monClub
End Select
'jusque là tout fonctionne, mais comment récupérer chaque valeur de
monClub?
'J'ai penser à un tableau qui se nourrit de la boucle, mais...???
myArray = Array(monClub)
ReDim Preserve myArray(1 To n)
n = 1 + 1
End If
Next myCtrl
End Sub
Merci de votre réponse
Robert