Macro pr copier des cellule si checkbox coché

Fermé
seb - 16 sept. 2009 à 16:53
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 - 17 sept. 2009 à 18:09
Bonjour,
Je débute en programmation VB et je n'arrive pas à faire ma macro.
J'explique:

Je souhaite copier a partir de ma feuille 2 des cellules des colonnes B et C si et seulement si les box sont cochés. Les cellules provenant de la colonne B devront êtres coller par la suite sur la feuille 1 en A4, A5 .... , A20 et celles provenant de la colonne C sur la feuil 1 en B4, B5,...., B20.
Par contre si les box sont décocher il faut s'assurer que les cellules ne soit pas copier sur la feuille 1 car les box peuvent être coché ou décochés à tout moment donc le tableau de la feuille doit suivre les mouvement de la feuille 2 en fonction des box.

Voila j'espère que mes explication aurons été assez précise, merci a tous

seb
A voir également:

10 réponses

masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 12:58
Bonjour seb,
je suis pas sur que ça règle complètement ton pb mais bon.Pour exécuter la copie des cellules:
-tu passe en mode création de vb ds ton fichier excel
-tu double clique sur le check box,ce qui te permet d'éditer le code qui s'exécutera chaque fois que l'on cliquera sur le check box.
-t'entre le code
If CheckBox1.Value = True Then
'action à exécuter si le box est coché
else

End If
0
Bonjour,

Merci pour ta réponse mais voila j'ai déjà fait ces quelques lignes de prog pour chaque checkbox et ça copie bien les cellules où la box est coché mais parfois çà en oubli quelques une et ça ne se met pas a jour automatiquement si je coche ou décoche une box.

Sub Caseàcocher1_Clic()
If Range("a4").Value = faux Then Exit Sub ' case décochée, ne rien faire
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
End Sub
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 13:20
Je crois que le pb est dans la condition de ton si, tu dois plutôt mettre:

Sub Caseàcocher1_Clic()
If Caseàcocher1.Value = false Then
Exit Sub
else
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
end if
End Sub
0
J'ai tester tes lignes et ça marche pareil en faite il y a un deuxième problème qui me bloque pour affiner mon programme de copier /coller c'est que lorsque je copie des cellules je les colle sur la feuille 1 ça c'est OK mais si je décoche ces cellules ça ne me les effaces pas de la feuil 1 donc une fois coché les cellules reste toujours copier sur la feuil1 or il faut quel s'efface si je décoche.
Est ce que tu vois ou je veux en venir ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 13:44
Bon si jai bien compri ça signifie que tu dois vérifier si les cellules existent lorsque le box est décoché et si c'est le cas les supprimer par code.C'est dans le si que tu le fais:

If Caseàcocher1.Value = false Then
'tu mets le code pr effacer les cellules ici
else
....
0
Non en faite je crois que je me suis mal expliqué, je copie les cellules sélectionné sur la feuil 2 et les colle sur la feuil 1 mais la sélection peut changer a tous moment donc il faut être capable de supprimer certaine ligne sur la feuil 1 et d'en rajouter d'autre.
En faite la feuil 2 sert de base et la feuil 1 de synthèse qui se rempli toutes seule.
Je te met un exemple avec de fausse donné pour essayé de te faire comprendre car c'est vrai que c'est pas facile a expliquer et donc a comprendre.

Merci d'avance
0
sebd03 Messages postés 5 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 17 septembre 2009
17 sept. 2009 à 14:21
désolé je ne sais pas comment joindre le fichier a mon message
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 16:04
moi non plus,mais on va essayer de faire sans.
Résumons un peu: T'a un classeur avec deux feuilles;feuil2 coe base et feuil1 coe synthèse.
Tes checkbox sont sur la Feuil2 et tu voudrais que lorsqu'on les coche ils copies une plage de cells qu'ils collent ds la feuille 1 et lorsqu'il st décoché les cellules qui étaient copiées soient supprimées.
C'est bien ça?
0
sebd03 Messages postés 5 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 17 septembre 2009
17 sept. 2009 à 17:05
Oui je crois que cette fois on c'est compris, le tableau de la feuille 1 doit recopier les ligne de la feuille 2 quand les box sont coché et comme les box coché peuvent changer a tout moment il doit aussi se mettre a jour.

Merci pour ton aide
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 17:24
Ok.Pr la suppression de données il faut savoir cmt tu les mets ds ta feuil1(en ligne ou en colonne),mais en gros ça donne le code suivant:

Sub Caseàcocher1_Clic()
If Caseàcocher1.Value = false Then
'on suppose que tu ranges les données copiées en colonne ds la Feuil1:le code ci-dessous te permet de 'supprimer la colonne A
Feuil1.Columns("A:A").Delete Shift:=xlToLeft
'ou si tu veux juste effacer le contenu d'une plage sélectionnée...
Range("A1:A20").ClearContents
end if

If Caseàcocher1.Value = true Then
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
end if
End Sub
0
sebd03 Messages postés 5 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 17 septembre 2009
17 sept. 2009 à 17:34
Sub Caseàcocher1_Clic()
If Range("a4").Value = False Then
'ou si tu veux juste effacer le contenu d'une plage sélectionnée...
Range("A:E20").ClearContents
End If
If Range("a4").Value = True Then
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
End If
End Sub

On essayant ton code, le prog se bloquait alors j'ai remis les "if range" et ca copie bien mais sa supprime pas la ligne si je décoche la box et il me mais une erreur a "Range("A:E20").ClearContents"
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 17:42
désolé,c'est une erreur de ma part je voulais écrire:

Sub Caseàcocher1_Clic()
If Caseàcocher1.Value = False Then
'ou si tu veux juste effacer le contenu d'une plage sélectionnée...
Range("A:E20").ClearContents
End If
If Caseàcocher1.Value = True Then
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
End If
End Sub
0
sebd03 Messages postés 5 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 17 septembre 2009
17 sept. 2009 à 17:49
Voila ce que j'ai mis pour les 4 première ligne de mon tableau et ça a l'air de fonctionner

Sub Caseàcocher1_Clic()
If Range("a4").Value = False Then
Feuil1.Range("A4:E20").ClearContents
End If
If Range("a4").Value = True Then
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
End If
End Sub

Je vais essayer ça sur tout mon tableau car il faut que je recopie ces ligne pour chacune de mes box.
Je te tien au courant, Merci beaucoup

P.S : existe il une macro pour supprimer également les lignes du tableau quand les cellules sont vide ?
Exemple j'ai 17 ligne de rempli alors qu'avant yen avait 20 donc je veux supprimé les bordures des lignes 18,19 et 20
0
sebd03 Messages postés 5 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 17 septembre 2009
17 sept. 2009 à 18:03
Bon alors c mieux mais quand j'ai une box décoché il ne la copie pas mais laisse des cellules vide or il faut pas qu'il y ai de cellule vide, tu vois ce que je veux dire.

Voila un exemple de ce qui est mon code pour les lignes 4 et 5 par exemple :

Sub Caseàcocher1_Clic()
If Range("a4").Value = False Then
Feuil1.Range("d4:e4").ClearContents
End If
If Range("a4").Value = True Then
Range("b4:C4").Copy Destination:=Sheets("Liste").Range("d4:e4")
End If
End Sub
Sub Caseàcocher2_Clic()
If Range("a5").Value = False Then
Feuil1.Range("d5:e5").ClearContents
End If
If Range("a5").Value = True Then
Range("b5:C5").Copy Destination:=Sheets("Liste").Range("d5:e5")
End If
End Sub
0
masterchris Messages postés 82 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 8 juillet 2011 5
17 sept. 2009 à 18:09
C'est très surprenant que se soit : If Range("a4").Value = False Then .... qui ai marché au lieu de If Caseàcocher1.Value = False Then ....
Tu peux supprimer une ligne entière avec le code:
Feuil1.Rows("10:10").Delete Shift:=xlUp

Mais ton pb viens du fait que tu copie coordonnées pr coordonnées,dc après qd la case est décochée les lignes sont effacées:ce qui laisse des vides. Pour régler ton pb tu peux utiliser insérer :

If Range("a4").Value = False Then
Feuil1.Range("d4:e4").ClearContents
'code de suppression de lignes
Feuil1.Columns("D:D").Delete Shift:=xlToLeft
Feuil1.Columns("E:E").Delete Shift:=xlToLeft
End If
0