Re: Userform combinée, voici le code mais j'ai du mal ...
Re bonjour à chacun d'entre vous et Thierry ;-)
donc voici le code de la userform1 mais je vous avouerais que j'ai encore pas mal de soucis pour la faire fonctionner !!!
Pour la listbox j'aimerais avoir les 15 onglets avec les noms des membres : australie, bibi, bob, bunch, dav, ELEG, era, lapou, lolo, ombou, phiphi, raphou, rusty, seba et zedou.
Pour la ComboBox des sports, plutôt que la database, j'aimerais l'alimenté avec les A8:A29 de la feuille BILAN, est-ce possible ?
Enfin que dois-je changer dans le code suivant pour réussir à faire fonctionner tout cette magie des Userform ?
Voici le code de Userform1:
Option Explicit
Const T As String = "Thierry's Démo sur www.Excel-Downloads.com, June 2004"
Dim Bad As Boolean 'DECLARATION VARIABLE PUBLIQUE
Private Sub UserForm_Initialize() '<<<<< INITIALISATION du UserForm
Dim WS As Worksheet
Dim i As Byte
'Ici une Boucle pour incrémenter les Noms d'Onglets des Feuille dans la ListBox1
'avec exception pour la Feuille "Bilan" ou "Anciens membres"
For Each WS In Worksheets
If Not WS.Name = "Ce..." And Not WS.Name = "Bilan" And Not WS.Name = "Interface" And Not WS.Name = "Database" Then
With Me.ListBox1
.AddItem WS.Name
.MultiSelect = fmMultiSelectMulti 'ICI Je mets en Multi Sélection
End With
End If
Next
'ICI Incrémentation des Sport dans la ComboBox1..
With Sheets("Database")
For i = 2 To .Range("A65536").End(xlUp).Row
ComboBox1.AddItem .Range("A" & i)
Next i
End With
'ICI Par défaut je mets les CheckBoxs à True (Cochées) et je signe mon UserForm ;-)
With Me
.CheckBox1.Value = True
.CheckBox2.Value = True
.Caption = T
End With
End Sub
Private Sub ListBox1_Change() 'L'évènement Click ne passe plus en Mode Multi-Select
Dim TheWorkSheet As String '<<<<< Variable de type String le Nom de Feuille
Dim x As Byte '<<< Déclaration de Variable de Type Numérique Entier (jusqu'à 255)
Dim i As Byte '<<< Idem
'ICI une condition SI pour visualiser les Feuilles si Checkbox Cochée
If CheckBox2 = True Then
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
TheWorkSheet = Me.ListBox1.List(i)
End If
Next
On Error Resume Next
Worksheets(TheWorkSheet).Activate
End If
End Sub
Private Sub CommandButton1_Click() '<<<<< CLICK BOUTON VALIDATION
Dim WSArray() As String
Dim Selec As Boolean
Dim L As Integer '<<< Déclaration de Variable de Type Numérique Entier (jusqu'à 32,767)
Dim C As Byte '<<< Déclaration de Variable de Type Numérique Entier (jusqu'à 255)
Dim x As Byte '<<< Idem
Dim i As Byte '<<< Idem
Selec = False
'ICI Test si aucun Item sélectionné dans la ListBox1
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
Selec = True
End If
Next
If Selec = False Then
MsgBox "Sélectionner au moins un Item dans la ListBox", vbCritical, T
Exit Sub 'On est sorti si pas d'item sélectionné
End If
'ICI un test sur La TextBox1 qui doit impérativement contenir des Donnée...
If ComboBox1 = "" Then
MsgBox "Données manquante en ComboBox1 SPORT", vbCritical, T
Exit Sub 'On est sorti si pas d'item sélectionné
End If
'ICI un Test en Boucle pour les TextBox
CheckTextBox
If Bad = True Then Exit Sub 'si le test est Mauvais on Sort
'ICI Une boucle pour constituer une Array sur les Feuilles sélectionnées
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
ReDim Preserve WSArray(x)
WSArray(x) = Me.ListBox1.List(i)
x = x + 1
End If
Next
'ICI une Boucle pour écrire sur cahque feuille de l'Array...
For x = 0 To UBound(WSArray)
'ICI je dis avec quelle feuille on travaille car est sélectionnée par la Variable "TheWorkSheet"
With Sheets(WSArray(x))
'ICI je trouve la dernière ligne vide pour envoyer les données
L = .Range("A65536").End(xlUp).Row + 1
.Cells(L, 1) = ComboBox1
'ICI je fais une Boucle pour les Colonnes (1 to 5) et en même temps
'pour les TextBox 2 to 5...
For C = 2 To 5
.Cells(L, C) = Controls("TextBox" & C)
Next
End With '<<< Fin de AVEC WSArray(x)
Next x
'ICI une condition SI pour lancer la macro de nettoyage des TextBox si Checkbox Cochée
If CheckBox1.Value = True Then TheCleaner
L = 0
End Sub
Private Sub TheCleaner() '<<<<< MACRO DE NETTOYAGE DES TEXTBOXS
Dim CTRL As Control '<<<<<<<<<< Déclaration de Variable de Type Objet "Control"
'ICI Une Boucle sur cahque Controls avec un test sur le Nom (4 Première Lettres) pour
' Vérifier qu'on ne va vider ques des "TEXT"Box...
For Each CTRL In Controls
If Left(CTRL.Name, 4) = "Text" Or Left(CTRL.Name, 5) = "Combo" Then
CTRL.Value = ""
End If
Next CTRL
End Sub
Private Sub CheckTextBox()
Dim CTRL As Control
Dim EmptyCTRL As String
Bad = False
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Then
If CTRL.Tag <> "" Then
If CTRL = "" Then EmptyCTRL = EmptyCTRL & CTRL.Name & " " & CTRL.Tag & vbCrLf
End If
End If
Next CTRL
If Not EmptyCTRL = "" Then
MsgBox "Les Champs suivants sont Vides :" & vbCrLf & EmptyCTRL, vbCritical, T
Bad = True
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Enorme Merci à vous tous !!!
Jérémie