XL 2021 Alimenter une ComboBox dans l'ordre décroissant

murainesouspatate

XLDnaute Occasionnel
Bonjour à tous et à toutes,

Je cherche à alimenter un ComboBox dans l'ordre décroissant. J'ai beau regarder sur le forum mais ne comprends pas très bien comment modifier mon code.
J'alimente mon ComboBox4 avec la colonne A de ma feuille " Enregistrement Facture" et cela m'affiche toujours dans l'ordre croissant mes N° de factures.

Auriez-vous l'amabilité de m'indiquer comment modifier le code .

Je place en pièce jointe les images de ma ComboBox4 avec son code , ainsi que celle de ma feuille Enregistrement Facture.

Je vous remercie par avance de votre aide et vous souhaite de bonnes fêtes de fin d'année.

Cordialement.
 

Pièces jointes

  • UserForm4.jpg
    UserForm4.jpg
    141.1 KB · Affichages: 11
  • Feuille enregistrement Facture.jpg
    Feuille enregistrement Facture.jpg
    300.3 KB · Affichages: 11

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @murainesouspatate :),
Une piste :
1735348612028.png
 
Dernière édition:

murainesouspatate

XLDnaute Occasionnel
Bonjour le Fil

une question y'a t'il utilisation de tableau structuré ?
mon approche !
on tri la base de Données ,On récuoére les données dans un tableau on alimente le Combobox des Données des 7 colonnes .
on récupére les données de la Ligne sélectionnée pour alimenter les textBox.
une Vidéo (pas evident sans Fichier)
Bonne Journée
Jean marie
Bonjour, comme je le disais, la solution de mapomme est d'une simplicité et excellente, juste à rajouter une virgule et 0. Ca fonctionne à merveille. Merci de vous être penché sur mon problème. Je vous souhaite de bonne fêtes de fin d'année et un grand bonjour de la Nouvelle Calédonie. Cordialement.
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Question :
VB:
Ligne= Me.Combobox1.ListIndex+2
fonctionne Bien ?
Bonne nuit !
Jean marie
Ps :
Le Code que j'ai employé
Code:
Private Sub ComboBox1_Click()
With Me.ComboBox1
  Me.TextBox1.Text = .List(.ListIndex, 1)
  Me.TextBox2.Text = .List(.ListIndex, 2)
  Me.TextBox3.Text = .List(.ListIndex, 3)
  Me.TextBox4.Text = .List(.ListIndex, 4)
  Me.TextBox5.Text = .List(.ListIndex, 5)
  Me.TextBox6.Text = .List(.ListIndex, 6)
End With
End Sub

Private Sub Userform_Initialize()
Dim DerLgn As Long, DerCol As Byte, Ligne As Long
Dim Tableau
With Worksheets("EnregistrementFacture")
   DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
    DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
         With .Range(.Cells(1, 1), .Cells(DerLgn, DerCol))
                .Sort key1:=.Cells(2, 1), Order1:=xlDescending, Header:=xlYes
Tableau = .Value
         End With
End With
With Me.ComboBox1
         .ColumnCount = 7
         .ColumnWidths = "1;0;0;0;0;0;0"
For Ligne = 2 To UBound(Tableau, 1)
     .AddItem Tableau(Ligne, 1)
     .List(.ListCount - 1, 1) = Tableau(Ligne, 4) '4
      .List(.ListCount - 1, 2) = Tableau(Ligne, 11) '11
       .List(.ListCount - 1, 3) = Tableau(Ligne, 12) '12
        .List(.ListCount - 1, 4) = Tableau(Ligne, 13) '13
         .List(.ListCount - 1, 5) = Tableau(Ligne, 14) '14
          .List(.ListCount - 1, 6) = Tableau(Ligne, 15) '15
Next Ligne
End With
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Information : La méthode Add de mon objet ComboBoxLiées accepte un 3ème argument optionnel Croissant As Boolean par défaut à True. Le spécifier False permet la constitution d'une liste décroissante pour la ComboBox concernée à prendre en charge, spécifiée en 1er argument.
 

murainesouspatate

XLDnaute Occasionnel
Bonjour mapomme, et bonne année.

La solution que vous m'avez donnée est super, mais il y a un hic. Lorsque je sélectionne le numéro de facture dans le combobox1 dans l'ordre décroissant c'est super sauf pour le reste, mes TextBox affichent uniquement les entêtes de mon tableau. Je n'ai plus les valeurs correspondantes au numéro de facture sélectionné.
Auriez-vous l'amabilité de m'indiquer ce qui ne vas pas.
Je vous joint le facturier simplifié en pièce jointe.
Cordialement.
 

Pièces jointes

  • Facturier V4.xlsm
    974.5 KB · Affichages: 4
  • Vesrsement final.jpg
    Vesrsement final.jpg
    58.3 KB · Affichages: 4

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @murainesouspatate et bonne et heureuse année 2025 🤩,

Voici le retour du fichier avec une astuce assez générale pour repérer le numéro de ligne au sein de la feuille "Enregistrement Facture" d'une facture sélectionnée dans ComBobox1 du Userform4.

Tous les commentaires ont été mis dans le code de Userform4.
 

Pièces jointes

  • murainesouspatate-Facturier V4a.xlsm
    985.3 KB · Affichages: 4

murainesouspatate

XLDnaute Occasionnel
Bonsoir @murainesouspatate et bonne et heureuse année 2025 🤩,

Voici le retour du fichier avec une astuce assez générale pour repérer le numéro de ligne au sein de la feuille "Enregistrement Facture" d'une facture sélectionnée dans ComBobox1 du Userform4.

Tous les commentaires ont été mis dans le code de Userform4.
Superbe travail, je ne connaissait pas du tout cette astuce.
Je vous remercie beaucoup pour votre coup de main, cela me fait avancer beaucoup.

Cordialement.
 

murainesouspatate

XLDnaute Occasionnel
Bonjour le Fil
j'avais au #10 posé la question !
car la méthode n'était pas logique ... mais Bon pas de réponse !
Bonne Journée
Jean marie
Oups désolé de ne pas vous avoir répondu dans la foulée. la solution que j'ai retenue est celle de mapomme qui m'a bien expliqué une subtilité que je ne connaissait pas et me convient tout à fait. Encore mille excuses,
Je vous souhaite une bonne année.
Cordialement.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @murainesouspatate :),

Dans mon précédent message, je m'étais fait plaisir en rajoutant le numéro de ligne dans la ComboBox1.

Mais il a une solution plus directe (et plus simple mais moins drôle) qui ne nécessite pas la modification de remplissage de la ComboBox1.

En fait à chaque fois qu'on a besoin de lire ou d'écrire des données de la facture sélectionnée dans ComboBox1, on redétermine le numéro de cette ligne (dans la feuille "Enregistrement Facture" repérée par F). Ainsi même si quelqu'un entre temps a mélangé ou trié les lignes de F, on a toujours la bonne ligne pour la facture sélectionnée.

Pour cela, on va utiliser le principe de la formule Excel EQUIV(). On recherche le numéro de facture sélectionnée (NumFact = Combobox1) dans la première colonne de F. EQUIV() va directement nous donner le bon numéro de ligne =EQUIV(numfact , F.Columns("a:a") , 0).

Mais il se peut que la ligne de la facture n'existe plus ou bien qu'aucune facture n'est été sélectionnée. Dans ce cas, EQUIV(...) renverra une erreur. Pour éviter de renvoyer une erreur, on englobe EQUIV(...) dans un SIERREUR(EQUIV(...), 0 ) qui renverra 0 dans le cas où la ligne n'a pas été trouvée. Ce qui donne pour la formule :
=SIERREUR( EQUIV(NumFact , F.Columns("a:a") , 0), 0 )

Mais cette formule est une formule EXCEL et non pas VBA. La conversion pour VBA est relativement simple (mais en anglais car VBA est d'origine US). EQUIV correspond à Match et SIERREUR correspond à IfError. Cela donne :
ligne = Application.IfError(Application.Match(NumFact, F.Columns("a:a"), 0), 0) soit
VB:
   NumFact = Me.ComboBox1                            ' le numéro de facture cliqué dans ComboBox1
   Set F = Sheets("Enregistrement Facture")                         ' feuille "Enregistrement Facture"
   For i = 1 To 6: Me.Controls("Textbox" & i) = "": Next i      ' Effacement des TextBox de 1  à 6
   ' ligne de la facture sélectionnée dans "Enregistrement Facture"
   ligne = Application.IfError(Application.Match(NumFact, F.Columns("a:a"), 0), 0)

Donc ligne est soit le numéro de ligne de NumFact soit vaut 0 si la facture n'a pas été trouvée. On peut donc ensuite agir dans chacun des cas :
VB:
   If ligne = 0 Then    ' la ligne de la facture n'existe pas ou n'existe plus
      ' action pas facture
      ...
   Else                 ' la ligne de la facture n'existe pas ou n'existe plus plus
      ' action quand la ligne de la facture existe
      ...
   End If

Voir le code complet commenté de Userform4 dans le classeur joint.

nota : j'ai supprimé le fond de page de la feuille 'Accueil" qui alourdissait (inutilement) le classeur à pratiquement la limite maximum autorisée pour la taille des fichiers sur XLD (soit 1 Mo).
 

Pièces jointes

  • murainesouspatate-Facturier V4c.xlsm
    731.9 KB · Affichages: 0
Dernière édition:

Discussions similaires

Réponses
10
Affichages
715
Réponses
4
Affichages
711

Membres actuellement en ligne

Statistiques des forums

Discussions
315 246
Messages
2 117 750
Membres
113 300
dernier inscrit
faby79