Exécuter une macro sur une plage variable

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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 :)

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    0
    1. Utilisateur anonyme
       
      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 :)
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Et comme ceci:

        ActiveCell.Range("A1:A" & [A65536].End(xlUp).Row - 2).Select
      1
    3. Utilisateur anonyme
       
      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!
      0
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    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+
    0
    1. Utilisateur anonyme
       
      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