Lancer une macro à partir d'une checkbox

charlyparis

XLDnaute Nouveau
Voilà le problème:

Au début, je lançais cette macro à partir d'une case d'option du menu formulaire qui marchait très bien mais je me suis rendu compte qu'ill fallait plutôt que j'utilise des cases à cocher (Checkbox du menu Contrôle!) pour ce travail.

Donc je voudrais qu'en cochant le case, ca lance ma macro qui copie des données d'un tableau sur une autre feuille. Avec la case d'option, ca marche normalement mais avec la checkbox, ca ne copie rien!
Aidez-moi, svp!
Bon bien sûr je suis débutant!
Merci d'avance pour votre aide.

Voilà le programme :

Private Sub CheckBox3_Click()

If CheckBox3.Value = True Then
Worksheets("SF SI").Select

Dim i
Dim j
Dim k
Dim NumeroLigne
Dim boucleur
Dim N
'Dim boucleurbis
i = 4

'Application.CutCopyMode = False
For j = 4 To 62
Worksheets("SF SI").Select
If Cells(j, 7).Value <> "" Then
Range(Cells(j, 1), Cells(j, 4)).Select
Selection.Copy
Worksheets("Vos Compétences SF SI").Select
If IsEmpty(Range("A4")) Then
Worksheets("Vos Compétences SF SI").Range("A" & i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
i = i + 1

Else
Worksheets("Vos Compétences SF SI").Select
NumeroLigne = Worksheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1
Worksheets("Vos Compétences SF SI").Range("A" & NumeroLigne).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End If

End If

Next j

End If
End Sub
 

ledzepfred

XLDnaute Impliqué
Re : Lancer une macro à partir d'une checkbox

salut charly, (ne m'appelles pas bosley!)

cette bizarrerie doit être le fruit d'une expérience malheureuse, de mon côté je n'ai pas réussi à la reproduire, cela ne doit pas être lié à la macro.

A+
 

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Salut Ledzepfred et vous tous!

j'ai ajouté ton call qui marche bien.

Par contre, lorsque je clique sur le checkbox pour le sélectionner, ca m'affiche déjà les compétences alors que je voudrais qu'il attende le fait d'appuyer sur le bouton de commande pour lancer les macros.

Même si j'enlève les if "checkbox1.value = True" dans le checkbox1.Click, cela ne change rien. Dès qu'on le coche, ca affiche directement les compétences.

As-tu des suggestions?

Sinon j'ai pensé à mettre cela dans le bouton de commande :

Private Sub CommandButton2_Click()

Dim Obj As OLEObject

For Each Obj In Worksheets("Choix du métier").OLEObjects 'NOM_FEUILLE à remplacer par le bon nom
If TypeOf Obj.Object Is MSForms.CheckBox Then

Select Case Obj.Name
Case "Checkbox1" 'pour URBANISTE SI
If Obj.Object.Value = True Then
Call CheckBox1_Click
End If
Case "Checkbox2"
If Obj.Object.Value = True Then
Call CheckBox2_Click
End If
End Select

End If
'End If
Next Obj
End Sub

Je fais les tests pour les deux premiers. Ce bout de programme marche mais lorsque je clique d'abord sur le checkbox 1 avant de cliquer sur le bouton de commande pour lancer les macros, ca m'affiche toujours avant les compétences!

On dirait que checkBox1_Click s'effectuera toujours dès qu'on cochera sa case..

Aidez-moi svp!!
Merci encore!
 

ledzepfred

XLDnaute Impliqué
Re : Lancer une macro à partir d'une checkbox

re..

pour centraliser le lancement des macros depuis le commandbutton, il faut

- intégrer les macros checkbox_click dans la Private Sub commandbutton1_click
- supprimer les macros checkbox_click
- pour avoir plus de clarté et éviter les redondances des lignes de code, insérer le dédoublonnage dans une Private Sub qui sera appellé depuis le commandbutton grâce à un call, même chose pour le copier coller avec une variable publique X (qui est définie en dehors des procédures), X prenant une valeur différente en fonction du checkbox

Ce qui donne (en remplacement de tout l'existant):
Code:
Option Explicit
Dim X As Integer
Private Sub CommandButton2_Click()
Dim Obj As OLEObject
For Each Obj In Worksheets("Choix du métier").OLEObjects  'NOM_FEUILLE à remplacer par le bon nom
    If TypeOf Obj.Object Is MSForms.CheckBox Then
            Select Case Obj.Name
                Case "CheckBox1"
                    If Obj.Object.Value = True Then X = 6: Call copier_coller
                Case "Checkbox2"
                    If Obj.Object.Value = True Then X = 7: Call copier_coller
                Case "Checkbox3"
                    If Obj.Object.Value = True Then X = 8: Call copier_coller
            End Select
    End If
Next Obj
Call doublons
End Sub

Private Sub copier_coller()
Dim j, Numeroligne As Integer
For j = 4 To 62
    With Sheets("SF SI")
        If IsEmpty(.Cells(j, X).Value) = False Then
            Application.ScreenUpdating = False
            Numeroligne = Sheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1
            .Range("A" & j & ":E" & j).Copy Sheets("Vos Compétences SF SI").Range("A" & Numeroligne)
        End If
    End With
Next j
End Sub

Private Sub doublons()
Dim k, boucleur As Integer
With Sheets("Vos compétences SF SI")
    For k = .Range("A62").End(xlUp).Row To 4 Step -1
        For boucleur = k - 1 To 4 Step -1
            If .Cells(boucleur, 4).Value = .Cells(k, 4).Value Then .Rows(boucleur).Delete: k = k - 1
        Next boucleur
    Next k
    .Range("A4:E" & .Range("A62").End(xlUp).Row).Sort Key1:=.Range("A4"), Order1:=xlAscending
End With
End Sub
Qu'en dis-tu?
 

Pièces jointes

  • LZFRED_charles.zip
    31.1 KB · Affichages: 20
  • LZFRED_charles.zip
    31.1 KB · Affichages: 26
  • LZFRED_charles.zip
    31.1 KB · Affichages: 28

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

C'est génialissimme, LedzepFred!!!!

Le code est propre, simple à comprendre et le X représente chaque colonne (métier donc)!!! Non vraiment, grand merci!! J'ai pu apprendre plein de choses grâce à toi! Merci 1000 fois!

Il y a juste et toujours ma ligne blanche qui débarque de je ne sais où...

Chez toi, aucune ligne blanche à la ligne 19? Sinon, je pense que je vais rajouter une ou deux ligne dans le private sub_doublons!

Comme dans la boucle:
If .Cells(boucleur, 4).Value = .Cells(k, 4).Value Then .Rows(boucleur).Delete: k = k - 1
If IsEmpty(.Range(.Cells(boucleur, 4))) = True Then .Rows(boucleur).Delete: k = k - 1
Next boucleur

J'ai rajouté le deuxième if pour dire que si la case est vide alors supprimer la ligne mais j'ai une erreur d'application 1004... Qu'en penses-tu?

Je pense qu'après cela, les problèmes de fond seront pratiquement résolus! :)
 

Pièces jointes

  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 27
  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 27
  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 27

ledzepfred

XLDnaute Impliqué
Re : Lancer une macro à partir d'une checkbox

RE...

pour l'erreur 1004 c'est parce que tu as écrit
Code:
If IsEmpty(.Range(.Cells(boucleur, 4))) = True Then .Rows(boucleur).Delete: k = k - 1
le range est en trop il suffit d'écrire
Code:
If IsEmpty(.Cells(boucleur, 4)) = True Then .Rows(boucleur).Delete: k = k - 1
Je pense que tu n'as pas besoin de cet ajout dans le code. Le mieux est de supprimer manuellement toutes les lignes du feuillet compétences (hormis les 3 premières) et de lancer la macro (si tu reproduis le bug, on avisera)

A+
 
Dernière édition:

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Voici la version que j'ai un tout petit peu changée:

Les checkbox2 et 3 ne marchaient pas car il fallait écrire CheckBox2 et 3 avec un B majuscule.

j'ai rajouté l'instruction avec Isempty car j'avais tjs le bug avec la ligne!

Est-ce que tu as une autre suggestion pour ce bug? A part cela , le programme marche bien!

Je vais réfléchir à comment récupérer les résultats : genre compter le nombre de N/A, Notions,Appliqué, maîtrisé... (de l'échelle) et représenter par compétence les résultats dans une antenne.

Si tu as des suggestions, n'hésite pas! :)
 

Pièces jointes

  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 25
  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 23
  • LZFRED_super_ch.zip
    35.8 KB · Affichages: 25

ledzepfred

XLDnaute Impliqué
Re : Lancer une macro à partir d'une checkbox

re...

vraiment bizarre que tu aies ce souci, de mon côté impossible à reproduire

pour la procédure doublons tu peux compiler les deux if en un seul, comme ceci :

Code:
Private Sub doublons()
Dim k, boucleur As Integer
With Sheets("Vos compétences SF SI")
    For k = .Range("A62").End(xlUp).Row To 4 Step -1
        For boucleur = k - 1 To 4 Step -1
            If .Cells(boucleur, 4).Value = .Cells(k, 4).Value [COLOR="Red"]Or IsEmpty(.Cells(boucleur, 4)) = True [/COLOR]Then .Rows(boucleur).Delete: k = k - 1
        Next boucleur
    Next k
    .Range("A4:E" & .Range("A62").End(xlUp).Row).Sort Key1:=.Range("A4"), Order1:=xlAscending
End With
End Sub
A+
 

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Merci pour le Or!

Voilà je viens d'ajouter une échelle qui a pour liste : D11 à D15 dans l'onglet échelle. (Insertion, Nom, Définir) et comme nom : Echelle sur la colonne F de l'onglet de "vos compétences SF SI" afin que l'utilisateur sélectionne son niveau.

Je m'aperçois, que lorsqu'on fait des allers-retours en jouant avec les métiers de l'onglet "Choix des métiers", la liste a tendance à disparaître.

Je fais bien dans la colonne F pour Echelle : Données, validation, Autoriser Liste et dans source : = Echelle.

Y-a-il un moyen de "bloquer" cette liste sur la colonne F? Qu'elle ne disparaisse pas lors des allers-retours?

Merci encore et toujours!
 

Pièces jointes

  • LZFRED_super_ch.zip
    39.1 KB · Affichages: 24
  • LZFRED_super_ch.zip
    39.1 KB · Affichages: 19
  • LZFRED_super_ch.zip
    39.1 KB · Affichages: 25

ledzepfred

XLDnaute Impliqué
Re : Lancer une macro à partir d'une checkbox

re...

- ai ajouté deux lignes dans sub copier_coller pour copier la validation de la cellule A4 de compétences dans toutes les cellules de F4 à F & Numeroligne (la validation ne disparait plus)
Code:
Sheets ("Vos Compétences SF SI")
    .Range("F4").Copy
    .Range("F4:F" & Numeroligne).PasteSpecial Paste:=xlPasteValidation
End With

ai ajouté une condition if dans la procédure doublons pour obliger la suppression de la ligne doublon pour laquelle la colonne F n'est pas renseignée (évites à l'utilisateur de se reprononcer s'il l'a déja fait)

Code:
If .Cells(boucleur, 4).Value = .Cells(k, 4).Value Or IsEmpty(.Cells(boucleur, 4)) = True Then
     [COLOR="red"]If IsEmpty(.Cells(k, 6)) = True Then .Rows(k).Delete: k = k - 1 Else .Rows(boucleur).Delete: k = k - 1[/COLOR]            [COLOR="red"]
End If[/COLOR]

ai modifié le tri pour qu'il se fasse non plus sur 5 colonnes mais 6.
Code:
.Range("A4:[COLOR="Red"]F[/COLOR]" & .Range("A62").End(xlUp).Row).Sort Key1:=.Range("A4"), Order1:=xlAscending
a+
 

Pièces jointes

  • LZFRED_super_ch.zip
    34.6 KB · Affichages: 26
  • LZFRED_super_ch.zip
    34.6 KB · Affichages: 26
  • LZFRED_super_ch.zip
    34.6 KB · Affichages: 27

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Ah non!!

J'ai un bug...

Je teste pas à pas le :

Private Sub copier_coller() et c'est la ligne de dessous:

Numeroligne = Sheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1

qui pose problème! Elle me donne 47 alors qu'elle devrait être égale à 4!


Ta partie : With Sheets("Vos Compétences SF SI")
.Range("F4").Copy
.Range("F4:F" & Numeroligne).PasteSpecial Paste:=xlPasteValidation
End With

est exactement ce qu'il me fallait. Elle copie l'échelle suivant le nombre de compétences apparaissant mais comme NumeroLigne bugge, tout bugge!
Qu'en penses-tu? Je ne comprends pas!
 

Pièces jointes

  • LZFRED_super_ch_08.zip
    34.8 KB · Affichages: 24

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Re..!

J'ai repris l'avant-dernier fichier en ajoutant ta partie avec with :
With Sheets("Vos Compétences SF SI")
.Range("F4").Copy
.Range("F4:F" & Numeroligne).PasteSpecial Paste:=xlPasteValidation
End With

Cela marche parfaitement. Pas de bug bizarre!

En ce moment, je suis sur la partie représentation des résultats en graphique. :)
 

charlyparis

XLDnaute Nouveau
Re : Lancer une macro à partir d'une checkbox

Rebonsoir!

Me voici avec un nouvel onglet "résultat":

J'ai commencé une nouvelle partie où lorsqu'on appuie sur le bouton résultat, il affiche les compétences élémentaires et l'échelle en transposé. Cà, c'est bon.

Maintenant, je voudrais appliquer une nouvelle échelle, par ex:
1 lorsqu'on a N/A
2 Notion
3 Appliqué
4 Maitrisé
5 Expert

Ce serait pour insérer cette série de nombre avec la série des compétences pour fabriquer une antenne automatiquement avec la macro.

Apparemment, il ne semble pas aimer N/A...Faut-il que je mette un autre nom?
Est-ce que c'est bien cells.Value pour avoir le contenu d'une cellule?

Merci pour votre aide!
 

Pièces jointes

  • LZFRED_super_ch.zip
    45.3 KB · Affichages: 24
  • LZFRED_super_ch.zip
    45.3 KB · Affichages: 24
  • LZFRED_super_ch.zip
    45.3 KB · Affichages: 23

Discussions similaires

Statistiques des forums

Discussions
312 670
Messages
2 090 745
Membres
104 646
dernier inscrit
Mbark Moustanssir