nonossov
Messages postés611Date d'inscriptionlundi 29 décembre 2014StatutMembreDernière intervention17 janvier 2020
-
Modifié par Whismeril le 4/04/2015 à 13:46
nonossov
Messages postés611Date d'inscriptionlundi 29 décembre 2014StatutMembreDernière intervention17 janvier 2020
-
6 avril 2015 à 10:30
Bonjour,
j'ai une macro de recherche conditionnelle et j'ai besoin de votre aide pour la developper le critére multichoix,
dans cette macro, j'ai la possibilité de recherche sur un seul critére par exemple:
-Non aplicable
-fini
-encours
je veux la possibilité de multichoix, que je puisse cocher deux options
voila le code
Private [/contents/446-fichier-sub Sub] UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim TX(3, 1) As String 'déclare le tableau TX (4 lignes [de 0 à 3], deux colonnes [de 0 à 1])
Dim I As Byte 'déclare la variable I (Incrément)
Set O = Sheets("Feuil1") 'définit l'onglet O
TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
TX(0, 0) = "Tous" 'définit la variable (0, 0) du tableau TX
TX(0, 1) = "Tous" 'définit la variable (0, 1) du tableau TX
TX(1, 0) = "" 'définit la variable (1, 0) du tableau TX
TX(1, 1) = "En Cours" 'définit la variable (1, 1) du tableau TX
TX(2, 0) = "X" 'définit la variable (2, 0) du tableau TX
TX(2, 1) = "Dossier Fini" 'définit la variable (2, 1) du tableau TX
TX(3, 0) = "NA" 'définit la variable (3, 0) du tableau TX
TX(3, 1) = "Non Applicable" 'définit la variable (3, 1) du tableau TX
Me.ComboBox1.AddItem "Toutes" 'ajoute le texte à la ComboBox1
For I = 2 To O.Cells(1, Application.Columns.Count).End(xlToLeft).Column
Me.ComboBox1.AddItem O.Cells(1, I)
Next I
With Me.ComboBox2 'prend en compte la ComboBox2
.ColumnCount = 2 'définit le nombre de colonnes [2]
.ColumnWidths = "0 pt;" 'masque la première colonne
For I = 0 To 3 'boucle sur les 4 élément du tableau TX
.AddItem 'ajoute un élément
.Column(0, I) = TX(I, 0) 'ajoute dans la colonne 0 de la ComboBox2 (masquée) la variable (0,I) du tableau TX
.Column(1, I) = TX(I, 1) 'ajoute dans la colonne 1 de la ComboBox2 la variable (1,I) du tableau TX
Next I 'prochain élément de la boucle
End With 'fin de la prise en compte de la ComboBox2
Me.ComboBox2.ListIndex = 0 'affiche le premier élément de la ComboBox2
Me.ComboBox1.ListIndex = 0 'affiche le premier élément de la ComboBox1
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim I As Integer 'déclare la variable I (Incrément de ligne)
Dim J As Integer 'déclare la variable J (incrément de colonne)
Dim K As Integer 'déclare la variable K (incrément de colonne)
'si la valeur affichée dans la ComboBox1 n'est pas une des valeur qu'elle contient, sort de la procédure
If Me.ComboBox1.ListIndex < 0 Then Exit Sub
' condition 1 : si la ComboBox1 affiche "Toutes"
If Me.ComboBox1.Value = "Toutes" Then
Me.ListBox1.Clear 'vide la Listbox1
Me.ListBox1.ColumnCount = UBound(TC, 2) 'définit le nombre de colonnes de la ListBox1 (autant que le tableau TC)
'agit en fonction de la valeur de la ComboBox2
Select Case Me.ComboBox2.Value
Case "Tous" 'cas ou la ComboBox2 affiche "Tous"
Me.ListBox1.List = TC 'alimente la ListBox1 avec l'intégralité du tableau TC
Case Else 'tous les autres cas
Me.ListBox1.Clear 'vide la ListBox1
'première ligne de titres de la ListBox1
With Me.ListBox1 'prend en compte la Listbox1
.AddItem 'ajoute un élément
.Column(0, .ListCount - 1) = "Sociétés" 'ajoute le texte à la colonne 0 de la ListBox1
.Column(1, .ListCount - 1) = "TVA" 'ajoute le texte à la colonne 1 de la ListBox1
.Column(2, .ListCount - 1) = "Taxe Pro" 'ajoute le texte à la colonne 2 de la ListBox1
.Column(3, .ListCount - 1) = "Paie" 'ajoute le texte à la colonne 3 de la ListBox1
.Column(4, .ListCount - 1) = "Is" 'ajoute le texte à la colonne 4 de la ListBox1
End With 'fin de la prise en compte de la Listbox1
'fitrage des données en fonction de la valeur de la ComboBox2 (stockée dans la colonne masquée = 0)
For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
For J = 1 To UBound(TC, 2) 'boucle 2 : sur toutes les colonnes J du tableau de cellule TC
'condition : si la valeur ligne I colonne J de TC est égale a la maleur masquée de la ComboBox2
If UCase(TC(I, J)) = UCase(Me.ComboBox2.Column(0, Me.ComboBox2.ListIndex)) Then
With Me.ListBox1 'prend en compte la Listbox1
.AddItem 'ajoute un élément
For K = 1 To Me.ListBox1.ColumnCount - 1 'boucle 3 : sur toutes les colonnes K de la ListBox1
'ajoute à la colonne K - 1 de la ListBox1 la valeur ligne I colonne K de TC
.Column(K - 1, .ListCount - 1) = TC(I, K)
Next K 'prochaine colonne de la boucle 3
End With 'fin de la prise en compte de la ListBox1
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Select 'fin de l'action en fonction de la valeur de la ComboBox2
Else 'sinon (condition 1 : si la ComboBox1 affiche autre chose que "Toutes")
'agit en fonction de la valeur de la ComboBox2
Select Case Me.ComboBox2.Value
Case "Tous" 'cas ou la ComboBox2 affiche "Tous"
Me.ListBox1.Clear 'vide la ListBox1
Me.ListBox1.ColumnCount = 2 'définit le nombre de colonne de la ListBox1
'première ligne de titres de la ListBox1
With Me.ListBox1 'prend en compte la Listbox1
.AddItem 'prend en compte la Listbox1
.Column(0, .ListCount - 1) = "Sociétés" 'ajoute le texte à la colonne 0 de la ListBox1
.Column(1, .ListCount - 1) = Me.ComboBox1.Value 'ajoute à la colonne 1 de la ListBox1 la valeur de la ComboBox1
End With 'fin de la prise en compte de la Listbox1
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC
With Me.ListBox1 'prend en compte la ListBox1
.AddItem 'ajoute un élément
'ajoute à la colonne 0 de la Listbox1 la valeur ligne I colonne 1 de TC
.Column(0, .ListCount - 1) = TC(I, 1)
'ajoute à la colonne 1 de la Listbox1 la valeur de TC en ligne I colonne égale à la colonne correspondant
'à la propriété [ListIndex] + 1 de la ComboBox1
.Column(1, .ListCount - 1) = TC(I, Me.ComboBox1.ListIndex + 1)
End With 'fin de la prise en compte de la ListBox1
Next I 'prochaine ligne de la boucle
Case Else 'tous les autres cas de la ComboBox2
Me.ListBox1.Clear 'vide la ListBox1
'première ligne de titres de la ListBox1
With Me.ListBox1 'prend en compte la Listbox1
.AddItem 'prend en compte la Listbox1
.Column(0, .ListCount - 1) = "Sociétés" 'ajoute le texte à la colonne 0 de la ListBox1
.Column(1, .ListCount - 1) = Me.ComboBox1.Value 'ajoute à la colonne 1 de la ListBox1 la valeur de la ComboBox1
End With 'fin de la prise en compte de la Listbox1
For I = 2 To UBound(TC, 1) 'boucle sur toutes les ligne du tableau TC (en partant de la seconde)
'condition : si la valeur de TC en ligne 1 , colonne correspondante à à la propriété [ListIndex] + 1
'de la ComboBox1 est égale à la valeur de la Combobox1 et
'si la valeur de TC ligne I colonne correspondante à à la propriété [ListIndex] + 1 de la ComboBox1
'est égale la valeur masquée (en colonne 0) de la ComboBox2
If TC(1, Me.ComboBox1.ListIndex + 1) = Me.ComboBox1.Value And _
UCase(TC(I, Me.ComboBox1.ListIndex + 1)) = UCase(Me.ComboBox2.Column(0, Me.ComboBox2.ListIndex)) Then
With Me.ListBox1 'prend en compte la ListBox1
.AddItem 'ajoute un élément
'ajoute à la colonne 0 de la Listbox1 la valeur ligne I colonne 1 de TC
.Column(0, .ListCount - 1) = TC(I, 1)
'ajoute à la colonne 1 de la Listbox1 la valeur de TC en ligne I colonne égale à la colonne correspondant
'à la propriété [ListIndex] + 1 de la ComboBox1
.Column(1, .ListCount - 1) = TC(I, Me.ComboBox1.ListIndex + 1)
End With 'fin de la prise en compte de la ListBox1
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Select 'fin de l'action en fonction de la valeur de la ComboBox2
End If 'fin de la condition 1
End Sub
J'ai répondu à ton problème dans un autre forum et je le regrette car je ne trouve pas trop élégant que tu utilises un code qui ne t'appartient pas dans un autre forum que celui où il t'a été proposé...
Finalement Marc avait raison. Tu n'as aucune éthique. Seul le résultat compte pour toi... Tu utilises tous les forums et fait travailler tous les bénévoles sans te soucier de l'effort qu'ils font pour toi.
Encore une fois, je regrette amèrement de m'être proposé pour t'aider sur ton problème... Je pourrais supprimer ma dernière proposition mais comme j'ai plus d'éthique que toi je t'en fais cadeau...
Bon vent messieurs Nonossov / Harbouli ! Au plaisir de ne plus jamais vous croiser...
À plus,
ThauTheme
nonossov
Messages postés611Date d'inscriptionlundi 29 décembre 2014StatutMembreDernière intervention17 janvier 2020 6 avril 2015 à 10:28
Mr,ThauTheme c'est vous qu'a répondu a mon problème!
je veux remercie tout d'abord a votre effort, et je veux dire que j'ai été très besoin de cette macro ce matin pour répondre aux mes exigences professionnelles,
je suis trés désolé pour ce que je faisais, je n'ai aucune interet de faire travail tous les bénévoles, j'avais une idée de trouve une solution, et j'ai pas cru que je vais faire tous ces probléme je m'excuse pour tous ce que j'ai fait, je respectent tous les forums et le travail de ses membres, je suis trés dosélé pour ce j'ai construit avec une bonne fois, heuresment j'ai trouve une personne noble ThauTheme, malgré les les fautes que j'ai faites, il m'a aidé,
nonossov
Messages postés611Date d'inscriptionlundi 29 décembre 2014StatutMembreDernière intervention17 janvier 2020 6 avril 2015 à 10:30
Pour l'info, j'ai pas mentionné que ce code m'appartient dans les forums que j'ai le publié,
6 avril 2015 à 10:28
je veux remercie tout d'abord a votre effort, et je veux dire que j'ai été très besoin de cette macro ce matin pour répondre aux mes exigences professionnelles,
je suis trés désolé pour ce que je faisais, je n'ai aucune interet de faire travail tous les bénévoles, j'avais une idée de trouve une solution, et j'ai pas cru que je vais faire tous ces probléme je m'excuse pour tous ce que j'ai fait, je respectent tous les forums et le travail de ses membres, je suis trés dosélé pour ce j'ai construit avec une bonne fois, heuresment j'ai trouve une personne noble ThauTheme, malgré les les fautes que j'ai faites, il m'a aidé,
6 avril 2015 à 10:30