Sélection d'une plage de cellules

taratata

XLDnaute Junior
Bonjour,

Dans un tableau structuré, j'ai besoin de reproduire ce que l'on peut faire via la souris via VBA code
- Sélectionner la cellule Source (ex: I30)
- Remplir une plage de cellules (en se servant du pt. carrée en bas à dtr. du rectangle de sélection
- Etirer jusqu'à une cellule destination (ex : I31)

de plus la cellule Source est une variable, donc la cellule destination sera aussi variable

J'ai essayé plusieurs écriture sans succès.

voici le code

VB:
        Dim Feuille As Worksheet
        Dim list_obj As ListObject
        Dim list_row As ListRow
        
        Set Feuille = Sheets("Stock")
        Set list_obj = Feuille.ListObjects(Nom_Tableau)
        Set list_row = list_obj.ListRows.Add
        
        Last_Line = list_obj.Range.Rows.Count
    
        
        list_row.Range(Last_Line - 1, 9).Select           ' sélection de la cellule source
        Selection.Copy
        
        ' ligne pour sélectionner la plage pour copy
        
        'list_row.Range("J" & Last_Line - 1 & ":" & "J" & Last_Line).Select
        'list_row.Range(Cells(9, (Last_Line - 1)), Cells(9, Last_Line)).Select

        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False

merci pour votre temps
 

Jean-Eric

XLDnaute Occasionnel
Bonjour,
Une proposition à étudier.
Cdlt.
VB:
Public Sub InsertRowInTable()
Dim lr As ListRow, rCell As Range
    If Not ActiveCell.ListObject Is Nothing Then
        With ActiveCell.ListObject
            If .InsertRowRange Is Nothing Then
                Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
                Set lr = .ListRows(ActiveCell.Row - .HeaderRowRange.Row)
                lr.Range.Copy Destination:=rCell
            End If
        End With
    End If
End Sub
 

Pièces jointes

  • taratata.xlsm
    15.6 KB · Affichages: 3

taratata

XLDnaute Junior
merci Jean-Eric

J'ai autrement en incorporent la formule dans la macro.
Elle fonctionnement est bon, dans le sens qu'elle alloue la valeur de la nouvelle cellule à tester.

Par contre j'ai une erreur "propriété ou méthode non gérée par cet objet

1028661

1028662


voici le code
VB:
Option Explicit

Sub test_0()
        Dim Feuille As Worksheet
        Dim list_obj As ListObject
        Dim list_row As ListRow
        
        Set Feuille = Sheets("Sheet1")
        Set list_obj = Feuille.ListObjects("Table1")
        
        Dim last_line As Integer
        last_line = list_obj.Range.Rows.Count
        MsgBox last_line
        
list_obj.Range(last_line + 1, 5) = "05.05.2020"
list_obj.Range(last_line, 6).Copy list_obj.Range(last_line + 1, 6)
With list_obj
            .FormulaR1C1 = "=SI($G" & last_line & ">AUJOURDHUI();" & "Valide" & ";" & "Périmé" & ")"
            .Copy list_obj.Range(last_line + 1, 6)
End With

End Sub

dans la formule, la cellule à tester est une variable last_line

une idée s'il vous plaît
merci de votre temps
 

Pièces jointes

  • taratata - 1.xlsm
    22.6 KB · Affichages: 4

Jean-Eric

XLDnaute Occasionnel
Bonjour,
Pour commencer, les formules d'un tableau structurées sont reconduites automatiquement lors de l'ajout de lignes, tout comme la mise en forme des cellules, ou encore les MFCs (mise en forme conditionnelles).
La procédure, de ce que je comprends, pourrait être simplement :
VB:
Public Sub InsertRowInTable()
Dim lr As ListRow, rCell As Range
    If Not ActiveCell.ListObject Is Nothing Then
        With ActiveCell.ListObject
            If .InsertRowRange Is Nothing Then
                Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
                Set lr = .ListRows(ActiveCell.Row - .HeaderRowRange.Row)
                lr.Range.Copy Destination:=rCell
                rCell.Offset(, 4).Value = "05/05/2020"
            End If
        End With
    End If
End Sub
 

Pièces jointes

  • taratata - 1.xlsm
    21.8 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Bonjour

Je te laisse faire les tests en t'inspirant des deux exemples de syntaxe ci-dessous
VB:
Sub test_formules()
Dim last_line$
last_line = 1
[A1].Formula = "=IF($G" & last_line & ">TODAY(),""Valide"",""Périmé"")"
[A2].FormulaR1C1 = "=IF(R" & last_line & "C7>TODAY(),""Valide"",""Périmé"")"
End Sub

EDITION: Bonjour Jean-Eric
(Désolé, je n'ai pas rafraîchi la page avant de poster)
 

taratata

XLDnaute Junior
merci Staple1600

le test fonctionne.

je pense que je fais fausse route.

car parfois, sur une des tableaux structurés la cellule contenant la formule n'est pas répliquée lors de l'ajout d'une nouvelle ligne lors
de l'écriture des diverses valeur des autres cellules de cette même nouvelle ligne.
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 868
dernier inscrit
JJV