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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| Public Sub DoPaste()
Debug.Print "DoPaste Ctrl V"
On Error Resume Next
If Application.CutCopyMode And Not mRngSource Is Nothing Then
Selection.PasteSpecial xlValues
Debug.Print mRngSource.Address ' Adresses départ Source ex : $F$15:$G$16
Debug.Print Selection.Address ' Adresses destination ex : $H$19:$I$20
Debug.Print Selection.Row
Debug.Print Selection.Column
' Comment vérifier que les données respectent le domaine de valeurs ?
MonAdresse = Selection.Address
Pos1 = InStr(1, MonAdresse, "$")
Pos2 = InStr(Pos1 + 1, MonAdresse, "$")
ColDebDest = Lettre2NumCol(Mid(MonAdresse, Pos1 + 1, Pos2 - Pos1 - 1))
LigneDebDest = Mid(MonAdresse, Pos2 + 1)
Pos3 = InStr(Pos2 + 1, MonAdresse, ":")
If Pos3 = 0 Then
' 1 seule cellule
LigneDebDest = Mid(MonAdresse, Pos2 + 1)
ColFinDest = ColDebDest
LigneFinDest = LigneDebDest
Else
' Plusieurs cellules dans la Sélection
Pos4 = InStr(Pos2 + 1, MonAdresse, "$")
Pos5 = InStr(Pos4 + 1, MonAdresse, "$")
ColFinDest = Lettre2NumCol(Mid(MonAdresse, Pos4 + 1, Pos5 - Pos4 - 1))
LigneDebDest = Mid(MonAdresse, Pos2 + 1, Pos4 - Pos2 - 2)
LigneFinDest = Mid(MonAdresse, Pos5 + 1)
End If
OK = True
For MaCol = ColDebDest To ColFinDest
For MaLig = LigneDebDest To LigneFinDest
If Cells(MaLig, MaCol).Validation.Value = False And Cells(MaLig, MaCol).Validation.AlertStyle = xlValidAlertStop Then
MonTitre = Cells(MaLig, MaCol).Validation.ErrorTitle
MonMessage = "Le contenu cellule " & NumCol2Lettre(MaCol) & MaLig & " n'est pas conforme au domaine de valeurs."
MonMessage = MonMessage & vbCrLf & "Merci de corriger maintenant." & vbCrLf & vbCrLf
MonMessage = MonMessage & Cells(MaLig, MaCol).Validation.ErrorMessage
Rep = InputBox(MonMessage, MonTitre)
Cells(MaLig, MaCol) = Rep
MaCol = ColDebDest ' on boucle tant que ce n'est pas bon
MaLig = LigneDebDest - 1
End If
Next MaLig
Next MaCol
'Range(Selection.Address).Select
'SendKeys "{ENTER}", True
If mbCut Then mRngSource.ClearContents
Application.CutCopyMode = False
Else
ActiveSheet.Paste
End If
End Sub |
Partager