Sélection Range dans un tableau avec variables

Bonjour à toutes et tous,

Dans mon classeur exemple, dans des données misent en forme tableau il y'a une macro qui affecte une formule à une cellule sélectionner via instruction RANGE; puis effectue une sélection de plage cellules de nouveau via RANGE pour copier coller cette formule, en calculer les résultats puis copier coller ces résultats.

Je souhaiterais que dans les 2 instructions ci après, la cellule et ou les plages sélectionnées soient des variables contenues dans une autre feuille du classeur.

Range("TABRECAP[[#Headers],[01/01/2017]]").Select
'01/01/2017 variable contenue en A1 de la feuille PARAMETRAGE

Range("TABRECAP[[01/01/2017]:[01/02/2018]]").Select
'01/01/2017 variable contenue en A2 de la feuille PARAMETRAGE
'01/02/2018 variable contenue en A3 de la feuille PARAMETRAGE

Auriez vous une solution à me proposer ?

Merci

Cordialement

Hugues

10range-variable.xlsm (27.38 Ko)

Code complet

Sub TESFORMULE()
Range("TABRECAP[[#Headers],[01/01/2017]]").Select

    ActiveCell.Offset(1, 0).Select

    ActiveCell.FormulaR1C1 = "=R[2]C+R[3]C"

    Selection.Copy

Range("TABRECAP[[01/01/2017]:[01/02/2018]]").Select
        Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
        Application.CutCopyMode = False

Calculate

Range("TABRECAP").Copy

Range("TABRECAP").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

 End Sub

Bonsoir,

Le plus simple est d'utiliser les propriétés de votre objet tableau (ListObject). Par ailleurs, les "Select" et "Copy" sont superflus.

Ci-dessous code

Sub test2()
    Dim id1 As String, id2 As String

    With Sheets("PARAMETRAGE")
        id1 = .Range("A3"): id2 = .Range("A4")
    End With
    With Sheets("TABRECAP").ListObjects("TABRECAP")
        Range(.ListColumns(id1).DataBodyRange, .ListColumns(id2).DataBodyRange).FormulaR1C1 = "=R[2]C+R[3]C"
    End With

End Sub

NB : La propriété DatabodyRange correspond uniquement à la plage des données du tableau (les entêtes sont exclues)

Bonjour Thev,

Merci pour votre réponse non seulement très rapide mais qui surtout solutionne ma problématique.

Votre approche allégeant et accélérant qui plus est mon code sur la base réelle contenant beaucoup plus de données (je suis novice et m'appuie essentiellement sur l'enregistreur de macro ,par tâtonnement et recherche et conseil sur ce forum).

Je ne connais pas les propriétés ListObjects et DataBodyRange, occasion pour moi donc de tenter d'approfondir.

Merci beaucoup

Cordialement

Hugues

les propriétés ListObjects

ListObjects n'est pas une propriété mais une collection d'objets tableau, l'objet tableau étant ListObject.

De même que WorkBooks est la collection des objets classeur chargés en mémoire et WorkBook l'objet classeur

De même que WorkSheets est la collection des objets feuille d'un classeur et WorkSheet l'objet feuille

Allez dans l'éditeur VBA --> affichage --> explorateur d'objets, vous y trouverez les collections et objets gérés par Excel avec leurs propriétés(icône dossier grise), leurs actions (icône verte) et leur événements (icône jaune).

En cliquant sur l'aide (?), vous aurez l'explication d'un objet, d'une propriété, action ou événement.

L'enregistreur de macro est utile pour connaître les objets, propriétés et actions impliqués dans les opérations à effectuer. Mais son code est très majoritairement composé d'instructions superflues qui le compliquent et le rendent peu lisible, en particulier les "Select", "Copy", "Paste", les "With" avec des tas d'options inutiles ...

Ii faut donc apprendre à écrire son propre code en utilisant au mieux les objets et instructions de l'application Excel.

Bonjour Thev,

Merci pour vos conseils

Cordialement

Hugues

Rechercher des sujets similaires à "selection range tableau variables"