Afficher les valeur d'une collection par msgbox VBA
Résolu
tictac847
Messages postés
26
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
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:
Merci d'avance
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
A voir également:
- Afficher les valeur d'une collection par msgbox VBA
- Afficher appdata - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
- Dans le diaporama à télécharger, les diapositives s’enchaînent automatiquement. combien de temps la diapositive crayon met-elle à s’afficher ? combien de temps reste-t-elle affichée à l’écran ? ✓ - Forum Powerpoint
- Remettre toutes les colonnes et les lignes masquées ✓ - Forum Excel
- Afficher taille dossier windows - Guide
2 réponses
Bonjour,
Je ne vois pas du tout, avec ce code, ou vous voulez en venir...
En début de code :
Donc votre variable Couleur a une valeur fixe et déterminée par le choix dans la Combobox. OK.
Et plus loin :
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 :
2- dernière ligne :
A remplacer donc par (par exemple) :
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).RowSi jamais le tableau évolue...
A remplacer donc par (par exemple) :
.Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
Merci Franck pour votre réponse rapides.
Vous avez raison c'est :
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.
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.