|
|
|
|
Bonjour à tous et ... au secours !
Je dois vous avouer que je galère un max sur un pb de macro et que depuis quelques soirs j'ai la tête comme un "cabanon".
Voilà mon pb
Sur Excel, je souhaiterais créer une macro qui me permette de réaliser les trois actions suivantes :
A partir de la sélection d'une cellule quelconque de la colonne A; pouvant être sélectionnée indifféremment sur 6 feuilles (correspondant a du matériel, donc avec une valeur texte) :
- copier la ligne sur laquelle se trouve cette cellule sur la première ligne vide de la feuille "Ventes". Ce collage doit être un collage spécial qui supprime les formules contenues dans la ligne pour ne laisser apparaître que les valeurs,
- rechercher la valeur de cette cellule active dans la colonne A de la feuille "Stock" et supprimer la ligne sur laquelle se trouve cette valeur,
- sur la feuille active, effacer sur la ligne active les cellules C1,D1,F1,G1,I1,J1,L1,M1,O1,P1,R1,S1,U1 et colorer la ligne en gris.
Si quelqu'un pouvait m'aider, ça me permettrait de diminuer ma dose d'aspirine.
Par avance merci.
Configuration: Windows XP Firefox 3.5.3
Bonjour
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Range("A1:A10000")) Is Nothing Then Exit Sub
Application.EnableEvents = False
With Sheets("ventes")
.Rows(.Range("A65536").End(xlUp).Row + 1) = Rows(Target.Row).Value
End With
With Sheets("stocks")
.Rows(.Columns(1).Find(Target.Value, .Range("A65536"), xlValues).Row).Delete
End With
lig = Target.Row
cellule = Array(3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21)
For cptr = 0 To UBound(cellule)
Cells(lig, cellule(cptr)).ClearContents
Next
Rows(lig).Interior.ColorIndex = 15
Application.EnableEvents = True
End Sub
Cordialement, Michel
|
Re,
|
Tout compte fait voila la b^te:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'si on sélectionne hors A1:10000 ou si la feuille active est "ventes" ou "stoks" :sortie de la macro
If Intersect(Target, Range("A1:A10000")) Is Nothing _
Or ActiveSheet.Name = "ventes" Or ActiveSheet.Name = "stocks" Then Exit Sub
'détruit dans la feuille la ligne correspondant à la valeur sélectionnée en feuille active
With Sheets("stocks")
On Error GoTo erreur:
.Rows(.Columns(1).Find(Target.Value, .Range("A65536"), xlValues).Row).Delete
End With
'report dans la 1° ligne vide de "ventes" des valeurs de la ligne sélectionnée dans feuille active
With Sheets("ventes")
.Rows(.Range("A65536").End(xlUp).Row + 1) = Rows(Target.Row).Value
End With
'ligne de la sélection feuille active
lig = Target.Row
'tableau des num de colonnes à effacer
cellule = Array(3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21)
'boucle sur le tableau en effacant le contenu
For cptr = 0 To UBound(cellule)
Cells(lig, cellule(cptr)).ClearContents
Next
'colorie la ligne en gris
Rows(lig).Interior.ColorIndex = 15
Exit Sub
erreur:
MsgBox Target & " inconnu dans les stocks"
End Sub
Cordialement, Michel |
Rebonjour
|
Ta méthode "la découverte" a tout fait foiré
|
Bien vu. Je viens de remettre la macro comme tu l'avais créee et elle fonctionne à merveille. C'est beau et je suis très impressionné.
|