1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| 'les variables ci-dessous sont déclarées en début de module pour être reconnues_
'dans procédure de celui-ci
Dim tbl 'variable tableau
Dim CelVide As Range 'variable objet (Range) représentant la 1ère cellule vide
Dim i As Integer, Ctrl As Control 'Ctrl pour les boucles dans les contrôles
'ci-dessous, une procédure subsidiaire faite pour montrer le résultat
Private Sub CommandButton3_Click()
Sheets("Feuil1").Activate
End Sub
'ci-dessous, une autre procédure subsidiaire faite pour montrer le résultat
Private Sub CommandButton4_Click()
Sheets("Feuil3").Activate
End Sub
Private Sub CommandButton5_Click()
Unload Me 'fermeture de l'USF
End Sub
Private Sub UserForm_Initialize()
remplir_combo 'au chargement de l'USF va vers la procédure "remplir_combo"
End Sub
Private Sub ComboBox1_Change()
Dim ligne As Range
'ci-dessous, on remet tous les checkbox à false
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then Ctrl = False
Next Ctrl
'ci-dessous on remplit les controles
With Sheets("Feuil1") 'donc, inutile les "Select" ou "Activate"
'ci-dessous "CelVide" représente la variable objet correspondant à la 1ère cellule vide en A
Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'avec With, toujours un "." devant "Range" et "Rows"
Set ligne = .Range("A1", CelVide).Find(ComboBox1) 'ligne est la variable Range où se situe la cellule recherchée
If ligne Is Nothing Then Exit Sub 'par précaution, evitons les erreurs
'ci-dessous, on teste les CheckBox
For i = 1 To 3
If ligne(1, i + 1) = "*" Then Me.Controls("Checkbox" & i) = True
Next i
End With
End Sub
'ci-dessous, pour l'ajout de données
'non expliqué car tu l'as fait en bonne partie
Private Sub CommandButton1_Click()
If MsgBox("Confirmez-vous linsertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation dajout") = vbNo Then Exit Sub
With Sheets("Feuil1")
If ComboBox1 <> "" Then
If WorksheetFunction.CountIf(.Range("A2", CelVide(0)), ComboBox1) > 0 Then
MsgBox "le dossier existe déjà"
ComboBox1 = ""
Exit Sub
Else
Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1)
CelVide = ComboBox1
For i = 1 To 3
If Me.Controls("CheckBox" & i) = True Then CelVide(1, i + 1) = "*"
Next i
CelVide(1, 5) = "Ajouté le " & Format(Now, "DD/MM/YY HH:MM:SS")
End If
Else
MsgBox (" Entrer le code de dossier s'il vous plait ")
Exit Sub
End If
End With
'et on actualise ci-dessous le combobox
remplir_combo
End Sub
'ci-dessous transfère données en feuille 3
Private Sub CommandButton2_Click()
Dim L As Range
With Sheets("Feuil3")
.Cells.ClearContents 'ça, c'est toi qui décides
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then
If Ctrl = True Then
.Cells(1, 1).Offset(2, 0).Value = " N° de dossier : " + ComboBox1.Value
'ci-dessus, tu pourrais écrire => .Range("A3)= " N° de dossier : " + ComboBox1.Value
Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'pour la cellule suivante en boucle
CelVide = " * " + Ctrl.Caption
End If
End If
Next Ctrl
End With
With Worksheets("Feuil1")
c = ComboBox1
Set L = .Range("A:A").Find(c)
End With
With Sheets("Feuil3")
.Range("A" & .Rows.Count).End(xlUp)(2, 1) = L.Offset(0, 4) 'donc = cellule recherchée décalée de 5 colonnes (col 1=>0,col 2=>1, col 3 =>2, etc.)
End With
End Sub
Private Sub remplir_combo()
With Sheets("Feuil1")
Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1)
tbl = .Range("A2", CelVide) 'on remplit le tableau des données en A
End With
ComboBox1.List = tbl 'et on rend les valeurs au combobox
End Sub |
Partager