Run a macro on a variable range

Solved
RachelMartel Posted messages 460 Status Member -  
RachelMartel Posted messages 460 Status Member -
```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

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
RachelMartel Posted messages 460 Status Member 25
 
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
cs_Le Pivert Posted messages 8437 Status Contributor 730
 
And like this:

 ActiveCell.Range("A1:A" & [A65536].End(xlUp).Row - 2).Select
1
RachelMartel Posted messages 460 Status Member 25
 
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
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
RachelMartel Posted messages 460 Status Member 25
 
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
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