Bonjour,
Grâce à Mercatog, qui a intervenu à 2 reprises pour me donner un sacré coup de main, que je salue et remercie.
Donc en cochant une checkbox son caption est inscrit sur la feuille BD (selon des coordonnées répertoriées en feuille App) et en décochant le caption est effacer.
Mercatog a utilisé un module de classe, que je ne maitrise pas du tout. J'ai compris qu'il gère la multitude des checkboxs présentent sur la feuille "m_a" et que le code réagit à l'action de cocher/décocher.
Maintenant, je voudrais utiliser un bouton sur la feuille BD pour faire une boucle sur les chekboxs, si la checkbox est cochée inscrire comme auparavant le caption.
Par contre, si la checkbox est décochée l'effacer et l'inscrire en colonne L (soit .offset(i,5), mais comme en colonne L, il peut y avoir une donnée, on concatène cette donnée et le caption. exemple, en L4 il y a "RAS" , le caption étant "TT08", il est effacer de G4 et concaténer en L4, résultat:"RAS" "TT08".
je bute sur 2 difficulté, la première c'est le module de classe existant. Je ne sais pas l'utiliser et la seconde, je tourne en rond pour compter ces satanées checkboxs (est-ce des shapes ou des objects). Tous mes essais ont été vains.
voici les codes actuels du fichier qui fonctionne bien
moduleClasse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Option Explicit Sub TestOnOff(ByVal App As String, ByVal Etat As Boolean) Dim LastLigD As Long, LastLigB As Long, i As Long, j As Long Dim Tb, Td With Worksheets("APP") LastLigD = .Cells(.Rows.Count, "A").End(xlUp).Row Td = .Range("A2:F" & LastLigD) End With With Worksheets("BD") LastLigB = .Cells(.Rows.Count, "B").End(xlUp).Row Tb = .Range("B2:G" & LastLigB) For i = 1 To LastLigD - 1 'boucle sur Td (App) For j = 1 To LastLigB - 1 'boucle sur Tb (BD) If Not Etat Then If Tb(j, 6) = App Then Tb(j, 6) = "" Else If Tb(j, 6) = "" Then If Td(i, 6) = App And Td(i, 1) & "|" & Td(i, 2) & "|" & Td(i, 3) & "|" & Int(Td(i, 4)) = _ Tb(j, 1) & "|" & Tb(j, 2) & "|" & Tb(j, 3) & "|" & Int(Tb(j, 4)) Then Tb(j, 6) = App End If End If Next j Next i .Range("B2:G" & LastLigB) = Tb End With End Subcode feuille "m_a"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Option Explicit Public WithEvents Chk As MsForms.CheckBox Private Sub Chk_Click() If ChkExists(Chk.Caption) Then TestOnOff Chk.Caption, Chk.Value Else If Chk.Value Then Chk.Value = False MsgBox Chk.Caption & " inéxistant dans la BD!" End If End If End Sub Private Function ChkExists(ByVal NomApp As String) As Boolean ChkExists = Not Worksheets("APP").Range("F:F").Find(NomApp, LookIn:=xlValues, lookat:=xlWhole) Is Nothing End FunctionSur la feuille "m_a", il y a 45 checkboxs et 1 commandButton. En vous remerciant par avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Option Explicit Dim CC() As Classe1 Private Sub Worksheet_Activate() Dim CB As OLEObject Dim i As Integer For Each CB In Feuil1.OLEObjects If Left(CB.Name, 3) = "Chk" Then i = i + 1 ReDim Preserve CC(1 To i) Set CC(i) = New Classe1 Set CC(i).Chk = CB.Object End If Next CB End Sub Private Sub Cb_RetourBD_Click() Sheets("BD").Activate End Sub
Partager