Exécuter une macro sur une plage variable [Résolu/Fermé]

Messages postés
434
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
23 septembre 2018
- - Dernière réponse : RachelMartel
Messages postés
434
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
23 septembre 2018
- 17 févr. 2015 à 19:12
Bonjour,

J'aimerais effectuer une petite modification sur une macro. N'étant pas une experte en rédaction de macro, je fais appel à vous.

Ma macro fait une recherche V et colle les valeurs. C'est pour aller chercher les heures travaillées par employé. Je me place dans la première cellule de la bonne journée, puis j'active la macro. J'utilise donc cette macro sur 5 colonnes différentes.

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


J'aimerais que le Range("A1:A112") soit variable puisque mon tableau évolue toujours. Le Range devrait être "de la cellule active, jusqu'à la dernière ligne où il y a des informations dans la colonne A).

Des suggestions?

Merci :)

Afficher la suite 

3 réponses

Messages postés
6424
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
8 décembre 2019
420
0
Merci
Bonjour,

Si ta question est: trouver la dernière ligne de la colonne A, cette article te donnera la solution

http://www.excelabo.net/excel/derniere_cellule_vba
RachelMartel
Messages postés
434
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
23 septembre 2018
19 -
Oui, j'avais commencé à expérimenter cette piste de solution, mais, comme vous pourrez le voir dans ma réponse à Gyrus, je ne peux pas appliquer directement cette solution.

Merci :)
cs_Le Pivert
Messages postés
6424
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
8 décembre 2019
420 -
Et comme ceci:

  ActiveCell.Range("A1:A" & [A65536].End(xlUp).Row - 2).Select
RachelMartel
Messages postés
434
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
23 septembre 2018
19 -
J'ai finalement réussi!

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


Je dois avouer que je ne comprends par pourquoi je dois faire -6 à une place et -8 à l'autre étant donné que c'est la même plage... mais bon, au moins ça fonctionne! :)

Merci!
Messages postés
3341
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
450
0
Merci
Bonjour,

A tester :
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+
RachelMartel
Messages postés
434
Date d'inscription
mardi 14 mai 2013
Statut
Membre
Dernière intervention
23 septembre 2018
19 -
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
Merci
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