Concatener plusieurs onglets en un seul

Hello les amis,

J’adore travailler sur excel, mais les Macro ne sont pas mon point fort.

Surtout lorsqu’il s’agit de bidouiller le code.

Merci d’avance à ceux qui vont prendre le temps de me lire et peut-être même de me répondre.

Voici le problème :

J’ai un méga fichier de suivi. Je souhaite regrouper dans l’onglet « TOTAL », toutes les info des autres onglets identiques (plusieurs services de mon travail) contenu dans les cellules B7:G2000

J’ai déjà une macro mais je crois qu’à force de bidouiller, je me suis perdu dans les méandres du code…

Evidemment, je souhaite regrouper les infos à la suite sans les lignes vides. La recherche de la dernière ligne vide peut se faire dans la colonne B. Car si B n’est pas remplie, les autres infos ne servent à rien.

Au passage, la macro doit éviter de copier des infos des 7 premiers onglets.

J’espe Être assez claire dans ma demande

Un grand merci pour tout ce que vous faites ici les gars. Vous êtes des génies d’Excel et vos réponses me servent très souvent dans mes fichiers.

Voici le code actuel :

Sub Macro1()

' déclaration des variables

Dim Fe As Worksheet
Dim Plage As Range

' Supprime les anciennes données et mise en page

Sheets("TOTAL").Select

   Range("A2:F2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
   With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A2").Select
    Cells.FormatConditions.Delete

' Copie d 'une page

For Each Fe In ThisWorkbook.Worksheets

    If Fe.Name <> "TOTAL" Then
    If Fe.Name <> "MENU" Then
    If Fe.Name <> "VIERGE" Then
    If Fe.Name <> "Listes" Then
    If Fe.Name <> "BASE NAVALE TOULON" Then
    If Fe.Name <> "GENDARMERIE MARITIME" Then
    If Fe.Name <> "Listes 2" Then
    If Fe.Name <> "Comparatif AID@" Then

    With Fe

    'définie la plage sans la ligne de titres
    Set Plage = Range(Cells(7, 2), Cells(2000, 7))

    End With

    'colle les valeurs dans la feuille "TOTAL"
    'après la dernière ligne non vide
    Plage.Copy Worksheets("TOTAL").Range("A65500").End(xlUp).Offset(1, 0)

End If
End If
End If
End If
End If
End If
End If
End If

Next Fe

End Sub

Bonjour,

Tu ferais mieux de fournir un fichier plutôt que ce code enregistré insipide dont je ne vois quasiment aucune ligne à conserver !

Pour explication : mettre en variable la feuille Total (ce sera utile ultérieurement, supprimer l'existant délimité par UsedRange, avec Clear + une ligne pour les MFC, soit 2 lignes ! Utiliser un SelectCase pour les feuilles à ne pas prendre en considération, les autres étant alors prises en compte, définir la plage à récupérer avec CurrentRegion. Ensuite on ne copie que si l'on veut conserver aussi les mises en forme et autres éléments...

Re,

Sub MacroTotal()
    Dim wsT As Worksheet, Fe As Worksheet, Plg As Range, n&, nn&
    Set wsT = Worksheets("TOTAL")
    With wsT.UsedRange
        .FormatConditions.Delete
        .Offset(1).Clear
    End With
    nn = 2
    For Each Fe In Worksheets
        Select Case Fe.Name
            Case "TOTAL", "MENU", "VIERGE", "Listes", "BASE NAVALE TOULON", _
             "GENDARMERIE MARITIME", "Listes 2", "Comparatif AID@"
            Case Else
                With Fe
                    n = .Range("B" & .Rows.Count).End(xlUp).Row - 6
                    If n > 0 Then
                        Set Plg = .Range("B7").Resize(n, 6)
                        Plg.Copy wsT.Range("A" & nn)
                        nn = nn + n
                    End If
                End With
        End Select
    Next Fe
End Sub

Cordialement.

Merci pour votre rapidité 👍

Je teste le code demain au travail et je vous dit ce qu’il en est.

Dsl pour ma page de code degueulasse 😷😰

Merci c’est exactement ce qu’il me fallait.

Tu gère.

Bonne continuation.

Rechercher des sujets similaires à "concatener onglets seul"