OVH Cloud OVH Cloud

Panier Achat

3 réponses
Avatar
point
Bonjour,

je voudrais que lorsque je clique sur une case à cocher, la ligne soit
copiée dans une autre feuille, si je décoche la case la ligne suppr dans
mon autre feuille.

Avez-vous des pistes à me proposer?

Merci

Romain

3 réponses

Avatar
abcd
Il est étrange de ne pas tout mettre dans une seule feuille (au lieu de
cocher, mettre la quantité voulue, puis grâce au filtres automatiques ,
n'afficher que les quantités non nulles pour afficher le panier d'achat s)


Enfin bon, pour répondre à ta question, si tu veux absolument deux
feuilles il te faut entrer cette macro dans le code de la première
feuille (celle qui contient la liste de choix)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
' constantes:
Const LignesEnTete& = 1 ' dernière ligne de libellé (non cochable) sur
feuille de choix
Const CocheColonne& = 1 'Numéro de la colonne à cocher
Const OffsetNomArticle& = 1 '+1 = le nom de l'article est +1 colonne à
droite de la case cochable

Dim FeuilPanier As Worksheet, PremierNomPanier As Range
Set FeuilPanier = Feuil2 'nom VBA de la feuille du Panier
Set PremierNomPanier = FeuilPanier.Range("B2") 'case du premier article
dans le panier


If (Target.Column = CocheColonne) And (Target.Row > LignesEnTete) Then
'on est bien dans la colonen à cocher
'et sous la dernière ligne de libellés
Cancel = True 'on annule l'action normale du double clic

If IsEmpty(Target) Then 'la case est décochée
Target.Value = "X" 'on coche
' insertion dans l'autre feuille (utiliser son nom VBA)
If IsEmpty(PremierNomPanier) Then 'la panier est vide
Target.EntireRow.Copy PremierNomPanier.End(xlToLeft) 'on
écrit la première ligne du panier
ElseIf IsEmpty(PremierNomPanier.Offset(1, 0)) Then 'le panier
n'a qu'une seule ligne
Target.EntireRow.Copy PremierNomPanier.Offset(1,
0).End(xlToLeft) 'on écrit la première ligne du panier
Else 'Déjà plusieurs lignes, on ajoute à la suite; erreur si
feuille pleine
Target.EntireRow.Copy
PremierNomPanier.End(xlDown).Offset(1, 0).End(xlToLeft) 'on ajoute une
ligne à la suite
End If

Else 'la case est déjà cochée
Target.ClearContents 'on décoche l'article
'recherche de l'intitulé en Feuil2 (nom VBA)
Dim i&
i = 0
On Error Resume Next 'pas d'erreur si la ligne n'existe pas
'possible si le libellé a été modifié entre temps pa r exemple
i = Application.WorksheetFunction.Match( _
Target.Offset(0, OffsetNomArticle), _
Intersect(FeuilPanier.UsedRange,
PremierNomPanier.EntireColumn), _
0)
If i = 0 Then 'ligne absente
MsgBox "Des modifications ont peut être été faites
manuellement, l'article coché était absent du panier; veuillez véri fier
la validité des données.", _
vbCritical + vbOKOnly, _
"ERREUR !"
Else 'ligne présente, supprimons-là du panier
Intersect(FeuilPanier.UsedRange,
PremierNomPanier.EntireColumn).Cells(i).EntireRow.Delete
End If
End If 'FIN IF case pas encore cochée ?
End If 'FIN IF double clic au bon endroit ?
End Sub
Avatar
abcd
Je précise que j'ai fait le plus complexe pour te montrer, mais que si
tu veux insérer chaque achat en haut de la liste il y a moins de tests à
faire:

Target.Value = "X" 'on coche
' insertion dans l'autre feuille (utiliser son nom VBA)
Target.EntireRow.Copy
PremierNomPanier.End(xlToLeft).Insert
Application.CutCopyMode = False
Avatar
point
Je précise que j'ai fait le plus complexe pour te montrer, mais que si
tu veux insérer chaque achat en haut de la liste il y a moins de tests à
faire:

Target.Value = "X" 'on coche
' insertion dans l'autre feuille (utiliser son nom VBA)
Target.EntireRow.Copy
PremierNomPanier.End(xlToLeft).Insert
Application.CutCopyMode = False

Super, merci pour tout


Ppoint