Développement d'une macro VBA
Résolu
nonossov
Messages postés
638
Statut
Membre
-
nonossov Messages postés 638 Statut Membre -
nonossov Messages postés 638 Statut Membre -
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
et voila le fichier excel pour mieux comprendre merci
https://www.cjoint.com/c/EDenSKNMuVk
merci infiniment
EDIT: Précision du langage dans la coloration syntaxique.
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
et voila le fichier excel pour mieux comprendre merci
https://www.cjoint.com/c/EDenSKNMuVk
merci infiniment
EDIT: Précision du langage dans la coloration syntaxique.
A voir également:
- Développement d'une macro VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Excel récupérer couleur cellule sans macro ✓ - Forum Bureautique
- Arreter une macro vba ✓ - Forum Bureautique
1 réponse
Bonsoir Nonossov/Harbouli, bonsoir le forum,
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
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
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é,