Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
Vu le peu d'avancement entre mon fichier et le tien, je pense que je vais attendre que tu ai fait de réels progrès avant d'aller plus loin 😡...aprés avoir travaillé avec votre aide
Oublie le RowSource, c'est pratique pour des petites applications, mais ta liste étant variable, il vaut mieux l'alimenter différement, je te laisse décortiquer mon code... Je te le commenterai plus tard.ensuite, quand je mets le rowsource (dans le nouveau usf) dans combobox3 et 4, je n'ai rien qui s'affiche dans la listbox1, est-ce normal ?
Private Sub UserForm_Initialize()
Dim Temporaire2() [COLOR=seagreen]' Déclaration d'un tableau[/COLOR]
[COLOR=seagreen]' Classement ComboBox d'après JB : boisgontierjacques.free.fr[/COLOR]
Set MonDico = CreateObject("Scripting.Dictionary") [COLOR=seagreen]' Chargement d'un dictionaire[/COLOR]
For Each Cellule In Sheets("saisieachats").Range("C2:C" & Sheets("saisieachats").Range("C65000").End(xlUp).Row)
[COLOR=seagreen]' Pour chaque variable nommée Cellule balayant de C2 à la dernière ligne utilisée de C[/COLOR]
MonDico.Item(Cellule.Value) = Cellule.Value
[COLOR=seagreen]' Rajoute la valeur de Cellule dans le dico[/COLOR]
Next Cellule
[COLOR=seagreen]' Cellule suivante[/COLOR]
Temporaire = MonDico.items
[COLOR=seagreen]' Envoi des valeurs du dico dans un tableau[/COLOR]
Call Tri(Temporaire, LBound(Temporaire), UBound(Temporaire))
[COLOR=seagreen]' Appel de la macro de tri et élimination de doublons du tableau[/COLOR]
Me.ComboBox3.List = Temporaire
[COLOR=seagreen] ' Envoi du tableau trié dans le combobox Code fournisseur[/COLOR]
ReDim Temporaire2(UBound(Temporaire))
[COLOR=seagreen]' Redimensionnement de la taille du tableau pour les fournisseurs[/COLOR]
For I = LBound(Temporaire) To UBound(Temporaire)
[COLOR=seagreen]' Pour toutes les ligne du tableau code fournisseur[/COLOR]
Set résultat = Sheets("saisieachats").Range("C2:C" & Sheets("saisieachats").Range("C65000").End(xlUp).Row).Find(Temporaire(I))
[COLOR=seagreen]' Recherche du code fournisseur dans la colonne C[/COLOR]
Temporaire2(I) = Sheets("saisieachats").Cells(résultat.Row, 4)
[COLOR=seagreen] ' Chargement du nom du fournisseur dans le même ordre que les codes fournisseurs[/COLOR]
Me.ComboBox4.AddItem CStr(Temporaire2(I)) [COLOR=seagreen]' Ajout de la valeur dans le combobox fournisseur[/COLOR]
Next I
[COLOR=seagreen]' I suivant[/COLOR]
End Sub
Private Sub ComboBox3_Change()
ComboBox4.ListIndex = ComboBox3.ListIndex
[COLOR=seagreen]' Vu que les combobox sont dans le même ordre, si le 3 change, je mets le 4 sur la même ligne[/COLOR]
Dim I As Integer
If TextBox1 = "" Or TextBox2 = "" Then Exit Sub
ListBox1.Clear
I = 2
With Sheets("saisieachats")
While .Cells(I, 1) <> ""
If CDate(TextBox1) <= .Cells(I, 2) And CDate(TextBox2) >= .Cells(I, 2) And CInt(ComboBox3) = .Cells(I, 3) Then
ListBox1.AddItem Format(.Range("B" & I), "dd/mm/yy") & " " & Format(.Range("L" & I), "# ##0.00 €")
End If
I = I + 1
Wend
End With
End Sub
Private Sub ComboBox4_Change()
ComboBox3.ListIndex = ComboBox4.ListIndex
[COLOR=seagreen]' Vu que les combobox sont dans le même ordre, si le 4 change, je mets le 3 sur la même ligne[/COLOR]
End Sub
Bon courage 😎pour le tableau, peux-tu decoder comme tu sais si bien le faire
Euh, j'avais noté : « Par contre, pour la macro Tri tirée aussi de JB, vu que c'est une fonction récursive, je ne rentrerai pas dans les détails, je la comprends tout juste, donc j'aurai du mal à expliquer 😱... Mais on va dire que l'important, c'est que ça marche 🙄... » 😛... Je peux essayer d'éclaircir, mais, ce sera pas forcément limpide, ni complètement juste 😱!
"Sub Tri(Tableau, Gauche, Droite) ' Quick sort d'après JB : boisgontierjacques.free.fr
Référence = Tableau((Gauche + Droite) \ 2)
Gauche est la première entrée du tableau, Droite la dernière (bornes). On se base donc sur la valeur rentrée au milieu du tableau.
NewGauche = Gauche: NewDroite = Droite
On fixe les bornes qui vont évoluer pendant la sub
Do
Boucle faisant référence à la ligne rouge en dessous. L'inversion des bornes traduira que le tableau est trié
Do While Tableau(NewGauche) < Référence: NewGauche = NewGauche + 1: Loop
On boucle tant que la partie basse du tableau est bien triée
Do While Référence < Tableau(NewDroite): NewDroite = NewDroite - 1: Loop
De même pour la partie haute
If NewGauche <= NewDroite Then
Si la partie basse n'est pas encore passée au dessus de la partie haute
Temporaire = Tableau(NewGauche): Tableau(NewGauche) = Tableau(NewDroite): Tableau(NewDroite) = Temporaire
On interverti les 2 valeurs du tableau qui sont à l'envers en passant par une variable temporaire
NewGauche = NewGauche + 1: NewDroite = NewDroite - 1
On rétrécit les bornes
End If
Fin du test
Loop While NewGauche <= NewDroite
On boucle temps que les bornes ne sont pas rejointes
If NewGauche < Droite Then Call Tri(Tableau, NewGauche, Droite)
Si la nouvelle borne basse n'a pas rejoint la borne haute de départ, on rappelle la même fonction (d'où le titre de fonction récursive) pour trier la partie haute qui n'est pas encore triée
If Gauche < NewDroite Then Call Tri(Tableau, Gauche, NewDroite)
De même si la nouvelle borne haute n'a pas rejoint la borne basse de départ.
End Sub"
Comme depuis le début, tu échange les valeurs dans ton tableau, le tableau est trié à l'arrivée...
Je sais pas si c'est très clair (vu que ce l'est pas entièrement pour moi 🙁...).
n.b: est-ce que tu donnerais des cours dans l'Ouest,
Si tu jette un oeil à mon profil (il y a des problèmes d'affichage actuellement sous l'avatar), tu verras que je suis plutôt très à l'est, désolé...
car tes explications sont toujours incroyablement claires pour une novice comme moi,
je sais qu'il me faudra des années avant d'atteindre ton niveau et d'avoir ta réactivité, ou alors écris un livre avec tes modèles et explications, je serai ta premiere cliente (et je ne rigole pas !)
C'est gentil, mais excuses-moi si moi, ça me fait rigoler 😛. Il y a des tas de gens sur ce forum qui dépassent largement ma connaissance d'Excel 🙄... Mes explications sont peut-être assez claires, mais il me semble que j'ai enseigné un peu il y a quelques années, et mon père était directeur d'école, j'ai peut-être hérité d'un peu de sa pédagogie 😉. De là à écrire un bouquin, il y en a déjà bien assez sur Excel, dont certains sont très clairs. Sans compter que je n'ai pas vraiment le temps 😛...
Private Sub ComboBox3_Change()
ComboBox4.ListIndex = ComboBox3.ListIndex
' Vu que les combobox sont dans le même ordre, si le 3 change, je mets le 4 sur la même ligne
Dim I As Integer[COLOR=red], J As Integer, Total As Double[/COLOR]
[COLOR=red]Total = 0[/COLOR]
If TextBox1 = "" Or TextBox2 = "" Then Exit Sub
ListBox1.Clear
[COLOR=red]ListBox1.ColumnCount = 2[/COLOR]
[COLOR=red]ListBox1.ColumnWidths = "120;120"[/COLOR]
[COLOR=red]J = 0[/COLOR]
I = 2
With Sheets("saisieachats")
While .Cells(I, 1) <> ""
If CDate(TextBox1) <= .Cells(I, 2) And CDate(TextBox2) >= .Cells(I, 2) And CInt(ComboBox3) = .Cells(I, 3) Then
[COLOR=red]ListBox1.AddItem Format(.Range("B" & I), "dd/mm/yy")[/COLOR]
[COLOR=red]ListBox1.Column(1, J) = Format(.Range("L" & I), "# ##0.00 €")[/COLOR]
[COLOR=red]Total = Total + .Range("L" & I)[/COLOR]
[COLOR=red]J = J + 1[/COLOR]
End If
I = I + 1
Wend
[COLOR=red]ListBox1.AddItem "Total"[/COLOR]
[COLOR=red]ListBox1.Column(1, J) = Format(Total, "# ##0.00 €")[/COLOR]
End With
End Sub
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?