Tengo una hoja "PRE-RUTEO" en el tengo una tabla dinamica donde el seleccionar una celda llamada "orden" de la columna B me muestra un formulario y al hacer Clik en cualquiera de las celdas que contengan datos de la columna B me muestran los registros asociados la celda en el formulario. El problema es que al seleccionar cualquier celda de cualquier columna de la hoja "PRE-RUTEO" esta parpadea, acepto que parpadee solo al seleccionar celdas de la columna B porque entiendo es ahi donde se produce el evento de buscar los registros pero no en cualquier otra celda porque no permite recorrer celdas sin que la hoja deje de parpadear.
ESTE ES EL CODIGO
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lFilaA&, lFilaB&, lFila1&
Dim Z&, A#, B#, C#, D#, old&, X&
Dim Ws1 As Worksheet
Dim Nuevo As Object ', IndiceIcono As Integer
Dim valor As Variant
Dim V As Integer
If ActiveCell.FormulaR1C1 = "Orden" Then
UserForm6.Show
UserForm6.Left = (Application.ActiveWindow.Width - UserForm6.Width) / 2
UserForm6.Top = (Application.ActiveWindow.Height - UserForm6.Height) / 2
UserForm6.Caption = " DETALLE: ORDEN DE VENTA"
For V = UserForm6.ListView1.ListItems.Count To 1 Step -1
'Cambiar Posición.
UserForm6.ListView1.ListItems.Remove (V)
Next V
End If
With Application
.ScreenUpdating = False
old = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
If UserForm6.ListView1.ColumnHeaders.Count > 0 Then
If Not Intersect(Target, Range("B:B")) Is Nothing And Selection.Count = 1 And ActiveCell.FormulaR1C1 <> "Orden" Then
Set Ws1 = Worksheets("ASG 61,10,2")
For V = UserForm6.ListView1.ListItems.Count To 1 Step -1
'Cambiar Posición.
UserForm6.ListView1.ListItems.Remove (V)
Next V
lFilaB = 2
While Ws1.Cells(lFilaB, 10).Value <> ""
lFilaB = lFilaB + 1
Wend
A = 0#
B = 0#
C = 0#
D = 0#
lFilaA = 1
valor = Intersect(Target, Range("B:B")).Value
X = 1
For lFila1 = 2 To lFilaB
If valor = Ws1.Cells(lFila1, 11).Value Then
Set Nuevo = UserForm6.ListView1.ListItems.Add(, , X)
Nuevo.SubItems(1) = Ws1.Cells(lFila1, 11).Value
Nuevo.SubItems(2) = Ws1.Cells(lFila1, 17).Value
Nuevo.SubItems(3) = Ws1.Cells(lFila1, 18).Value
Nuevo.SubItems(4) = Ws1.Cells(lFila1, 19).Value
Nuevo.SubItems(5) = Ws1.Cells(lFila1, 21).Value
Nuevo.SubItems(6) = Ws1.Cells(lFila1, 22).Value
If Nuevo.SubItems(5) > Nuevo.SubItems(6) Then
Nuevo.ListSubItems(6).ForeColor = vbRed
'Nuevo.ListSubItems(6).Interior.ColorIndex = 36
'Nuevo.ListSubItems(6).Font.ColorIndex = 3
'Nuevo.ListSubItems(6).Font.Bold = True
End If
A = A + Val(Replace(Nuevo.SubItems(6), ",", "."))
Nuevo.SubItems(7) = Ws1.Cells(lFila1, 1).Value
B = B + Val(Replace(Nuevo.SubItems(7), ",", "."))
Nuevo.SubItems(8) = Ws1.Cells(lFila1, 23).Value
If Nuevo.SubItems(6) > Nuevo.SubItems(8) Then
Nuevo.ListSubItems(8).ForeColor = vbRed
End If
C = C + Val(Replace(Nuevo.SubItems(8), ",", "."))
Nuevo.SubItems(9) = Ws1.Cells(lFila1, 4).Value
D = D + Val(Replace(Nuevo.SubItems(9), ",", "."))
X = X + 1
End If
Next lFila1
With UserForm6
.TextBox4.Text = A
.TextBox4.ForeColor = vbBlue
.TextBox3.Text = B
.TextBox3.ForeColor = vbBlue
.TextBox2.Text = C
.TextBox1.Text = D
End With
End If
End If
With Application
.ScreenUpdating = True
.Calculation = old
.EnableEvents = True
End With
Set Ws1 = Nothing
End Sub
El evento SelectionChange que estás empleando se produce cada vez que cambia la celda activa.
Si sólo quieres que tenga en cuenta celdas de la columna B, pon al principio de todo una comprobación que termine la macro, así no da pasos que no necesitas.
algo parecido a esto.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub 'salimos de la macro si la celda no está en la columna 2
' a continuación tu macro
...
------
Ya sé Excel, pero necesito más.