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
 

charlyparis

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

Bon je crois que je suis encore dans une impasse : voici le petit programme à la suite du programme qui copie-colle:


J'ai rajouté un checkbox qui sera actif si l'autre l'est déjà. C'est pour le test du deuxième with concernant la suppression des doublons.


Private Sub CheckBox1_Click()
Dim i, j, NumeroLigne, k, boucleur As Integer
i = 4
If CheckBox3.Value = True Then
'Application.CutCopyMode = False
For j = 4 To 62
With Sheets("SF SI")
If IsEmpty(.Cells(j, 5).Value) = False Then
Application.ScreenUpdating = False
NumeroLigne = Sheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1
.Range("A" & j & ":D" & j).Copy Sheets("Vos Compétences SF SI").Range("A" & NumeroLigne)
End If
'End If
End With
Next j 'Tout fonctionne normalement jusqu'ici!

With Sheets("Vos compétences SF SI")
NumeroLigne = Sheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1
k = NumeroLigne - 1

For k = NumeroLigne - 1 To 4 Step -1 'c'est la variable qui va dire avec qui on compare
For boucleur = k - 1 To 4 Step -1 'c'est la variable qui va boucler de ligne juste avant la ligne k jusqu'à la ligne 4 et qui va aider à comparer le texte de la cellule avec le texte à la cellule k.
If Cells(boucleur, 4).Text = Cells(k, 4).Text Then
Rows(boucleur).Delete
k = k - 1
End If
Next boucleur
Next k
End With
End If
End Sub

Le problème est que, dans le 2eme with, le programme entre dans le if alors qu'il ne devrait pas ou lorsqu'il entre, il ne supprime même pas la ligne...

Au fait, le if veut comparer les textes entrés dans les cellules donc est-ce bien cells(?,?).Text ou peut-être est-ce cells(?,?).Value

La partie copier-coller du checkbox1 marche très bien comme le checkbox3 (merci encore Ledzepfred!)mais c'est au deuxième width où c'est encore bizarre! Bien entendu, ca marchait bien avec la case d'option!

Vous voulez bien me donner un coup de main?J'ai mis le programme en pièce jointe! Merci d'avance!
 

Pièces jointes

  • forumproblemecharlyparis.zip
    37.6 KB · Affichages: 50
  • forumproblemecharlyparis.zip
    37.6 KB · Affichages: 42
  • forumproblemecharlyparis.zip
    37.6 KB · Affichages: 48

ledzepfred

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

re....

voila, quand tu fais appel à un with end with, il ne faut pas oublier les points devant range ou cells (sinon ce sont les références du feuillet actif que tu compares) :

Code:
Private Sub CheckBox1_Click()
Dim i, j, NumeroLigne, k, boucleur As Integer
i = 4
If CheckBox3.Value = True Then
'Application.CutCopyMode = False
    For j = 4 To 62
    With Sheets("SF SI")
            If IsEmpty(.Cells(j, 5).Value) = False Then
            'Application.ScreenUpdating = False
             NumeroLigne = Sheets("Vos Compétences SF SI").Range("A62").End(xlUp).Row + 1
            .Range("A" & j & ":D" & j).Copy Sheets("Vos Compétences SF SI").Range("A" & NumeroLigne)
            End If
        'End If
    End With
    Next j
    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
    End With
End If
End Sub

a+
 

Pièces jointes

  • forumproblemecharlyparis.zip
    30.4 KB · Affichages: 59
  • forumproblemecharlyparis.zip
    30.4 KB · Affichages: 55
  • forumproblemecharlyparis.zip
    30.4 KB · Affichages: 48

charlyparis

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

Ah ok!!!

Faire attention aux points avec les with...

Merci encore Ledzepfred!

Bon il ne reste plus qu'une troisième partie qui les triera automatiquement par ordre alphabétique. je sais bien qu'il y a la touche qui va bien sur Excel mais je préfèrerai que la macro le fasse automatiquement.

Je vais rajouter cette troisième partie bientôt! j'espère que je vais réussir du premier coup!

:)
 

charlyparis

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

Me revoilà!

Voilà le deuxième with avec trois instructions pour les trier:

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:A" & .Range("A62").End(xlUp).Row).Sort Key1:=.Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

.Range("B4:B" & .Range("B62").End(xlUp).Row).Sort Key1:=.Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

.Range("C4:C" & .Range("C62").End(xlUp).Row).Sort Key1:=.Range("C4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End With

j'ai rajouté ces trois instructions qui trient les colonnes A, B, C dans les deux checkbox (checkbox1 et Checkbox3). Lorsque je coche un checkbox, tout marche nickel. Par contre, lorsque je coche l'autre, tout est en ordre mais les cases avec la première sous-compétence de chaque compétence ( celle sen couleur marron) ne sont pas forcément sur la même ligne. Je parle juste des trois premières colonnes (A,B,C). La quatrième colonne est particulière : je la traiterai juste après.

Est-ce qu'il y a une instruction qui dit : si la ligne des colonne A,B et C est marron alors les mettre sur la même ligne?

Ou me conseillez-vous autre chose?
Je voudrais que lorsque l'utilisateur coche la ou les cases, tout soit vraiment en ordre.

Merci d'avance et encore pour votre aide précieuse!
 

Pièces jointes

  • programme2forumproblemecharlyparis.zip
    32.2 KB · Affichages: 42
  • programme2forumproblemecharlyparis.zip
    32.2 KB · Affichages: 45
  • programme2forumproblemecharlyparis.zip
    32.2 KB · Affichages: 45

ledzepfred

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

RE

ce serait mieux de traiter les quatre colonnes d'un coup.
L'idéal serait de remettre en pj le résultat après le tri que tu souhaites obtenir.
En partant du résultat il sera plus aisé de trouver la solution.

A+
 

charlyparis

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

Au lieu de trier A et b et C, les uns après les autres,
j'ai essayé cette expression pour trier les trois en même temps qui ne lui a pas plus :

.Range("A4:C4" & .Range("A62:C62").End(xlUp).Row).Sort Key1:=.Range("A4:C4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Erreur définie par l'application...

J'ai mis en pièce jointe le tri après que la case checkbox 3 soit cochée. Comme vous voyez, les lignes 4,7,12 (celles en marron) sont toutes bien à la même ligne.
C'est lorsque je coche l'autre checkbox qui trie lui aussi, que c'est un peu le désordre dans les lignes marrons.

J'ai mis dans le checkbox 1 : "if checkbox3.value = True" pour tester

Lorsque vous cochez le checkbox 1, vous voyez qu'il y a à la ligne 4 le problème dans l'onglet "vos compétences SF SI" : les deux colonnes A et B devraient être à ligne 4 et non à la 6. (J'ai mis une couleur pour plus de lisibilité).

Je ne parle que des trois premières colonnes.

J'espère avoir été plus clair!

Merci encore pour ton aide!
 

Pièces jointes

  • programme2forumproblemecharlyparis.zip
    34.9 KB · Affichages: 25
  • programme2forumproblemecharlyparis.zip
    34.9 KB · Affichages: 25
  • programme2forumproblemecharlyparis.zip
    34.9 KB · Affichages: 24

charlyparis

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

J'ai trouvé la solution : c'est bourrin, pas très propre mais ca marche :

With Sheets("Vos compétences SF SI")

For N = .Range("C62").End(xlUp).Row To 4 Step -1
With Sheets("SF SI")
For boucleurbis = 62 To 4 Step -1
If Worksheets("Vos Compétences SF SI").Cells(N, 3).Value = Worksheets("SF SI").Cells(boucleurbis, 3).Value Then

.Range("D" & boucleurbis).Copy Sheets("Vos Compétences SF SI").Range("D" & N)

N = N - 1
End If
Next boucleurbis

End With
Next N
End With

Ce with permet de comparer la valeur de la cellule (N,3) de l'onglet "vos compétences SF" à la valeur des cellules de la colonne C de l'onglet "SF SI".
S'ils sont pareils alors il copie la valeur de la cellule (boucleurbis,4) dans la cellule (N,4).

J'ai ajouté deux autres with dans le checkbox1 qui permettent d'avoir les lignes marrons sans erreur. Vous pouvez voir le résultat.

Par contre, peut-on améliorer le code avec les trois with dans le checkbox1 car cela me paraît lourd?

Si tu as une solution plus simple, LedzepFred, n'hésite pas et merci encore et toujours pour ton aide!

Application : Comme toujours, on coche d'abord le checkbox 3 (Gest d'application) puis ensuite le check box1.
Si vous cochez d'abord le checkbox 1, il ne se passera rien car dans le checkbox 1, j'ai mis if checkbox3.Value= True.
 

Pièces jointes

  • problemeresolucharlyparis.zip
    35.7 KB · Affichages: 24
  • problemeresolucharlyparis.zip
    35.7 KB · Affichages: 28
  • problemeresolucharlyparis.zip
    35.7 KB · Affichages: 24

ledzepfred

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

re...
c'est sur que c'est alambiqué mais ça marche, tu peux peut-être faire autrement : pourquoi ne pas renseigner une colonne supplémentaire dans lequel chaque cellule prendrait le numéro de ligne de SF SI et faire en sorte que le tri dans Compétences se fasse par rapport à cette colonne, l'intérêt sera d'avoir un code plus simple, l'inconvénient est d'avoir une colonne supplémentaire.
Dis-moi ce que tu en penses

A+
 

ledzepfred

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

re,

voici un essai avec la colonne A cachée dans les deux feuillets contenant pour chaque cellule le numéro de ligne. Le code est nettement plus simple.

A+
 

Pièces jointes

  • problemeresolucharlyparis.zip
    27.5 KB · Affichages: 26
  • problemeresolucharlyparis.zip
    27.5 KB · Affichages: 27
  • problemeresolucharlyparis.zip
    27.5 KB · Affichages: 25

charlyparis

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

Je vais voir cela!

Au fait, là je suis sur un autre truc :

Je mets un bouton de commande " Notez vos compétences SF" qui, lorsqu'on clique dessus, repère toutes les checkbox cochés et nous envoie directement vers l'onglet "Vos compétences SF" avec la liste des compétences nickel.

Comment peut-on repérer les checkbox?

Ou peut-être il suffit que dans la macro de la bouton de commande, on écrit :"
Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then
CheckBox1_Click
End If
End Sub
J'ai essayé mais rien ne se passe...

Je qu'on peut faire un simple Select avec tous les value des Checkbox non?

J'ai désactivé les "if Checkbox = True" dans chaque checkbox afin que les compétences n'apparaissent pas par erreur!

Merci encore pour votre aide!
 

Pièces jointes

  • boutondecommande.zip
    41.6 KB · Affichages: 25
  • boutondecommande.zip
    41.6 KB · Affichages: 31
  • boutondecommande.zip
    41.6 KB · Affichages: 29

charlyparis

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

wow!

C'est sûr que c'est beaucoup simple! Super Ledzepfred!

La ligne qui change tout est :
.Range("A4:E" & .Range("A62").End(xlUp).Row).Sort Key1:=.Range("A4"), Order1:=xlAscending

Tu prends comme référence A4 pour l'ordre croissant. C'est bien çà?

Par contre, Pourquoi E dans A4:E? Ca veut dire qu'on prend le domaine de A4 à la colonne E entière?

Merci d'avance pour ta réponse. :)
 

ledzepfred

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

RE...

pour le commandbutton, essayes ceci
Code:
Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then[COLOR="Red"] Call [/COLOR]CheckBox1_Click
End Sub
pour le tri je prends effectivement la cellule A4 comme clé pour ordre ascendant, je prends la plage A:E par mesure de sureté (ça mange pas de pain!)
Par contre qu'entends-tu par utiliser des objets OLE? Les boutons de commandes et autres cases à cocher n'en sont-ils pas?

a+
 

charlyparis

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

je vais utiliser demain matin ton expression! (Il faut bien se changer les idées!)

Ouais tu as raison! Je viens de m'apercevoir que les checkbox du menu contrôle sont des OleoObject! :)

A demain et merci pour toutes tes explications d'aujourd'hui!
:)
 

charlyparis

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

J'ai repris le programme que tu avais amélioré avec la colonne A cachée!

Je me suis amusé à cocher un ou les deux checkbox et ill y a juste une bizarrie : c'est le trou à l'avant-dernière ligne dans l'onglet des résultats!

Je n'arrive pas à me l'expliquer!

Qu'en penses-tu?
 

Pièces jointes

  • problemeresolucharlyparis_trou.zip
    27.2 KB · Affichages: 27

Discussions similaires

Statistiques des forums

Discussions
312 679
Messages
2 090 849
Membres
104 677
dernier inscrit
soufiane12