Une version qui fonctionne
salut
ouais ya des soir ou il faudrait se coucher de plus bonne heure hein!!!
bon c'est moi qui avais déraillé
en fait on se servait de activecell hors activecell était la cellule en dessous de la concernée puisque pour déclencher l'évènement il faut au minimum appuyer sur enter
en fait il fallait se servir de target.row tout le long
bon voila ca marche
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
Option Base 1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim derLig As Long, lignVide As Long, tablo(1, 9), doublon As Variant
' ici j 'ai reuni les 2 conditions de sortie de sub
If Target.Column <> 12 Or Target.Row <> Range("A" & Rows.Count).End(xlUp).Row Then Exit Sub
derLig = Target.Row ' ici si on est pas sorti alors on est forcement sur la dernière ligne
If Target = "RP" Then
'doublon va devenir la celle qui contient le doublon
Set doublon = Sheets(1).Range("a1:a" & Target.Row - 1).Find(Cells(derLig, 1).Value, LookIn:=xlValues)
If Not doublon Is Nothing Then ' si le doublon n'est pas rien alors message
MsgBox "il y deja cette valeur en ligne :" & doublon.Row
Else
' sinon on fait le boulot et sans tout ces activate qui paralysent le system
'il y a 7 valeurs que l'on met dans la variables tablo dans les meme colonne que les colonne du (sheets"GM")qui est la destination
tablo(1, 1) = Cells(derLig, 1): tablo(1, 2) = Cells(derLig, 4): tablo(1, 4) = Cells(derLig, 11)
tablo(1, 5) = Cells(derLig, 2): tablo(1, 8) = Cells(derLig, 8): tablo(1, 9) = Cells(derLig, 9)
With Worksheets("GM")
.Activate
.Unprotect Password:="XENNA" ' on déprotège le sheets
lignVide = IIf(.Range("A" & Rows.Count).End(xlUp).Row = 1, .Range("A" & Rows.Count).End(xlUp).Row, .Range("A" & Rows.Count).End(xlUp).Row + 1) ' on cherche la première ligne vide en partant d'en bas
.Cells(lignVide, 1).Resize(1, 9) = tablo ' et enfin on repose le tablo (plus communément appelé "TRANSPOSE")
.Protect Password:="XENNA"
End With
End If
End If
End Sub |