Re: => DEMO UserForm X-Méthodes pour incrémenter les Données en ListBox ou ComboBox
Bonjour Jeny, C@thy, Robert B et Robert R, Celeda, Didier_mDF, le Ch'Ti, Zon, G'Claire, Pascal76, Chris35, ouf y a du monde ici !!!
Bonjour le Forum !
Pour notre ami Robert, je te confirme qu'il ne faut surtout pas avoir bu avant (et pendant) la réalisation d'appli telle que ceci, lol, ou alors uniquement une fois qu'elle fonctionne pour fêter ça !
Bon plus sérieusement, je reviens ici pour confirmer deux choses :
1) Si je monte sur Panam, pas de blême je passe dans ta crèperies C@thy, tu peux en être sûre.
2) Notre ami Ch'ti 160, Jean Marie, me court après désespérément de Fils en Fils, pour une question sur une méthode employée ici dans cette démo... D'ailleurs il a raison de courir puisque il veut savoir ce qu'est RunTime qu'il voit revenir plusieurs fois dans mon code...
C'est très simple car en fait vous ne devriez jamais en avoir besoin à moins de faire des trucs tordus comme alimenter une même ListBox en même temps par RowSource et par AddItem et par List dans le Même UserForm !!! Faut chercher la complication car les deux dernières méthodes sont considérées "RunTime" alors que la première est considérée plutôt "Design" bien qu'on puisse la générer en Runtime !!! Niaaak !!
Arf zallez plus rien comprendre !! lol
Voici ce que dit l'aide, sorry je bosse en version US :
For a ListBox or ComboBox, Clear removes all entries in the list.
Clear deletes controls that were created at run time with the Add method. Using Clear on controls created at design time causes an error. If the control is bound to data, the Clear method fails.
Or la méthode RowSource est donc liée aux données source et bien qu'ici l'incrémentation se fasse en RunTime, la méthode Clear échoue lamentablement... Donc il me fallait bien distinguer la dernière méthode d'alimentation utilisée dans cette démo, surtout qu'elle y sont toutes !! lol
Donc en Top de Module1 Déclaration Niveau Public de tout le Projet :
Public RunTime As Byte
Ensuite cette variable est initialisée dans chaque Sub "Alimentation"
Sub RowSource_XlDown() => RunTime = 1
Sub RowSource_XlUp() => RunTime = 1
Sub AddItem_Loop() => RunTime = 2
Sub AddItem_Loop_On_Array() => RunTime = 2
Sub List_Directly_On_Range() => RunTime = 2
Sub List_On_Range_Via_Array() = RunTime = 2
Etc etc...
Et donc mon test s'effectue de la Manière suivante pour pouvoir nettoyer la Liste avant ré-intégration de nouvelles données :
If RunTime = 2 Then UserForm1.ListBox1.Clear
If RunTime = 1 Then UserForm1.ListBox1.RowSource = ""
Puisqu'il la méthode Clear échouerait sur une ListBox incrémentée en RowSource ...
Idem dans le Private Module de UserForm1, pour le bouton "OK" (ajout des données de la TextBox) Je suis obligé de faire un Test pour savoir si la ListBox1 avait été alimentée par List, or AddItem, or RowSource... :
Private Sub CommandButton3_Click()
If Me.TextBox1 = "" Then Exit Sub
If RunTime = 1 Then
MsgBox "Sorry, la ListBox est incrémentée en RowSource, je dois la vider d'abord"
UserForm1.ListBox1.RowSource = ""
Me.ListBox1.AddItem Me.TextBox1
Else
Me.ListBox1.AddItem Me.TextBox1
End If
Me.TextBox1 = ""
End Sub
Idem pour le Double Click pour virer une Entrée (Méthode interdite en RowSource, puisque la source de données est liée (bound) :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If RunTime = 1 Then
MsgBox "Sorry, la ListBox est incrémentée en RowSource, çà ne marche pas"
Else
Me.ListBox1.RemoveItem (Me.ListBox1.ListIndex)
End If
End Sub
Voilà je pense que ce sera plus clair pour toi Jean Marie, mais en fait tu n'en auras logiquemernt jamais besoin, car je ne vois pas d'appli nécessitant les deux type d'incrémentation de données, à moins d'une démo louf comme les miennes !!! lol
Bon Appétit
@+Thierry