Ejecutar una macro en una rango variable

Resuelto
RachelMartel Mensajes publicados 460 Estado Miembro -  
RachelMartel Mensajes publicados 460 Estado Miembro -
Hola, Me gustaría hacer una pequeña modificación en una macro. Como no soy experta en redacción de macros, recurro a ti. Mi macro realiza una búsqueda V y pega los valores. Es para obtener las horas trabajadas por empleado. Me coloco en la primera celda del día correcto, y luego activo la macro. La uso en 5 columnas diferentes.
Sub recherchev()
' recherchev Macro
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A112"), Type:= _
xlFillValues
ActiveCell.Range("A1:A112").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Me gustaría que el Range("A1:A112") fuera variable ya que mi tabla evoluciona siempre. El Range debería ser "desde la celda activa, hasta la última fila donde hay información en la columna A". ¿Alguna sugerencia? Gracias :) Configuración: Windows 7 / Mozilla 11.0

3 respuestas

  1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Hola,

    Si tu pregunta es: encontrar la última fila de la columna A, este artículo te dará la solución

    http://www.excelabo.net/excel/derniere_cellule_vba

    --
    @+ El Pivert
    0
    1. RachelMartel Mensajes publicados 460 Estado Miembro 25
       
      Sí, había empezado a experimentar esa vía de solución, pero, como podréis ver en mi respuesta a Gyrus, no puedo aplicar directamente esa solución.

      Gracias :)
      0
    2. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Y como esto:

       ActiveCell.Range("A1:A" & [A65536].End(xlUp).Row - 2).Select
      1
    3. RachelMartel Mensajes publicados 460 Estado Miembro 25
       
      ¡Lo logré al final!

      Sub recherchev()
      '
      ' recherchev Macro
      ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)"

      ActiveCell.AutoFill Destination:=ActiveCell.Range("A1:A" & ActiveCell.End(xlDown).Row - 8), Type:=xlFillValues
      ActiveCell.Range("A1:A" & ActiveCell.End(xlDown).Row - 6).Select
      Selection.Copy
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
      End Sub


      ¡Debo confesar que no entiendo por qué tengo que hacer -6 en un lugar y -8 en el otro, ya que es la misma rango... pero bueno, ¡al menos funciona! :)

      ¡Gracias!
      0
  2. Gyrus Mensajes publicados 3360 Estado Miembro 526
     
    Hola,

    A probar:
    Sub recherchev()
    Dim MaPlage As Range
    Set MaPlage = Range(ActiveCell, ActiveCell.End(xlDown))
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)"
    ActiveCell.AutoFill Destination:=MaPlage, Type:=xlFillValues
    MaPlage.Copy
    MaPlage.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    End Sub


    A+
    0
    1. RachelMartel Mensajes publicados 460 Estado Miembro 25
       
      Sub recherchev()
      Dim MaPlage As Range
      Set MaPlage = Range(ActiveCell, ActiveCell.End(xlDown))
      ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)"
      ActiveCell.AutoFill Destination:=MaPlage, Type:=xlFillValues
      MaPlage.Select
      Selection.Copy
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
      End Sub


      J'ai modifié un peu parce qu'il est important que toutes les cellules soient sélectionnées pour faire copier puis coller les valeurs. Pour ça, ça fonctionne.

      Mon problème c'est qu'il faudrait que "MaPlage" s'arrête à la dernière cellule vide d'une autre colonne (la colonne A). Parce que en fait, l'endroit ou j'applique ma formule, ce sont toutes des cellules vides sauf le total en bas. Présentement, la macro s'arrête à mon total qui se fait écrasé. Est-ce qu'on pourrait l'arrêter 2 cellules au-dessus? J'ai essayé en ajoutant "- 2" après ActiveCell.End(xlDown) mais ça ne fonctionne pas.

      Merci pour votre aide :)
      0
  3. Maurice
     
    Bonjour
    peux etre comme ca
     Sub recherchev() ' recherchev Macro Nlig = Range("A" & Rows.Count).End(xlUp).Row ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)" ActiveCell.Select Selection.AutoFill Destination:=ActiveCell.Range("A1:A" & Nlig), Type:= _ xlFillValues ActiveCell.Range("A1:A" & Nlig).Select Selection.Copy Selection.PasteSpecial xlPasteValues Application.CutCopyMode = False End Sub 

    A+
    Maurice
    0