Listbox remplis sous condition de ligne de couleur

abtony

XLDnaute Impliqué
Bonjour a tous, Bonjour le forum,

J'ai un userform a trois listbox, sur la première listbox, je souhaiterais voir uniquement les lignes de couleur jaune.

Suivant la sélection sur la listbox1 (exemple GROS_OEUVRE_MACONNERIE ), sur la listbox2 s'affiche les lignes de couleur verte comprises entre 78 et 224, cette plage étant variable suivant le nombres de lignes sous la ligne jaune du titre.

Quand sélection sur la listbox2, la listbox3 doit afficher le contenu compris en dessous de la sélection de la ligne de couleur verte (exemple INSTALLATION DE CHANTIER plage de sélection comprise entre 79 et 88) également variable.

j'espère avoir été le plus clair possible dans mon explication.

Merci d'avance pour votre aide

Cordialement

Abtony
 

Pièces jointes

  • test.xls.zip
    55 KB · Affichages: 85
  • test.xls.zip
    55 KB · Affichages: 83
  • test.xls.zip
    55 KB · Affichages: 95
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Listbox remplis sous condition de ligne de couleur

Bonjour abtony,

Voici une proposition de macros événementielles pour ton UserForm et tes ListBox

Code:
Private Sub ListBox1_Change()
Dim Lg As Long

With Sheets("TRAVAUX")
  Lg = .Range("B:B").Find(ListBox1.Value, LookIn:=xlValues).Row + 1
  While Not .Cells(Lg, 2).Interior.Color = vbYellow
    If .Cells(Lg, 2).Interior.Color = vbGreen Then
      ListBox2.AddItem (.Cells(Lg, 2).Value)
    End If
    Lg = Lg + 1
  Wend
End With
End Sub

Private Sub ListBox2_Change()
Dim Lg As Long

With Sheets("TRAVAUX")
  Lg = .Range("B:B").Find(ListBox2.Value, LookIn:=xlValues).Row + 1
  While Not .Cells(Lg, 2).Interior.Color = vbGreen
    ListBox3.AddItem (.Cells(Lg, 2).Value)
    Lg = Lg + 1
  Wend
End With
End Sub

Private Sub UserForm_Activate()
ListBox1.Clear
ListBox2.Clear
ListBox3.Clear
For Each cel In Sheets("TRAVAUX").Range("B:B").SpecialCells(xlCellTypeConstants)
  If Range(cel.Address).Interior.Color = vbYellow Then
    ListBox1.AddItem (cel.Value)
  End If
Next
End Sub

espérant avoir répondu.

Cordialement.
 

abtony

XLDnaute Impliqué
Re : Listbox remplis sous condition de ligne de couleur

Re Papou-net,

après modification de color index, tout est rentré dans l'ordre et ça fonctionne parfaitement. (If Range(cel.Address).Interior.ColorIndex = 6 Then)

Un grand merci pour ton aide.

Cordialement

Abtony
 

Papou-net

XLDnaute Barbatruc
Re : Listbox remplis sous condition de ligne de couleur

Re abtony,

Suite à ton dernier message,

J'ai fait quelques essais et j'ai constaté des plantages : j'ai donc légèrement modifié le code, sans soucis d'optimisation mais les erreurs sont réparées.

Code:
Private Sub ListBox1_Change()
Dim Lg As Long

ListBox2.Clear
ListBox3.Clear
With Sheets("TRAVAUX")
  Lg = .Range("B:B").Find(ListBox1.Value, LookIn:=xlValues).Row + 1
  While Not .Cells(Lg, 2).Interior.ColorIndex = 6
    If .Cells(Lg, 2).Interior.ColorIndex = 4 Then
      ListBox2.AddItem (.Cells(Lg, 2).Value)
    End If
    Lg = Lg + 1
    If Lg > .Range("B65536").End(xlUp).Row Then Exit Sub
  Wend
End With
End Sub

Private Sub ListBox2_Change()
Dim Lg As Long

ListBox3.Clear
With Sheets("TRAVAUX")
  Lg = .Range("B:B").Find(ListBox2.Value, LookIn:=xlValues).Row + 1
  While Not .Cells(Lg, 2).Interior.ColorIndex = 4
    ListBox3.AddItem (.Cells(Lg, 2).Value)
    Lg = Lg + 1
    If Lg > .Range("B65536").End(xlUp).Row Then Exit Sub
  Wend
End With
End Sub

Private Sub UserForm_Activate()
ListBox1.Clear
ListBox2.Clear
ListBox3.Clear
For Each cel In Sheets("TRAVAUX").Range("B:B").SpecialCells(xlCellTypeConstants)
  If Range(cel.Address).Interior.ColorIndex = 6 Then
    ListBox1.AddItem (cel.Value)
  End If
Next
End Sub

Cordialement.
 

abtony

XLDnaute Impliqué
Re : Listbox remplis sous condition de ligne de couleur

Re bonjour Papou-net,

Merci beaucoup ça va impeccable.

Pour compliqué la chose, j'ai ajouté une quatrième listbox qui doit cette fois afficher le résultat de la valeur de la listbox4, mais les données sont sur une autre feuille du classeur sous le nom (GROS_OEUVRE_MACONNERIE).

Pour exemple (IMPLANTATION, comprend trois lignes en dessous de données qui doivent s'afficher en listbox4.

Sous chaque titre de la listbox3 en feuille gros oeuvre on a une ligne vide pour séparer chaque rubrique.

Je n'arrive pas a adapté pour ça que je sollicite de nouveau ton aide.

Cordialement

Fichier joint
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Listbox remplis sous condition de ligne de couleur

Re bonjour Papou-net,

Merci beaucoup ça va impeccable.

Pour compliqué la chose, j'ai ajouté une quatrième listbox qui doit cette fois afficher le résultat de la valeur de la listbox4, mais les données sont sur une autre feuille du classeur sous le nom (GROS_OEUVRE_MACONNERIE).

Pour exemple (IMPLANTATION, comprend trois lignes en dessous de données qui doivent s'afficher en listbox4.

Sous chaque titre de la listbox3 en feuille gros oeuvre on a une ligne vide pour séparer chaque rubrique.

Je n'arrive pas a adapté pour ça que je sollicite de nouveau ton aide.

Cordialement

Fichier joint

re abtony,

Voici donc le code modifié pour la ListBox3 :

Code:
Private Sub ListBox3_Change()
Dim Lg As Long
ListBox4.Clear
With Sheets("GROS_OEUVRE_MACONNERIE")
  Set Lib = .Range("B:B").Find(Trim(ListBox3.Value), LookIn:=xlValues)
  If Lib Is Nothing Then Exit Sub Else Lg = Lib.Row + 1
  While Not .Cells(Lg, 2).Value = ""
    ListBox4.AddItem (.Cells(Lg, 2).Value)
    Lg = Lg + 1
  Wend
End With
End Sub

Penses à modifier la propriété "ColumnWidths" de cette ListBox3 afin de ne pas tronquer l'affichage.

Cordialement.

PS : modifies également la procédure ListBox2_Change comme suit :

Code:
Private Sub ListBox2_Change()
Dim Lg As Long
ListBox3.Clear
ListBox4.Clear
With Sheets("TRAVAUX")
  Lg = .Range("B:B").Find(ListBox2.Value, LookIn:=xlValues).Row + 1
  While Not .Cells(Lg, 2).Interior.ColorIndex = 4
    ListBox3.AddItem (.Cells(Lg, 2).Value)
    Lg = Lg + 1
  Wend
End With
End Sub
 

abtony

XLDnaute Impliqué
Re : Listbox remplis sous condition de ligne de couleur

Re,

Perfect. ça fonctionne très bien et procédure rapide.

sans vouloir abuser, sur la listox4 je souhaite voir le contenu complet de ou des lignes de chaque rubrique de la colonne B a H de la feuille GROS OEUVRE MACONNERIE

Merci encore Papou-net

Cordialement
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Listbox remplis sous condition de ligne de couleur

Bonjour AbTony, Papou-Net, le Forum

Je regardais l’évolution de ce fil et Papou-Net à des ressources pour répondre à ta demande, tu as de quoi travailler.

Mon intervention vient du fait que j'ai un sérieux problème avec le dernier fichier, j'ai tenté de travaillé dessus mais Excel 2007 sous PC (XP) qui plante immanquablement même sans rien faire juste en faisant un « Save As » ça mouline, et finalement Excel ne répond plus si on touche quelque chose… Cela ne le fait pas sur ton premier fichier (quand tu n’avais pas encore la base « Gros Œuvre »). Tu travailles sous Mac Office 2011 pour faire ce fichier ? Quelqu’un rencontre t’il un problème aussi ?

Une autre remarque d’ordre général, tu dois construire une vraie Base de Données pour travailler que ce soit sur UserForm ou le reste (même dans Excel), l’idée des couleurs est sympathique, et Papou-Net redouble d’imagination et de bonne volonté, mais ce n’est pas vraiment un travail « pro » plutôt une sorte de performance, surtout que maintenant on voit apparaître des vraies Codifications en Clef Unique dans ta dernière demande. D’ailleurs j’ai noté à la volée que tu auras des soucis avec « Rive » qui revient plusieurs fois B798 , B807, B837… et probablement d’autres items…

Cordialement
@+Thierry
 

Papou-net

XLDnaute Barbatruc
Re : Listbox remplis sous condition de ligne de couleur

Re :

Il suffit de modifier le code de ListBox3 comme suit :

Code:
Private Sub ListBox3_Change()
Dim Lg As Long, LB4Lg As Integer
ListBox4.Clear
With Sheets("GROS_OEUVRE_MACONNERIE")
  Set Lib = .Range("B:B").Find(Trim(ListBox3.Value), LookIn:=xlValues)
  If Lib Is Nothing Then Exit Sub Else Lg = Lib.Row + 1
  LBxLg = 0
  While Not .Cells(Lg, 2).Value = ""
    ListBox4.AddItem (.Cells(Lg, 2).Value)
    For n = 3 To 8
      ListBox4.List(LB4Lg, n - 2) = (.Cells(Lg, n).Value)
    Next
    Lg = Lg + 1: LB4Lg = LB4Lg + 1
  Wend
End With
End Sub

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Listbox remplis sous condition de ligne de couleur

Bonjour Thierry,

Mon intervention vient du fait que j'ai un sérieux problème avec le dernier fichier, j'ai tenté de travaillé dessus mais Excel 2007 sous PC (XP) qui plante immanquablement même sans rien faire juste en faisant un « Save As » ça mouline, et finalement Excel ne répond plus si on touche quelque chose… Cela ne le fait pas sur ton premier fichier (quand tu n’avais pas encore la base « Gros Œuvre »). Tu travailles sous Mac Office 2011 pour faire ce fichier ? Quelqu’un rencontre t’il un problème aussi ?

Pour ma part, sous excel 2003, je n'ai pas rencontré de problème particulier.

Une autre remarque d’ordre général, tu dois construire une vraie Base de Données pour travailler que ce soit sur UserForm ou le reste (même dans Excel), l’idée des couleurs est sympathique, et Papou-Net redouble d’imagination et de bonne volonté, mais ce n’est pas vraiment un travail « pro » plutôt une sorte de performance, surtout que maintenant on voit apparaître des vraies Codifications en Clef Unique dans ta dernière demande. D’ailleurs j’ai noté à la volée que tu auras des soucis avec « Rive » qui revient plusieurs fois B798 , B807, B837… et probablement d’autres items…

Tu as tout-à-fait raison !
J'ai commencé par répondre aux questions précises de abtony, mais comme je le précisais dans ma réponse de 13h02, je n'ai pas poussé les investigations plus loin :

J'ai fait quelques essais et j'ai constaté des plantages : j'ai donc légèrement modifié le code, sans soucis d'optimisation mais les erreurs sont réparées

Alors je pense qu'il serait intéressant de revoir le problème depuis la base, mais comme souvent sur ce site, on répond à une question de base et les choses s'affinent au fur et à mesure des réponses qui amènent d'autres questions. Reste à savoir si les demandeurs désirent poursuivre plus avant ou si les réponses apportées leur conviennent en l'état.

Cordialement.

PS : je ne pense pas que le problème que tu soulèves à propos des mots qui reviennent dans différentes lignes en soit réellement un, car la boucle de lecture relève les lignes comprises entre les couleurs, donc à priori, aucun risque de doublon.
 
Dernière édition:

abtony

XLDnaute Impliqué
Re : Listbox remplis sous condition de ligne de couleur

Bonjour AbTony, Papou-Net, le Forum

Je regardais l’évolution de ce fil et Papou-Net à des ressources pour répondre à ta demande, tu as de quoi travailler.

@Bonjour Thierry,

En effet il a plein de ressources, et ma rendu la tache plus facile en allégeant mon fichier, en simplifiant le filtrage des différentes rubriques, et en gagnant en rapidité d'exécution.

Ca me satisfait pleinement et je le remercie énormément.

Mon intervention vient du fait que j'ai un sérieux problème avec le dernier fichier, j'ai tenté de travaillé dessus mais Excel 2007 sous PC (XP) qui plante immanquablement même sans rien faire juste en faisant un « Save As » ça mouline, et finalement Excel ne répond plus si on touche quelque chose… Cela ne le fait pas sur ton premier fichier (quand tu n’avais pas encore la base « Gros Œuvre »). Tu travailles sous Mac Office 2011 pour faire ce fichier ? Quelqu’un rencontre t’il un problème aussi ?

@Du fait que tu soit sous 2007, je pense que ce même fichier enregistré en xlsm posera moins de problèmes, des fois ça m'arrive aussi d'ouvrir des fichier fait sur ce forum et ça tourne en boucle avant plantage, pourquoi ? aucune idée une solution sera peut être trouvé par microsoft pour amélioré la compatibilité.

Une autre remarque d’ordre général, tu dois construire une vraie Base de Données pour travailler que ce soit sur UserForm ou le reste (même dans Excel), l’idée des couleurs est sympathique, et Papou-Net redouble d’imagination et de bonne volonté, mais ce n’est pas vraiment un travail « pro » plutôt une sorte de performance, surtout que maintenant on voit apparaître des vraies Codifications en Clef Unique dans ta dernière demande. D’ailleurs j’ai noté à la volée que tu auras des soucis avec « Rive » qui revient plusieurs fois B798 , B807, B837… et probablement d’autres items…

@Papou-net a fait un excellent travail, pour les lignes B798, B807, B837 pas de soucis particulier avec Rives car le filtrage tel que conçu par papou net fait bien son travail.

Cordialement

@Papou-net

une dernière demande sur listbox3

Private Sub ListBox3_Change()
Dim Lg As Long, LB4Lg As Integer
ListBox4.Clear
With Sheets("GROS_OEUVRE_MACONNERIE")


GROS OEUVRE MACONNERIE est le nom de la feuille, mais ça va être variable car j'ai pas loin de 14 feuilles, j'ai essayé de mettre

With Sheets (Label1.caption) mais c'est pas bon, que mettre a la place ?

après cela c'est terminé pour mon fichier (enfin je pense).

Cordialement a vous deux

fichier plus gros en xlsm je vais voir a alléger au maximum
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Listbox remplis sous condition de ligne de couleur

Re Bonjour Papou-Net, Abtony, le Forum

Papou-Net merci pour ta réponse et je suis tout à fait d’accord avec toi et admire le fait que tu t’adaptes aux demandes « ainsi difficiles soient-elles ! » c’est bien comme cela que moi-même j’apprends en me mettant dans des « drôles » de situations parfois.

Pour l’item « Rive » essaie sur ton fichier test de faire une action « Click » sur la ListBox3 si je ne me trompe pas il remontera le premier « Rive » soit le B798 et pas le B837 attendu… (c’est à cause de « Lg = .Range("B:B"). » :


USF_Rive.jpg


J’ai aussi noté un truc au niveau du dernier Item de la ListBox 2 il remonte en ListBox3 des Items indésirables :


USF_VRD.jpg


Merci aussi AbTony pour la compatibilité d'essayer de me faire un XLSM, oui ce serait bien de voir ton fichier avec un XSLM car pour la seconde partie de la demande, je renonce sous 2007, je pense que le mode Conversion XLS en XLSM (2007) sur le fichier créé par un MAC ne passe pas bien… Je peux voir le fichier mais pas le sauver…


Ci-joint mes essais sur le Premier Fichier, c’est juste pour le fun de travailler sur les couleurs et je me suis largement inspiré de ta base de travail Papou-Net qui était très bien faite.

Cordialement,

@+Thierry

EDITION : Pour avoir l'utimate Item "ARMOIRE DOUBLE" il faut modifier la ligne suivante dans
Private Sub ListBox2_Click() :

While Not .Cells(L, 2).Interior.ColorIndex = 6 And Not .Cells(L, 2).Interior.ColorIndex = 4 And Cells(L, 2).Address <> LastCell.Offset(1, 0).Address

Oooops !
 

Pièces jointes

  • USF_ListBox_Cascade_Per_ColorIndex_v01.zip
    101.6 KB · Affichages: 137
Dernière édition:

abtony

XLDnaute Impliqué
Re : Listbox remplis sous condition de ligne de couleur

re tout le monde,

merci pour votre aide

@Thierry

fichier joint en xlsm, je pense que ça devrais aller.

Ma difficulté maintenant est dans listbox3 a with sheets, qui va être variable comme indiqué dans le post précédent.

Merci encore

Cordialement
 

Pièces jointes

  • test2.xlsm.zip
    283.8 KB · Affichages: 104

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Listbox remplis sous condition de ligne de couleur

Re AbTony, Papou-Net, le Forum

Merci mais non hélas idem avec XLSM, j'arrive à ouvrir mais il part en vadrouille quand j'essaie de faire un save as... on dirait que c'est la feuille Gros Oeuvre qui est en cause... J'avais essayé en la déplaçant en copie dans mon classeur et j'avais le même problème.

Dans ton fichier XLSM il n'y a plus les Codifications aussi :D

Enfin ne t'inquiète pas, j'ai "finter" en la récupérant en TEXTE only et ca marche, je suis sur une version maintenant, je reviens...

Cordialement,

@+Thierry
 

Discussions similaires

Réponses
18
Affichages
850
Réponses
2
Affichages
161