Run a macro on a variable range

Solved
Anonymous user -  
 Anonymous user -
```vba
Sub recherchev()
' recherchev Macro
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Classeur1!Tableau1#Data,12,FALSE)"
ActiveCell.Select

Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Selection.AutoFill Destination:=ActiveCell.Range("A1:A" & lastRow), Type:= _
xlFillValues
ActiveCell.Range("A1:A" & lastRow).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
```

3 answers

  1. cs_Le Pivert Posted messages 8437 Status Contributor 730
     
    Hello,

    If your question is: finding the last row of column A, this article will give you the solution

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

    --
    See you, Le Pivert
    0
    1. Anonymous user
       
      Yes, I had started experimenting with this solution, but, as you will see in my response to Gyrus, I cannot directly apply this solution.

      Thank you :)
      0
    2. cs_Le Pivert Posted messages 8437 Status Contributor 730
       
      And like this:

       ActiveCell.Range("A1:A" & [A65536].End(xlUp).Row - 2).Select
      1
    3. Anonymous user
       
      I finally succeeded!

      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


      I must admit I'm puzzled as to why I have to do -6 in one case and -8 in the other, considering it’s the same range... but at least it works! :)

      Thank you!
      0
  2. Gyrus Posted messages 3360 Status Member 526
     
    Hello,

    To test:
    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


    See you!
    0
    1. Anonymous user
       
      Sub recherchev()
      Dim MaPlage As Range
      Set MaPlage = Range(ActiveCell, ActiveCell.End(xlDown).Offset(-2, 0))
      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
     
    Hello
    maybe like this
     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