Décalage de lignes grouper lors de l'insértion de valeurs

Bonjour à tous, j'ai une macro qui va chercher des valeurs dans un autre classeur excel. Mon fichier contient plusieurs sections dont les lignes sont groupées. J'ai une macro de mise à jour pour chaque section. Lorsque je mets à jour une section, mon tableau existant est effacé et les nouvelles données voulus sont insérer. Le problème est lors de l'exécution de la macro, le groupement de mes sections en-dessous de celle-ci est décaler et créée un désordre dans mes lignes groupées. D'après ce que j'ai trouvé, le problème semble provenir lors de l'exécution de la ligne :

 Selection.Insert Shift:=xlDown

Voici mon code entier:

Private Sub MAJ_CS_Mensuel_Click()

    Application.ScreenUpdating = False
    Dim Mois As String
    Dim I As Integer ' Compteur
    Dim L As Integer ' Nombre de lignes
    Mois = Range("CS_Mois").Text

'_____________________________________________________________________________________________________________
    ' Tableau de bord utilisé
    TB = ThisWorkbook.Name
    ' Chemin du fichier ciblé
    Chemin = "H:\DXA Production\1. GESTION DES SITES\3104 - VARENNES\SUIVI DES COÛTS DE LOCATION\2018\"
    ' Fichier ciblé
    Fichier = "Suivi coûts de location_Varennes_2018.xlsx"
    ' Feuille où les données sont copiées
    wsc = Mois
    ' Feuille où les données sont collées
    wsp = "Tableau de bord"
'_____________________________________________________________________________________________________________

    ' 0 - Supprimer le tableau existant

    Range("CS_Tableau").Select
    Selection.EntireRow.Delete

    ' 1 - Ouvrir le fichier des coûts de sous-traitance
    Workbooks.Open (Chemin + Fichier)

    ' 2 - Sélectionner le rapport mensuel et copier
    Workbooks(Fichier).Sheets(wsc).Activate
    Workbooks(Fichier).Sheets(wsc).Range("Tableau").Select
    Workbooks(Fichier).Sheets(wsc).Range("Tableau").Copy

    ' 3 - Activer le tableau de bord et insérer le nombre de lignes à ajouter pour le tableau
    Workbooks(TB).Activate
    Workbooks(TB).Sheets(wsp).Range("CS_Mois").Offset(2, 0).Select
    Selection.Insert Shift:=xlDown

    ' 4 - Coller les valeurs copier
    Workbooks(TB).Sheets(wsp).Range("CS_Mois").Offset(2, 0).Select
    ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    ' 5 - Donne le nom "CS_Tableau" au tableau copié et groupe les lignes
    Selection.Name = "CS_Tableau"
    Selection.Rows.Group

    ' 6 - Ferme le fichier de suivi de coûts
    Application.DisplayAlerts = False
    Workbooks(Fichier).Close

End Sub

Pour des raisons de confidentialités, je ne peux pas joindre mon fichier original, mais j'ai créer un autre fichier qui illustre le problème présenté.

16exemple.xlsm (19.91 Ko)

Merci à tout ceux qui prendront le temps de me répondre!

Bonsoir,

vos différent tableau ont ils une taille identique ?

Je veux dire par là, dans votre exemple la version 2 de la section 1 à la même taille.

Si c'est le cas il suffit alors de faire un copier/coller du nouveau tableau sur l'emplacement de l'ancien.

Il n'y a donc pas de suppression de ligne donc la taille des groupes ne changera pas...

Ou bien regardez du coté de :

Rows("1:6").Rows.Group

et

Rows("10:10").Rows.Ungroup

Après en VBA il vous suffira de "trouver" les lignes de départ et de fin des différent tableaux.

@ bientôt

LouReeD

J'aurais dû le mentionner dans mon message original mais en effet, mon tableau contenant les données que je veux copié est de grandeur variable. Sinon j'aurais fait comme tu as dis et coller directement les données sans effacer les lignes.

Evidemment, c'est même logique, non ?!

Et une feuille par tableau ?

Si les tableaux sont sur une seule feuille c'est peut être pour avoir un "œil" sur tout...

Alors il faut créer et détruire les groupe en gérant le début et la fin de chaque tableau...

@ bientôt

LouReeD

Òui c'est pour ça que je posais la question. Les sections doivent tous être sur la même feuille mais je n'avais pas envie de gérer les plusieurs centaines de lignes dans chaque macros. Je me disais qu'il y aurait sûrement une façon plus simple.

Òui c'est pour ça que je posais la question. Les sections doivent tous être sur la même feuille mais je n'avais pas envie de gérer les plusieurs centaines de lignes dans chaque macros. Je me disais qu'il y aurait sûrement une façon plus simple.

N'y aurait-il pas une façon de fixer les lignes pour qu'elles restent toujours à la même place?

Finalement , après avoir passé plusieurs heures sur le sujet j'ai découvert qu'en insérant mes lignes une par une avec une boucle, mes lignes restent grouper dans mes sections plus basse. J'ignore pourquoi ça change quelque chose mais au moins ça semble bien fonctionner!

Pour ceux que ça pourrait intéresser:

    ' 0 - Supprimer le tableau existant

    Range("CS_Tableau").Select
    Selection.EntireRow.Delete

    ' 1 - Ouvrir le fichier des coûts de sous-traitance
    Workbooks.Open (Chemin + Fichier)

    ' 2 - Sélectionner le rapport mensuel et copier
    Workbooks(Fichier).Sheets(wsc).Activate
    Workbooks(Fichier).Sheets(wsc).Range("Tableau").Select

    L = Selection.Rows.Count
    Workbooks(TB).Activate
    Workbooks(TB).Sheets(wsp).Range("CS_Mois").Offset(2, 0).Select
    For I = 1 To L
        Selection.EntireRow.Insert Shift:=xlDown
    Next I

    Workbooks(Fichier).Sheets(wsc).Activate
    Workbooks(Fichier).Sheets(wsc).Range("Tableau").Select
    Workbooks(Fichier).Sheets(wsc).Range("Tableau").Copy

    ' 4 - Coller les valeurs copier
    Workbooks(TB).Activate
    Workbooks(TB).Sheets(wsp).Range("CS_Mois").Offset(2, 0).Select
    ActiveCell.PasteSpecial xlPasteAll

    ' 5 - Donne le nom "CS_Tableau" au tableau copié et groupe les lignes
    Selection.Name = "CS_Tableau"
    Selection.Rows.Group

    ' 6 - Ferme le fichier de suivi de coûts
    Application.DisplayAlerts = False
    Workbooks(Fichier).Close

End Sub

Bonsoir,

merci de la solution pour les forumeurs !

@ bientôt

LouReeD

Rechercher des sujets similaires à "decalage lignes grouper lors insertion valeurs"