Gérer une collection sous VBA Excel

Résolu/Fermé
mrsmith1 - Modifié par mrsmith1 le 11/01/2012 à 11:07
 mrsmith1 - 11 janv. 2012 à 11:30
Bonjour,

Je cherche a créer une collection pour ajouter des elements dans cette collection si une ligne vérifie une certaine condition, plus precisement mon code est :

Dim tableau_B As New Collection
Set tableau_B = New Collection
For i = 1 To 20
If UCase(Left(Worksheets("current month").Cells(i, colonne1), 1)) = "B" Then
tableau_B.Add (Worksheets("current month").Cells(i, colonne2).Value)
'End If
'Next i

Mais voila que cela ne marche pas, je ne sais pas s'il manque une ligne pour declarer que j'utilise une collection.

Au début, je voulais utiliser des tableaux mais le problème est que les collections permettent facilement des supprimer des items.

Merci beaucoup pour votre aide


A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 janv. 2012 à 11:09
Bonjour,
Tout simplement comme ceci :
Dim tableau_B As New Collection 
  Dim i As Integer, colonne1 As Integer, colonne2 As Integer

colonne1 = 1
colonne2 = 3  
'remplissage de la collection
  For i = 1 To 20
    If UCase(Left(Worksheets("current month").Cells(i, colonne1), 1)) = "B" Then 
        tableau_B.Add (Worksheets("current month").Cells(i, colonne2).Value)
    End If
  Next i
1
merci, j'avais oublié de préciser que des valeurs étaient déja attribué pour colonne1 et colonne2 (mais pour i, vu que c'est dans une boucle, dois-je obligatoirement le declarer en Integer ?)

Ceci dit, j'ai bien supprimé la ligne Set tableau_B = New Collection mais j'ai toujours une erreur "Susbcript out of range"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 janv. 2012 à 11:17
mais pour i, vu que c'est dans une boucle, dois-je obligatoirement le declarer en Integer ?) Non. Tu peux le déclarer autrement si tu veux (Byte, Integer ou Long sembleraient convenir.) Mais tu DOIS déclarer TOUTES tes variables.

j'ai toujours une erreur "Susbcript out of range" Lorsque tu as cette erreur et que tu cliques sur Débogage, qu'elle ligne apparait surlignée de jaune?
0
Merci pour l'info.

Je n'ai pas la possibilité de cliquer sur debugger (j'ai excel 2003).
Cependant, j'ai écrit Dim tableau_B As New Collection
dim i as integer
For i = 1 To 20
If UCase(Left(Worksheets("current month").Cells(i, colonne1), 1)) = "B" Then
tableau_B.Add (Worksheets("current month").Cells(i, colonne2).Value)

End If
Next i
MsgBox (tableau_B(0))

Et a priori c'est MsgBox (tableau_B(0)) qu'il n'apprécie pas (cette ligne est juste pour vérifier que la collection s'est bien remplie).
0
Au fait, je viens de voir que si je mettais MsgBox (tableau_B(1)) ca marchait, pourtant j'ai vu sur un cours de VBA que les indices commencent à 0, est-ce correcte ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
11 janv. 2012 à 11:29
Hum hum!!! Il s'agit d'une Collection, pas d'une variable tableau.... Donc 1er élément = 1 pas 0...
Essaye ceci :
Dim tableau_B As New Collection 
Dim i as integer 
Dim message As String

For i = 1 To 20 
If UCase(Left(Worksheets("current month").Cells(i, colonne1), 1)) = "B" Then 
tableau_B.Add (Worksheets("current month").Cells(i, colonne2).Value) 
End If 
Next i 
For i = 1 To tableau_B.Count
    message = message & Chr(10) & tableau_B(i)
Next
MsgBox message
0
Merci beaucoup, mon problème est résolu !
0