VBA, contar el número de filas no ocultas

Resuelto
rhalimi13 Mensajes publicados 23 Estado Miembro -  
rhalimi13 Mensajes publicados 23 Estado Miembro -
Bonjour,

Quiero contar el número de filas no ocultas y luego mostrar el resultado

Private Sub CommandButton3_Click()

Dim R As Long
Dim c As Integer

With Application.WorksheetFunction
If c.EntireRow.hiden = False Then
R = .CountA(Range("A3:A100"))
MsgBox ("hay " & R & " celdas no vacías en la columna A")

End With

End Sub

27 respuestas

  • 1
  • 2
  1. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Así debería funcionar mejor
     Private Sub CommandButton3_Click() Dim R As Double Dim l As Double For l = 1 To Cells(65536, 1).End(xlUp).Row If Not Rows(l).Hidden Then R = R + 1 Next l MsgBox ("hay " & R & " filas visibles en la columna A") End Sub 

    Se cuentan las filas visibles y no las celdas no vacías..
    --

    siempre zen
    2
  2. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    ¡Muchas gracias por tu solución!

    Voy a trabajar en ello porque soy principiante en VBA.

    ¡GRACIAS OTRA VEZ!
    0
  3. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Francamente, tu solución funciona mejor que el programa que me dieron en un foro.
    El tuyo solo cuenta los visibles, ¡eso es excelente!

    Si tengo otro problema, ¿podrás ayudarme?

    ¡gracias!
    0
  4. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Gracias por tu mensaje y ¿no es normal proporcionar código que corresponda a la necesidad?

    Si tengo otro problema, ¿podrás ayudarme?

    No hay problema, pero pronto serás tú quien ayude a los demás.

    --

    siempre zen
    0
  5. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Bonjour,

    vuelvo a ponerme en contacto contigo, esperando no pedirte demasiado

    aquí tengo un problema con inputBox, cuando hago clic en cancelar o si no ingreso nada en inputbox, VBA activa el depurador,
    me gustaría que cerrara la inputbox si cancelo,

    puedes ver, ¡MEEEERCI!

    Private Sub CommandButton2_Click()

    Range("a1:I30").Interior.ColorIndex = xlNone

    Dim msg As Double

    msg = InputBox("¿cuál es la media móvil?")

    'If msg = "" Then Exit Sub

    'Dim msg
    'msg = InputBox
    'If msg = vbCancel Then
    'Exit Sub
    'End If

    Dim c As Range

    For Each c In ActiveSheet.Range("a1:I30")

    If c < msg And c <> "" Then
    c.Interior.Color = RGB(168, 168, 168)
    End If

    Next

    End Sub
    0
  6. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    Hola

    Te propongo gestionar así la cancelación:
    On Error Resume Next ' si hay error se pasa a la siguiente línea msg = InputBox("¿cuál es la media móvil?") If msg = 0 Then Exit Sub ' si se usa "Cancelar" se sale de la macro On Error GoTo 0 ' el control de error se restablece

    También puedes hacerlo cambiando tu reserva
    Dim msg As Variant msg = InputBox("¿cuál es la media móvil?") If msg = "" Then Exit Sub ' si se usa "Cancelar" se sale de la macro

    --

    siempre zen
    0
  7. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    re

    he probado lo que me diste, pero todavía tengo problemas, ya sea que inicie el depurador o me muestre el cuadro de entrada dos veces

    mi ejercicio es colorear celdas inferiores al x%

    gracias por tu ayuda
    0
  8. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Te he dado 2 posibilidades: elige una u otra, no ambas.

    Lo más simple es pasar "msg" variando.
    --

    siempre zen
    0
  9. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Hola de nuevo

    He puesto 'msg' como variante, en la inputbox funciona perfectamente, pero por otro lado no me respeta la condición y me colorea todas las celdas, no intenta entender,

    gracias.
    0
  10. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Con esto, debería funcionar mejor.
    For Each c In ActiveSheet.Range("a1:I30") If c < Val(msg) And c <> "" Then c.Interior.Color = RGB(168, 168, 168) Else c.Interior.Color = xlNone End If Next 

    Cuando introduces un valor en el inputbox, es texto y por lo tanto hay que traducirlo a numérico para comparar.
    En las fórmulas de Excel a veces lo hace, pero no en VBA.

    También es más prudente decolorar si no se cumple la condición.
    --

    siempre zen
    0
  11. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Hola, acabo de hacer la prueba con

    Val(msg) y On Error Resume Next, ¡FUNCIONA PERFECTO!

    Entonces 'val', como me explicaste, traduce el texto a número (dado que es de un inputBox, eso es, si no me equivoco)

    y 'On Error Resume Next' permite pasar a la siguiente línea si el usuario comete un error y escribe texto (por error de tipeo)

    sin embargo, no hay necesidad del else, de lo contrario en el bucle me colorearía toda la zona de trabajo después de realizar la condición

    de otro modo, me propusieron esto: If ((CDec(c.Value) < CDec(msg)) And (CStr(c.Value) <> "")) Then, no sé qué significa y al copiar y pegar, no funcionó

    Solo me queda agradecerte y decirte hasta pronto

    ¡Que tengas un buen día!
    0
  12. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    ```vba
    Private Sub CommandButton1_Click()
    Dim var As Integer
    var = 2
    For var = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    If Cells(var, 2) > 100 Then
    Range(Cells(var, 1), Cells(var, 2)).Font.Bold = True
    End If
    Next
    End Sub
    ```
    0
  13. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    Hola

    Con otro tipo de bucle tal vez
    Private Sub CommandButton1_Click() Dim var As Integer var = 2 Do While Cells(var, 1) <> "" If Cells(var, 2) > 100 Then Range(Cells(var, 1), Cells(var, 2)).Font.Bold = True End If var = var + 1 Loop End Sub 

    Vas avanzando tu índice de fila y te detienes si la celda está vacía: ¡a adaptar con tu tabla!
    --

    siempre zen
    0
  14. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Salut mon ami

    de retour

    je voudrais s'il te plaît

    convertir une date (jj/mm/année) en semaine correspondante

    merci
    0
  15. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    Hola

    Con el año en A1, esta fórmula es más eficiente que la función NUM.SEMANA que no es confiable en Europa, al menos.
    =ENTER(MOD(ENTER((A1-2)/7)+0,6;52+5/28))+1

    --

    El conocimiento es la única materia que aumenta cuando se comparte. (Sócrates)
    0
  16. rhalimi13 Mensajes publicados 23 Estado Miembro 1
     
    Hola,

    ¡pues gracias, gracias y gracias!

    Porque pasé toda la noche de ayer, de 17:00 a 23:00 (por supuesto no de manera continua) y no encontré nada en Google.

    ¡Bien!

    ¿Puedes decirme cómo lo encontraste para que pueda mejorar mis conocimientos en informática?

    ¡Gracias de nuevo!

    ¡Que tengas un buen día!

    ¡Hasta pronto!
    0
  17. rhalimi13
     
    bonjour,

    puedes ayudarme por favor

    me gustaría colorear las celdas según el contenido de la celda en la columna B

    mi rango de datos es: "c2;l27", y mis condiciones están en la columna B

    he realizado un código pero no funciona

    aquí está:

    Private Sub CommandButton1_Click()

    Dim c As Range
    Dim var As Integer
    var = 2

    For Each c In ActiveSheet.Range("c2:l27")

    If c <> "" And Cells(var, 2) = mp Then
    c.Interior.ColorIndex = 4
    End If
    var = var + 1
    Next

    If c <> "" And Cells(var, 2) = mc Then
    c.Interior.ColorIndex = 3
    End If
    var = var + 1

    If c <> "" And Cells(var, 2) = df Then
    c.Interior.ColorIndex = 1
    End If
    var = var + 1

    End Sub
    0
  18. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    Hola

    Si he entendido...
    Private Sub CommandButton1_Click() Dim c As Range Dim var As Integer var = 2 For Each c In ActiveSheet.Range("c2:l27") If c <> "" And Cells(c.row, var) = mp Then c.Interior.ColorIndex = 4 End If Next If c <> "" And Cells(c.row, var) = mc Then c.Interior.ColorIndex = 3 End If If c <> "" And Cells(c.row, var) = df Then c.Interior.ColorIndex = 1 End If End Sub

    --

    El conocimiento es la única materia que se incrementa al compartirla. (Sócrates)
    0
    1. rhalimi71 Mensajes publicados 6 Estado Miembro
       
      re

      cuando ejecuto la macro;


      me muestra un mensaje de error: variable de objeto o variable de bloque con no definida.
      0
    2. rhalimi71 Mensajes publicados 6 Estado Miembro
       
      re

      He probado tu código corregido, y funciona cuando pongo números en lugar de mp, mc y md, pero ¿por qué no acepta texto?

      gracias
      0
    3. rhalimi71 Mensajes publicados 6 Estado Miembro
       
      de regreso;

      tu código funciona perfectamente si en lugar de "mp", "mc" y "df" pongo números: 1, 2...;

      pero para mí es texto, desafortunadamente;

      si tienes una solución para mi problema, gracias de antemano;

      hasta pronto
      0
    4. rhalimi71 Mensajes publicados 6 Estado Miembro
       
      Hola

      ¡Uf, uf, uf, finalmente lo encontré! ¡¡¡!!!


      Pues resulta que en el código que me retocaste, SIMPLE Y LITERALMENTE solo tenía que poner: mp, mc, df entre comillas:

      If c <> "" And Cells(c.Row, var) = "mp" Then
      If c <> "" And Cells(c.Row, var) = "mc" Then
      If c <> "" And Cells(c.Row, var) = "df" Then



      En mi opinión, los habías olvidado, jaja


      ¡UN MUY GRAN GRACIAS A TI!

      Que tengas un muy buen día y nos vemos pronto.
      0
    5. rhalimi71 Mensajes publicados 6 Estado Miembro
       
      Hola,

      ¡he anotado!
      ¡mi conocimiento crece contigo en todo caso!

      ¡mil gracias por tu ayuda!

      PD: si no estás conectado, ¿es posible contactar por correo?

      hasta pronto
      0
  19. rhalimi13
     
    francamente, me respondiste, ¡estoy muy contento!

    sí, eso es, en realidad quiero colorear mis celdas en el rango (Range("c2:l27")) según el contenido de las celdas de la columna b2

    he recuperado tu código, pero no funciona,

    por favor ayúdame, ¡gracias!

    ¿cómo puedo enviarte el archivo de Excel de otra manera?
    0
  20. rhalimi71 Mensajes publicados 6 Estado Miembro
     
    Si necesitas más explicaciones, estoy conectado, gracias
    porque el código que me has enviado me parece muy correcto, pero ¿por qué no responde?
    0
  • 1
  • 2