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
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
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
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