Afficher les valeur d'une collection par msgbox VBA [Résolu/Fermé]

Signaler
Messages postés
26
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
24 décembre 2013
-
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
-
Bonjour,

Voila, j'ai un problème concernant l'utilisation des collection sur vba.
J'ai déclarer une nouvelle collection qui récupère des valeurs sous certaine conditions.
Je voudrais que les valeurs récuperées soit afficher par msgbox.
Je sais que ma macro repere les cellule à récuperer. Le problème est que mon msgbox est vide.

Voici mon code:
Private Sub CommandButtonPtQte_Click() 
Dim QteCom, qte, TaillePak, Reste As Long 
Dim RefOF, Couleur As String 
Dim a, cel As Range 
Dim TabTaille, TabQte As New Collection 'déclare les tableau 
'TabTaille.clear 
'TabQte.clear 


RefOF = UserFormRapportCoupe.ComboBoxRefOF.Value 
Couleur = UserFormRapportCoupe.ComboboxCouleur.Value 

If MsgBox("Les OF seront regroupés par taille pour la couleur " & Couleur, vbInformation + vbYesNo) = vbNo Then Exit Sub 

With ActiveSheet   'defini la variable p comme colone de ref OF 
    Set a = .Range("B8:B" & .Range("B1000").End(xlUp).Row) 
End With 

'remplir les collection de taille et qté 
On Error Resume Next 
    For Each cel In a 
        If cel.Value = RefOF Then 
            If cel.Offset(0, 1).Value = Couleur Then   
               TabTaille.Add cel.Offset(0, 1).Value 'Je pense que l'erreur se trouve à ce niveau 
            End If 
        End If 
    Next cel 

ligne = "" 
For i = 1 To TabTaille.count 
ligne = ligne & TabTaille(i) & Chr(13) 
Next i 
MsgBox ligne 

End Sub


Merci d'avance

2 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 607
Bonjour,

Je ne vois pas du tout, avec ce code, ou vous voulez en venir...
En début de code :
Couleur = UserFormRapportCoupe.ComboboxCouleur.Value

Donc votre variable Couleur a une valeur fixe et déterminée par le choix dans la Combobox. OK.
Et plus loin :
If cel.Offset(0, 1).Value = Couleur Then   
    TabTaille.Add cel.Offset(0, 1).Value

Donc, en gros, si le contenu de cel.Offset(0, 1) est égal à couleur alors on enregistre cette valeur dans notre collection. Donc on veut enregistrer dans notre collection x fois Couleur... Quel intérêt???

De plus, le reste du code malgré quelques erreurs est correct. Donc si MsgBox vide c'est que VBA n'a pas rouvé de valeur correspondante. Ou alors, la présence de On Error Resume Next masque une erreur...
Pour vérifier cela effectuez votre macro en mode pas à pas en enlevant le traitement d'erreur.

petites erreurs :
1- Déclaration des variables :
Toujours renseigner le type :
Dim QteCom, qte, TaillePak, Reste As Long
veut dire : QteCom = Variant, qte = Variant, TaillePak = Variant et Reste = Long
à remplacer donc par :
Dim QteCom As Long, qte As Long, TaillePak As Long, Reste As Long 
Dim RefOF As String, Couleur As String 
Dim a As Range, cel As Range 
Dim TabTaille As New Collection, TabQte As New Collection


2- dernière ligne :
.Range("B1000").End(xlUp).Row
Si jamais le tableau évolue...
A remplacer donc par (par exemple) :
.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
Messages postés
26
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
24 décembre 2013

Merci Franck pour votre réponse rapides.

Vous avez raison c'est :
If cel.Offset(0, 1).Value = Couleur Then    
    TabTaille.Add cel.Offset(0, 2).Value

que je recherchais, c'etait une étourderie.

Mais dans tous les cas ça aurais dut m'afficher les X fois couleur dans mon message box. C'est ce qui arrive maintenant.

Changer la déclaration des variables comme vous me l'avez proposé à régler mon problème. C'est la que devait se trouver l'erreur.
Je pense que TailleTab etait considérée comme Variant, si j'ai bien suivi votre raisonnement.

Merci pour la correction et les tuyaux.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 607
C'est tout à fait cela.
De rien.
A+