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