Afficher valeur combobox "par ordre décroissant"

Bonjour à tous,

Dans le cadre de l’amélioration de mon projet (encore et toujours besoin de vous !).

J'ai un combobox dans un formulaire qui affiche la liste des numéros de mes différents rapport de 1, 2, 3 ............ jusqu'au dernier encodé.

Est-il possible que celui affiche en ordre décroissant : le dernier encodé.........3,2,1 .

Simplement inverser l'affichage à l'intérieur mais je ne trouve pas d'option dans les propriété ?

Si l'un d'entre vous a un plan, je suis preneur.

D'avance merci !!!

Bonjour Jérôme,

voici un exemple,

Private Sub UserForm_Initialize()
Dim AL As Object
Set AL = CreateObject("System.Collections.ArrayList")

   For Each c In Sheets("Feuil1").Range("A1:A5")
      AL.Add c.Value
   Next

   AL.Reverse
   Me.ComboBox1.List = AL.Toarray()
End Sub

Bsr i20100,

Merci pour l'aide.

Après test j’avoue que je m'y perd et j'ai pas mal de défaut.

Par exemple je n'ai pas toute la liste ....

Si tu as l'occasion peux-tu voir pourquoi je ne sais pas adapter directement ?

Voir fichier joint.

C'est le USF du bouton ==> "MODIFIER RAPPORT' que je voudrais en décroissant.

Je continue tout de même à bosser le sujet....

Dans tous les cas...Merci

6jdd-combobox.xlsm (50.91 Ko)

re,

à tester,

Private Sub UserForm_Initialize()
Dim AL As Object
Dim J As Long
Dim i As Integer

TextBox10.Value = Format(Now, "dd-mm-yyyy  hh:mm")
TextBox11.Value = Environ("username")

TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False

TextBox1.BackColor = &H8000000F
TextBox2.BackColor = &H8000000F
TextBox3.BackColor = &H8000000F
TextBox4.BackColor = &H8000000F
TextBox5.BackColor = &H8000000F

Me.CommandButton4.Enabled = False

ComboBox1.ColumnCount = 1 ''Pour la liste déroulante Civilité''
ComboBox1.List() = Array("MATIN", "APRES-MIDI", "NUIT", "MATIN 12h", "NUIT 12h", "AUTRE...")

'************************************************
'************************************************
Set Ws = Sheets("CE") ''Correspond au nom de l onglet dans le fichier Excel''

Set AL = CreateObject("System.Collections.ArrayList")

    For J = 3 To Ws.Cells(Rows.Count, "A").End(xlUp).Row
       AL.Add Ws.Range("A" & J).Value
    Next J

    AL.Reverse
    Me.ComboBox2.List = AL.Toarray()

 For i = 1 To 11
     Me.Controls("TextBox" & i).Visible = True
 Next i

End Sub

re,re,

Même soucis que mon test.

J'ai bien la liste en décroissant, super mais par contre quand je veux faire afficher. Là erreur.

Je joint le fichier avec la modif, je ne comprend pas le problème ...

Merci bcp

8jdd-combobox.xlsm (55.92 Ko)

re,

peux-tu m'expliquer quel sont les conditions pour afficher les info sur les TextBox lors du ComboBox2_Change ?

voici un exemple,

Private Sub ComboBox2_Change()
Dim Ligne As Long
Dim i As Integer
Dim c, d
Dim x

If Me.ComboBox2.ListIndex = -1 Then Exit Sub

Ligne = Me.ComboBox2.Value + 2

'Remplissage des elements du userform
For i = 1 To 9
    With Me.Controls("TextBox" & i)
        .Value = Ws.Cells(Ligne, i + 2).Value

        'x sera évalué selon les conditions que tu auras décrites  <---- il faut connaitre les conditions

        'pour le test
        x = Application.InputBox(Prompt:="pour le test, inscrire 1 ou 2", Type:=1)

        Select Case x
            Case 1: .Enabled = True
                    .BackColor = RGB(255, 0, 0)
                    Me.CommandButton4.Enabled = True
                    Exit Sub

            Case 2: .Enabled = False
                    .BackColor = RGB(100, 100, 100)
                    Me.CommandButton4.Enabled = False
                    Exit Sub
            Case Else:

        End Select

        Select Case x
            Case 1: MsgBox ("Vous ne faites pas partie de la liste IGG")
            Case 2: MsgBox ("Le créateur du rapport n'est pas trouvé dans la liste IGG")
            Case Else:
        End Select
    End With
Next i
End Sub

Hello,

Il vérifie si le username est identique à l'auteur du rapport.

Si oui, possibilité de modifier pendant 24h

Si non, affichage uniquement

Si non mais que Administrateur alors toujours possibilité de modifier rapport.

La liste d'autorisation est la feuille masquée. A afficher...

Je vais essayer ce que tu m'as donné.

merci bcp

RE,

Non, je n'arrive pas à le faire fonctionner. Je manque cruellement de connaissance pour comprendre.

Comme dans le fichier joint précédent, mon code à l'origine est le suivant :

Option Explicit
Dim Ws As Worksheet

'Pour la liste déroulante de la référence

Private Sub ComboBox2_Change()
Dim Ligne As Long
Dim i As Integer
Dim c, d

If Me.ComboBox2.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox2.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "A") 'A c'est la valeur indiquée dans le combo

'Recherche de l'utilisateur dans la feuille IGG => feuille masquée

Set c = Sheets("IGG LISTING").Columns(3).Find(what:=Ws.Cells(Ligne, 4).Value, lookat:=xlWhole)
'Si l'utilisateur est trouvé, comparer son identifiant par rapport à c.offset(0, -1).Value
If Not c Is Nothing Then

'Remplissage des elements du userform  ==>
For i = 1 To 9
Me.Controls("TextBox" & i).Value = Ws.Cells(Ligne, i + 2).Value
Next i

'ICI je vérifie le username en comparaison pour autoriser l'affichange de mes cellules mais rien avoir avec la combobox2

    Set d = Sheets("IGG LISTING").Columns(2).Find(what:=Environ("username"), lookat:=xlWhole)
    If Not d Is Nothing Then
        If d.Offset(0, 2).Value <> "ADMIN" Then
            'Si le username est différent, laisser l'affichage mais désactiver les champs
            If c.Offset(0, -1).Value <> Environ("username") Then

            For i = 1 To 9
            Me.Controls("TextBox" & i).Enabled = True
            TextBox1.BackColor = &H80000005
            TextBox2.BackColor = &H80000005
            TextBox3.BackColor = &H80000005
            TextBox4.BackColor = &H80000005
            TextBox5.BackColor = &H80000005
            Me.CommandButton4.Enabled = True
            Next i

            'Sinon activer les champs

            '**==> NOW   le 1= 24h    3=72h (voir le chiffre en fct)

            Else
                If CDate(Ws.Cells(Ligne, 8).Value) < Now - 3 Then
                    For i = 1 To 9
                    Me.Controls("TextBox" & i).Enabled = True
                    TextBox1.BackColor = &H80000005
                    TextBox2.BackColor = &H80000005
                    TextBox3.BackColor = &H80000005
                    TextBox4.BackColor = &H80000005
                    TextBox5.BackColor = &H80000005
                    Me.CommandButton4.Enabled = True
                    Next i
                Else
                    For i = 1 To 9
                    Me.Controls("TextBox" & i).Enabled = True
                    TextBox1.BackColor = &H80000005
                    TextBox2.BackColor = &H80000005
                    TextBox3.BackColor = &H80000005
                    TextBox4.BackColor = &H80000005
                    TextBox5.BackColor = &H80000005
                    Me.CommandButton4.Enabled = True
                    Next i
                End If
            End If
        'Si admin activer les champs
        Else
            For i = 1 To 9
            Me.Controls("TextBox" & i).Enabled = True
            TextBox1.BackColor = &H80000005
            TextBox2.BackColor = &H80000005
            TextBox3.BackColor = &H80000005
            TextBox4.BackColor = &H80000005
            TextBox5.BackColor = &H80000005
            Me.CommandButton4.Enabled = True
            Next i
        End If
    Else
    'Désactiver les champs
        For i = 1 To 9
        Me.Controls("TextBox" & i).Enabled = True
        TextBox1.BackColor = &H80000005
        TextBox2.BackColor = &H80000005
        TextBox3.BackColor = &H80000005
        TextBox4.BackColor = &H80000005
        TextBox5.BackColor = &H80000005
        Me.CommandButton4.Enabled = True
        Next i
    MsgBox ("Vous ne faites pas partie de la liste IGG")
    End If
Else
'Désactiver les champs
    For i = 1 To 9
    Me.Controls("TextBox" & i).Enabled = True
    TextBox1.BackColor = &H80000005
    TextBox2.BackColor = &H80000005
    TextBox3.BackColor = &H80000005
    TextBox4.BackColor = &H80000005
    TextBox5.BackColor = &H80000005
    Me.CommandButton4.Enabled = True
    Next i
MsgBox ("Le créateur du rapport n'est pas trouvé dans la liste IGG")
Exit Sub
End If
End Sub

''Pour le bouton Quitter''
Private Sub CommandButton3_Click()
Unload Me
End Sub

'Pour le bouton Modifier
Private Sub CommandButton4_Click()
Dim Ligne As Long
Dim i As Integer

   If MsgBox("Confirmez-vous la modification de ce rapport ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
     If Me.ComboBox2.ListIndex = -1 Then Exit Sub

         Ligne = Me.ComboBox2.ListIndex + 2

         Ws.Cells(Ligne, "A") = ComboBox2

     For i = 1 To 11
         If Me.Controls("TextBox" & i).Visible = True Then
            Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
         End If
     Next i
   End If

'script pour sauvegarde automatique lors de l'insertion
Application.AlertBeforeOverwriting = False
ThisWorkbook.Save

'pour fermer le formulaire directement
Unload Me
End Sub

'Pour le formulaire
Private Sub UserForm_Initialize()

Dim J As Long
Dim i As Integer

TextBox10.Value = Format(Now, "dd-mm-yyyy  hh:mm")
TextBox11.Value = Environ("username")

TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False

TextBox1.BackColor = &H8000000F
TextBox2.BackColor = &H8000000F
TextBox3.BackColor = &H8000000F
TextBox4.BackColor = &H8000000F
TextBox5.BackColor = &H8000000F

 Me.CommandButton4.Enabled = False

ComboBox1.ColumnCount = 1 ''Pour la liste déroulante Civilité''
ComboBox1.List() = Array("MATIN", "APRES-MIDI", "NUIT", "MATIN 12h", "NUIT 12h", "AUTRE...")

'************************************************
'************************************************
Set Ws = Sheets("CE") ''Correspond au nom de l onglet dans le fichier Excel''

With Me.ComboBox2

    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
       .AddItem Ws.Range("A" & J)
    Next J

 End With

 For i = 1 To 11
     Me.Controls("TextBox" & i).Visible = True
 Next i
End Sub

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
End Sub

Je n'arrive vraiment pas à faire fonctionner la partie à rajouter.

Si tu as l'occasion, je suis preneur d'une explication ou conseil

Concernant les conditions:

Si username du rapport en colonne "i" = username actif alors on affiche les textbox avec valeur. Autorisation de modification pendant 24h.

Si le username actif et different de celui de l'auteur en colonne 8, alors affichage grisé. Pas de modif possible.

Si username actif est un ADMIN alors tout afficher et possiblité de tout modifier.

Mais bon, cette partie ne concerne pas vraiment le fait d'afficher les valeurs de la combobo2 en decroissant.

Si un plan, je prend.

Merci , merci

9test-jdd.xlsm (49.63 Ko)

re,

Après lecture et relecture. J'ai compris que la proposition était une autre façon de travailler sans les If, then, else ...

Mais par contre je ne sais pas comment faire alors pour re coder mes conditions ....

Si il y a encore une personne dans le coin

re,

les conditions sont:

Si username du rapport en colonne "i" = username actif alors on affiche les textbox avec valeur. Autorisation de modification pendant 24h.

Si le username actif et different de celui de l'auteur en colonne 8, alors affichage grisé. Pas de modif possible.

Si username actif est un ADMIN alors tout afficher et possiblité de tout modifier.

si j'ai bien compris les conditions,

l'utilisateur doit être = username --> c'est assuré

et avoir une référence Admin --> ok

et avoir une référence différent de celui de l'auteur ?

Bonjour Isabelle,

Je vais tenter de te détailler les conditions actuelle et le principe du programme.

Les utilisateurs du programme sont encodés dans une liste appelée "IGG LISTING" en feuille 2.

Lorsqu'une personne encode son rapport et enregistre celui-ci, son identifiant (username) s'indique en colonne "i" et l'heure d'encodage s'indique en colonne "h".

Les conditions pour la modifications "bouton modifier rapport":

* On sélectionne le numéro de rapport à modifier ==>

--- SI le username actif = le username de la colonne "i" alors on peut le modifier et ce pendant 24h.

Au dela des 24h, on ne peut que le visualiser sans pouvoir modifier.

--- SI le username actif est <> du username en colonne "i" alors on ne peut que le visualiser et modification interdite.

--- SI le username actif est "ADMIN" (voir feuil2 : IGG LISTING ==> colonne "D", car certains utilisateurs sont admin), eux ont le droit de modifier

n'importe quel rapport et ce sans limite dans le temps.

--- Et dernier, si une personne ne fait pas partie du listing IGG, lorsqu'elle veut modifier: message "vous ne faites pas partie du listing IGG". et donc juste la lecture possible.

J'espère avoir été plus clair.

NB: toutes ces conditions fonctionnent déjà parfaitement dans mon programme. Mais la demande initiale est d'afficher l’ordre de la combobox en décroissant.

En pièce jointe le fichier un peu plus précis.

Merci pour l'aide

Rechercher des sujets similaires à "afficher valeur combobox ordre decroissant"